Sorry for not replying to my previous email, I think gmail is not showing it (or it was lost somewhere else...).
This is a quick patch to have pause and resume working on alsoft and any other implementation. I just finished and haven't even tried to compile it, it's late and I have to install quite a few packages to be able to do it, so I'll try to test it tomorrow, sorry :-) The most obvious issue with this patch is that now the bool member of SGSoundSample called 'playing' is true whether it's paused or not. I think it's fine code-wise, but the name might mislead people. Maybe renaming it to 'active' or something similar would make sense. I tried to maintain the coding style, and used 'cvs diff -u' to generate the patch. Comments welcome. Cheers, Matias D'Ambrosio
Index: simgear/sound/sample_openal.cxx =================================================================== RCS file: /var/cvs/SimGear-0.3/source/simgear/sound/sample_openal.cxx,v retrieving revision 1.33 diff -u -r1.33 sample_openal.cxx --- simgear/sound/sample_openal.cxx 12 Dec 2008 07:41:44 -0000 1.33 +++ simgear/sound/sample_openal.cxx 27 May 2009 01:58:30 -0000 @@ -230,6 +230,21 @@ } +// pause or unpause the sample +void SGSoundSample::pause( bool _pause ) { + if ( playing ) { + if ( _pause) { + alSourcePause( source); + print_openal_error("play (alSourcePause)"); + } + else { + alSourcePlay( source ); + print_openal_error("play (alSourcePlay)"); + } + } +} + + // stop playing the sample void SGSoundSample::stop() { if (playing) { Index: simgear/sound/sample_openal.hxx =================================================================== RCS file: /var/cvs/SimGear-0.3/source/simgear/sound/sample_openal.hxx,v retrieving revision 1.23 diff -u -r1.23 sample_openal.hxx --- simgear/sound/sample_openal.hxx 23 Oct 2008 18:46:55 -0000 1.23 +++ simgear/sound/sample_openal.hxx 27 May 2009 01:58:30 -0000 @@ -151,6 +151,13 @@ void play( bool _loop ); /** + * Pause or unpause this sample. + * + * @param _pause Define whether the sound should be paused or unpaused. + */ + void pause( bool _pause = true ); + + /** * Stop playing this sample. * * @param sched A pointer to the appropriate scheduler. Index: simgear/sound/soundmgr_openal.cxx =================================================================== RCS file: /var/cvs/SimGear-0.3/source/simgear/sound/soundmgr_openal.cxx,v retrieving revision 1.29 diff -u -r1.29 soundmgr_openal.cxx --- simgear/sound/soundmgr_openal.cxx 25 Jul 2008 18:35:42 -0000 1.29 +++ simgear/sound/soundmgr_openal.cxx 27 May 2009 01:58:30 -0000 @@ -188,7 +188,12 @@ SGSoundMgr::pause () { if (context) { - alcSuspendContext( context ); + sample_map_iterator sample_current = samples.begin(); + sample_map_iterator sample_end = samples.end(); + for ( ; sample_current != sample_end; ++sample_current ) { + SGSoundSample *sample = sample_current->second; + sample->pause( true ); + } if ( alGetError() != AL_NO_ERROR) { SG_LOG( SG_GENERAL, SG_ALERT, "Oops AL error after soundmgr pause()!" ); @@ -201,7 +206,12 @@ SGSoundMgr::resume () { if (context) { - alcProcessContext( context ); + sample_map_iterator sample_current = samples.begin(); + sample_map_iterator sample_end = samples.end(); + for ( ; sample_current != sample_end; ++sample_current ) { + SGSoundSample *sample = sample_current->second; + sample->pause( false ); + } if ( alGetError() != AL_NO_ERROR) { SG_LOG( SG_GENERAL, SG_ALERT, "Oops AL error after soundmgr resume()!" );
------------------------------------------------------------------------------ Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT is a gathering of tech-side developers & brand creativity professionals. Meet the minds behind Google Creative Lab, Visual Complexity, Processing, & iPhoneDevCamp as they present alongside digital heavyweights like Barbarian Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com
_______________________________________________ Flightgear-devel mailing list Flightgear-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/flightgear-devel