]> git.saurik.com Git - wxWidgets.git/blobdiff - utils/wxMMedia2/lib/sndaiff.cpp
added support for several new events in wxCalendarCtrl: clicking on week
[wxWidgets.git] / utils / wxMMedia2 / lib / sndaiff.cpp
index 8c53872a94471f1f2a894fd3a0ef8bb9a5b038ab..674141f653d4d8430a843d3b23bd827d71ac2465 100644 (file)
@@ -9,7 +9,8 @@
 #pragma implementation "sndaiff.cpp"
 #endif
 
-#include <wx/defs.h>
+#include <wx/wxprec.h>
+
 #include <wx/stream.h>
 #include <wx/datstrm.h>
 #include <wx/filefn.h>
@@ -41,6 +42,44 @@ wxSoundAiff::~wxSoundAiff()
 {
 }
 
+bool wxSoundAiff::CanRead()
+{
+  wxUint32 signature1, signature2, len;
+
+  if (m_input->Read(&signature1, 4).LastRead() != 4)
+    return FALSE;
+
+  if (wxUINT32_SWAP_ON_BE(signature1) != FORM_SIGNATURE) {
+    m_input->Ungetch(&signature1, 4);
+    return FALSE;
+  }
+
+  m_input->Read(&len, 4);
+  if (m_input->LastRead() != 4) {
+    m_input->Ungetch(&len, m_input->LastRead());
+    m_input->Ungetch(&signature1, 4);
+    return FALSE;
+  }
+
+  if (m_input->Read(&signature2, 4).LastRead() != 4) {
+    m_input->Ungetch(&signature2, m_input->LastRead());
+    m_input->Ungetch(&len, 4);
+    m_input->Ungetch(&signature1, 4);
+    return FALSE;
+  }
+
+  m_input->Ungetch(&signature2, 4);
+  m_input->Ungetch(&len, 4);
+  m_input->Ungetch(&signature1, 4);
+
+  if (
+         wxUINT32_SWAP_ON_BE(signature2) != AIFF_SIGNATURE &&
+         wxUINT32_SWAP_ON_BE(signature2) != AIFC_SIGNATURE)
+    return FALSE;
+
+  return TRUE;
+}
+
 #define FAIL_WITH(condition, err) if (condition) { m_snderror = err; return FALSE; }
 
 bool wxSoundAiff::PrepareToPlay()
@@ -89,7 +128,7 @@ bool wxSoundAiff::PrepareToPlay()
       sndformat.SetSampleRate((wxUint32) srate);
       sndformat.SetBPS(bps);
       sndformat.SetChannels(channels);
-      sndformat.Signed(TRUE);
+      sndformat.Signed(FALSE);
       sndformat.SetOrder(wxBIG_ENDIAN);
 
       if (!SetSoundFormat(sndformat))
@@ -115,20 +154,22 @@ bool wxSoundAiff::PrepareToPlay()
 
 bool wxSoundAiff::PrepareToRecord(unsigned long time)
 {
+  // TODO
   return FALSE;
 }
 
 bool wxSoundAiff::FinishRecording()
 {
+  // TODO
   return FALSE;
 }
 
-size_t wxSoundAiff::GetData(void *buffer, size_t len)
+wxUint32 wxSoundAiff::GetData(void *buffer, wxUint32 len)
 {
   return m_input->Read(buffer, len).LastRead();
 }
 
-size_t wxSoundAiff::PutData(const void *buffer, size_t len)
+wxUint32 wxSoundAiff::PutData(const void *buffer, wxUint32 len)
 {
   return m_output->Write(buffer, len).LastWrite();
 }