X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/98840d95db7ab85159dc63d523864b2523d48cae..e3a630bb68247e39c04864cdcdb2178ded515f03:/src/unix/sound_sdl.cpp diff --git a/src/unix/sound_sdl.cpp b/src/unix/sound_sdl.cpp index ca2e35113e..1ecc0212e1 100644 --- a/src/unix/sound_sdl.cpp +++ b/src/unix/sound_sdl.cpp @@ -5,7 +5,7 @@ // Modified by: // Created: 2004/01/31 // RCS-ID: $Id$ -// Copyright: (c) 2004, Vaclav Slavik +// Copyright: (c) 2004, Open Source Applications Foundation // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -18,7 +18,7 @@ #pragma hdrstop #endif -#if wxUSE_WAVE && wxUSE_LIBSDL +#if wxUSE_SOUND && wxUSE_LIBSDL #include @@ -82,9 +82,12 @@ public: int GetPriority() const { return 9; } bool IsAvailable() const; bool HasNativeAsyncPlayback() const { return true; } - bool Play(wxSoundData *data, unsigned flags); + bool Play(wxSoundData *data, unsigned flags, + volatile wxSoundPlaybackStatus *status); void FillAudioBuffer(Uint8 *stream, int len); + void FinishedPlayback(); + void Stop(); bool IsPlaying() const { return m_playing; } @@ -113,7 +116,7 @@ private: { wxLogTrace(_T("sound"), _T("received playback status change notification")); - m_backend->Stop(); + m_backend->FinishedPlayback(); } wxSoundBackendSDL *m_backend; @@ -191,6 +194,12 @@ void wxSoundBackendSDL::FillAudioBuffer(Uint8 *stream, int len) } } +void wxSoundBackendSDL::FinishedPlayback() +{ + if (!m_playing) + Stop(); +} + bool wxSoundBackendSDL::OpenAudio() { if (!m_audioOpen) @@ -236,7 +245,8 @@ void wxSoundBackendSDL::CloseAudio() } } -bool wxSoundBackendSDL::Play(wxSoundData *data, unsigned flags) +bool wxSoundBackendSDL::Play(wxSoundData *data, unsigned flags, + volatile wxSoundPlaybackStatus *WXUNUSED(status)) { Stop(); @@ -273,6 +283,7 @@ bool wxSoundBackendSDL::Play(wxSoundData *data, unsigned flags) } SDL_LockAudio(); + wxLogTrace(_T("sound"), _T("playing new sound")); m_playing = true; m_pos = 0; m_loop = (flags & wxSOUND_LOOP); @@ -286,7 +297,7 @@ bool wxSoundBackendSDL::Play(wxSoundData *data, unsigned flags) if (!(flags & wxSOUND_ASYNC)) { wxLogTrace(_T("sound"), _T("waiting for sample to finish")); - while (m_playing) + while (m_playing && m_data == data) { #if wxUSE_THREADS // give the playback thread a chance to add event to pending @@ -324,4 +335,4 @@ extern "C" wxSoundBackend *wxCreateSoundBackendSDL() return new wxSoundBackendSDL(); } -#endif // wxUSE_WAVE && wxUSE_LIBSDL +#endif // wxUSE_SOUND && wxUSE_LIBSDL