From: <tj...@us...> - 2011-06-25 00:28:06
|
Revision: 14816 http://alleg.svn.sourceforge.net/alleg/?rev=14816&view=rev Author: tjaden Date: 2011-06-25 00:28:00 +0000 (Sat, 25 Jun 2011) Log Message: ----------- audio: Make it possible to start/stop an audio stream which is attached to a voice. Modified Paths: -------------- allegro/branches/5.1/addons/audio/allegro5/internal/aintern_audio.h allegro/branches/5.1/addons/audio/kcm_stream.c allegro/branches/5.1/addons/audio/kcm_voice.c Modified: allegro/branches/5.1/addons/audio/allegro5/internal/aintern_audio.h =================================================================== --- allegro/branches/5.1/addons/audio/allegro5/internal/aintern_audio.h 2011-06-25 00:27:23 UTC (rev 14815) +++ allegro/branches/5.1/addons/audio/allegro5/internal/aintern_audio.h 2011-06-25 00:28:00 UTC (rev 14816) @@ -51,6 +51,7 @@ extern ALLEGRO_AUDIO_DRIVER *_al_kcm_driver; const void *_al_voice_update(ALLEGRO_VOICE *voice, unsigned int *samples); +bool _al_kcm_set_voice_playing(ALLEGRO_VOICE *voice, bool val); /* A voice structure that you'd attach a mixer or sample to. Ideally there * would be one ALLEGRO_VOICE per system/hardware voice. Modified: allegro/branches/5.1/addons/audio/kcm_stream.c =================================================================== --- allegro/branches/5.1/addons/audio/kcm_stream.c 2011-06-25 00:27:23 UTC (rev 14815) +++ allegro/branches/5.1/addons/audio/kcm_stream.c 2011-06-25 00:28:00 UTC (rev 14816) @@ -459,10 +459,19 @@ if (stream->spl.parent.u.ptr && stream->spl.parent.is_voice) { ALLEGRO_VOICE *voice = stream->spl.parent.u.voice; - if (!al_set_voice_playing(voice, val)) { - return false; + bool rc; + + if (val == stream->spl.is_playing) { + return true; } + + rc = _al_kcm_set_voice_playing(voice, val); + if (rc) { + stream->spl.is_playing = val; + } + return rc; } + stream->spl.is_playing = val; if (!val) { Modified: allegro/branches/5.1/addons/audio/kcm_voice.c =================================================================== --- allegro/branches/5.1/addons/audio/kcm_voice.c 2011-06-25 00:27:23 UTC (rev 14815) +++ allegro/branches/5.1/addons/audio/kcm_voice.c 2011-06-25 00:28:00 UTC (rev 14816) @@ -479,8 +479,6 @@ if (voice->attached_stream && !voice->is_streaming) { bool playing = al_get_voice_playing(voice); - bool ret; - if (playing == val) { if (playing) { ALLEGRO_DEBUG("Voice is already playing\n"); @@ -491,14 +489,7 @@ return true; } - al_lock_mutex(voice->mutex); - // XXX change methods - if (val) - ret = voice->driver->start_voice(voice) == 0; - else - ret = voice->driver->stop_voice(voice) == 0; - al_unlock_mutex(voice->mutex); - return ret; + return _al_kcm_set_voice_playing(voice, val); } else { ALLEGRO_DEBUG("Voice has no sample or mixer attached\n"); @@ -507,4 +498,21 @@ } +bool _al_kcm_set_voice_playing(ALLEGRO_VOICE *voice, bool val) +{ + bool ret; + ASSERT(voice); + + al_lock_mutex(voice->mutex); + // XXX change methods + if (val) + ret = voice->driver->start_voice(voice) == 0; + else + ret = voice->driver->stop_voice(voice) == 0; + al_unlock_mutex(voice->mutex); + + return ret; +} + + /* vim: set sts=3 sw=3 et: */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |