]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/core/sound.cpp
Applied Blit system options optimization to StretchBlit
[wxWidgets.git] / src / osx / core / sound.cpp
index fb5ef885015126f1383c265a7818521b3dffc0fd..aef9161af2ef9b3d6b435f1fed99b275ec320630 100644 (file)
@@ -1,11 +1,11 @@
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
-// Name:        src/osx/carbon/sound.cpp
-// Purpose:     wxSound class implementation: optional
-// Author:      Ryan Norton
+// Name:        src/osx/core/sound.cpp
+// Purpose:     wxSound class implementation using AudioToolbox
+// Author:      Stefan Csomor
 // Modified by: Stefan Csomor
 // Modified by: Stefan Csomor
-// Created:     1998-01-01
-// RCS-ID:      $Id: sound.cpp 61475 2009-07-20 16:47:54Z VZ $
-// Copyright:   (c) Ryan Norton
+// Created:     2009-01-01
+// RCS-ID:      $Id$
+// Copyright:   (c) Stefan Csomor
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
@@ -38,21 +38,21 @@ public:
     wxOSXAudioToolboxSoundData(const wxString& fileName);
 
     ~wxOSXAudioToolboxSoundData();
     wxOSXAudioToolboxSoundData(const wxString& fileName);
 
     ~wxOSXAudioToolboxSoundData();
-    
+
     virtual bool Play(unsigned flags);
 
     virtual void DoStop();
 protected:
     static void CompletionCallback(SystemSoundID  mySSID, void * soundRef);
     void SoundCompleted();
     virtual bool Play(unsigned flags);
 
     virtual void DoStop();
 protected:
     static void CompletionCallback(SystemSoundID  mySSID, void * soundRef);
     void SoundCompleted();
-    
-    SystemSoundID m_soundID;    
+
+    SystemSoundID m_soundID;
     wxString m_sndname; //file path
 };
 
 wxOSXAudioToolboxSoundData::wxOSXAudioToolboxSoundData(const wxString& fileName) :
     m_soundID(NULL)
     wxString m_sndname; //file path
 };
 
 wxOSXAudioToolboxSoundData::wxOSXAudioToolboxSoundData(const wxString& fileName) :
     m_soundID(NULL)
-{                                            
+{
     m_sndname = fileName;
 }
 
     m_sndname = fileName;
 }
 
@@ -61,11 +61,16 @@ wxOSXAudioToolboxSoundData::~wxOSXAudioToolboxSoundData()
     DoStop();
 }
 
     DoStop();
 }
 
-void wxOSXAudioToolboxSoundData::CompletionCallback(SystemSoundID  mySSID, void * soundRef)
+void
+wxOSXAudioToolboxSoundData::CompletionCallback(SystemSoundID WXUNUSED(mySSID),
+                                               void * soundRef)
 {
     wxOSXAudioToolboxSoundData* data = (wxOSXAudioToolboxSoundData*) soundRef;
 {
     wxOSXAudioToolboxSoundData* data = (wxOSXAudioToolboxSoundData*) soundRef;
-    
+
     data->SoundCompleted();
     data->SoundCompleted();
+
+    if (data->IsMarkedForDeletion())
+        delete data;
 }
 
 void wxOSXAudioToolboxSoundData::SoundCompleted()
 }
 
 void wxOSXAudioToolboxSoundData::SoundCompleted()
@@ -74,10 +79,10 @@ void wxOSXAudioToolboxSoundData::SoundCompleted()
     {
         if (m_flags & wxSOUND_LOOP)
             AudioServicesPlaySystemSound(m_soundID);
     {
         if (m_flags & wxSOUND_LOOP)
             AudioServicesPlaySystemSound(m_soundID);
-        else 
+        else
             Stop();
     }
             Stop();
     }
-    else 
+    else
     {
         Stop();
         CFRunLoopStop(CFRunLoopGetCurrent());
     {
         Stop();
         CFRunLoopStop(CFRunLoopGetCurrent());
@@ -91,7 +96,7 @@ void wxOSXAudioToolboxSoundData::DoStop()
     {
         AudioServicesDisposeSystemSoundID (m_soundID);
         m_soundID = NULL;
     {
         AudioServicesDisposeSystemSoundID (m_soundID);
         m_soundID = NULL;
-        
+
         wxSound::SoundStopped(this);
     }
 }
         wxSound::SoundStopped(this);
     }
 }
@@ -101,13 +106,13 @@ bool wxOSXAudioToolboxSoundData::Play(unsigned flags)
     Stop();
 
     m_flags = flags;
     Stop();
 
     m_flags = flags;
-    
+
     wxCFRef<CFMutableStringRef> cfMutableString(CFStringCreateMutableCopy(NULL, 0, wxCFStringRef(m_sndname)));
     CFStringNormalize(cfMutableString,kCFStringNormalizationFormD);
     wxCFRef<CFURLRef> url(CFURLCreateWithFileSystemPath(kCFAllocatorDefault, cfMutableString , kCFURLPOSIXPathStyle, false));
 
     AudioServicesCreateSystemSoundID(url, &m_soundID);
     wxCFRef<CFMutableStringRef> cfMutableString(CFStringCreateMutableCopy(NULL, 0, wxCFStringRef(m_sndname)));
     CFStringNormalize(cfMutableString,kCFStringNormalizationFormD);
     wxCFRef<CFURLRef> url(CFURLCreateWithFileSystemPath(kCFAllocatorDefault, cfMutableString , kCFURLPOSIXPathStyle, false));
 
     AudioServicesCreateSystemSoundID(url, &m_soundID);
-    AudioServicesAddSystemSoundCompletion( m_soundID, NULL, NULL, wxOSXAudioToolboxSoundData::CompletionCallback, (void *) this );
+    AudioServicesAddSystemSoundCompletion( m_soundID, CFRunLoopGetCurrent(), NULL, wxOSXAudioToolboxSoundData::CompletionCallback, (void *) this );
 
     bool sync = !(flags & wxSOUND_ASYNC);
 
 
     bool sync = !(flags & wxSOUND_ASYNC);
 
@@ -115,26 +120,26 @@ bool wxOSXAudioToolboxSoundData::Play(unsigned flags)
 
     if ( sync )
     {
 
     if ( sync )
     {
-        while( m_soundID ) 
+        while( m_soundID )
         {
             CFRunLoopRun();
         }
     }
         {
             CFRunLoopRun();
         }
     }
-            
+
     return true;
 }
 
     return true;
 }
 
-bool wxSound::Create(int size, const wxByte* data)
+bool wxSound::Create(size_t WXUNUSED(size), const void* WXUNUSED(data))
 {
 {
+    wxFAIL_MSG( "not implemented" );
+
     return false;
 }
 
 bool wxSound::Create(const wxString& fileName, bool isResource)
 {
     return false;
 }
 
 bool wxSound::Create(const wxString& fileName, bool isResource)
 {
-    if ( isResource )
-        return false;
-    
-    
+    wxCHECK_MSG( !isResource, false, "not implemented" );
+
     m_data = new wxOSXAudioToolboxSoundData(fileName);
     return true;
 }
     m_data = new wxOSXAudioToolboxSoundData(fileName);
     return true;
 }