X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9a78f7856de686581ef77b45f3ddb136d8a907d5..60372b0d54379701d62edf5595a7dc25c48330e1:/src/osx/core/sound.cpp?ds=sidebyside diff --git a/src/osx/core/sound.cpp b/src/osx/core/sound.cpp index fd9d6d4b76..aef9161af2 100644 --- a/src/osx/core/sound.cpp +++ b/src/osx/core/sound.cpp @@ -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 -// 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 ///////////////////////////////////////////////////////////////////////////// @@ -38,21 +38,21 @@ public: wxOSXAudioToolboxSoundData(const wxString& fileName); ~wxOSXAudioToolboxSoundData(); - + 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) -{ +{ m_sndname = fileName; } @@ -66,8 +66,11 @@ wxOSXAudioToolboxSoundData::CompletionCallback(SystemSoundID WXUNUSED(mySSID), void * soundRef) { wxOSXAudioToolboxSoundData* data = (wxOSXAudioToolboxSoundData*) soundRef; - + data->SoundCompleted(); + + if (data->IsMarkedForDeletion()) + delete data; } void wxOSXAudioToolboxSoundData::SoundCompleted() @@ -76,10 +79,10 @@ void wxOSXAudioToolboxSoundData::SoundCompleted() { if (m_flags & wxSOUND_LOOP) AudioServicesPlaySystemSound(m_soundID); - else + else Stop(); } - else + else { Stop(); CFRunLoopStop(CFRunLoopGetCurrent()); @@ -93,7 +96,7 @@ void wxOSXAudioToolboxSoundData::DoStop() { AudioServicesDisposeSystemSoundID (m_soundID); m_soundID = NULL; - + wxSound::SoundStopped(this); } } @@ -103,13 +106,13 @@ bool wxOSXAudioToolboxSoundData::Play(unsigned flags) Stop(); m_flags = flags; - + wxCFRef cfMutableString(CFStringCreateMutableCopy(NULL, 0, wxCFStringRef(m_sndname))); CFStringNormalize(cfMutableString,kCFStringNormalizationFormD); wxCFRef 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); @@ -117,16 +120,16 @@ bool wxOSXAudioToolboxSoundData::Play(unsigned flags) if ( sync ) { - while( m_soundID ) + while( m_soundID ) { CFRunLoopRun(); } } - + return true; } -bool wxSound::Create(int WXUNUSED(size), const wxByte* WXUNUSED(data)) +bool wxSound::Create(size_t WXUNUSED(size), const void* WXUNUSED(data)) { wxFAIL_MSG( "not implemented" ); @@ -136,7 +139,7 @@ bool wxSound::Create(int WXUNUSED(size), const wxByte* WXUNUSED(data)) bool wxSound::Create(const wxString& fileName, bool isResource) { wxCHECK_MSG( !isResource, false, "not implemented" ); - + m_data = new wxOSXAudioToolboxSoundData(fileName); return true; }