X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fsound%2Fsample_group.hxx;h=f87cb1dc10d6ee0a64084a668fd5244f0e164c9b;hb=105438fc581a9b1d65a9309f6e845f9558f3a505;hp=ccf1e85db1f4ede870f4d48ef6b553f63cd9b9c9;hpb=44f27b23d0209d2ee9f508c43def5636564bb302;p=simgear.git diff --git a/simgear/sound/sample_group.hxx b/simgear/sound/sample_group.hxx index ccf1e85d..f87cb1dc 100644 --- a/simgear/sound/sample_group.hxx +++ b/simgear/sound/sample_group.hxx @@ -1,45 +1,30 @@ -// sample_group.hxx -- Manage a group of samples relative to a base position +///@file +/// Manage a group of samples relative to a base position +/// +/// Sample groups contain all sounds related to one specific object and +/// have to be added to the sound manager, otherwise they won't get processed. // // Written for the new SoundSystem by Erik Hofman, October 2009 // // Copyright (C) 2009 Erik Hofman // -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License as -// published by the Free Software Foundation; either version 2 of the -// License, or (at your option) any later version. +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. // -// This program is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. +// Library General Public License for more details. // -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software Foundation, -// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// -// $Id$ - -/** - * \file sample_group.hxx - * sample groups contain all sounds related to one specific object and - * have to be added to the sound manager, otherwise they won't get processed. - */ +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. #ifndef _SG_SAMPLE_GROUP_OPENAL_HXX #define _SG_SAMPLE_GROUP_OPENAL_HXX 1 -#ifndef __cplusplus -# error This library requires C++ -#endif - -#if defined(__APPLE__) -# include -#elif defined(OPENALSDK) -# include -#else -# include -#endif #include #include @@ -54,10 +39,8 @@ #include "sample_openal.hxx" #include "sample_queue.hxx" -using std::map; -using std::string; -typedef map < string, SGSharedPtr > sample_map; +typedef std::map < std::string, SGSharedPtr > sample_map; typedef sample_map::iterator sample_map_iterator; typedef sample_map::const_iterator const_sample_map_iterator; @@ -80,7 +63,7 @@ public: * @param smgr Pointer to a pre-initialized sound manager class * @param refname Name of this group for reference purposes. */ - SGSampleGroup ( SGSoundMgr *smgr, const string &refname ); + SGSampleGroup ( SGSoundMgr *smgr, const std::string &refname ); /** * Destructor @@ -106,28 +89,28 @@ public: * @param refname Name of this audio sample for reference purposes * @return return true if successful */ - bool add( SGSharedPtr sound, const string& refname ); + bool add( SGSharedPtr sound, const std::string& refname ); /** * Remove an audio sample from this group. * @param refname Reference name of the audio sample to remove * @return return true if successful */ - bool remove( const string& refname ); + bool remove( const std::string& refname ); /** * Test if a specified audio sample is registered at this sample group * @param refname Reference name of the audio sample to test for * @return true if the specified audio sample exists */ - bool exists( const string& refname ); + bool exists( const std::string& refname ); /** * Find a specified audio sample in this sample group * @param refname Reference name of the audio sample to find * @return A pointer to the SGSoundSample */ - SGSoundSample *find( const string& refname ); + SGSoundSample *find( const std::string& refname ); /** * Stop all playing samples and set the source id to invalid. @@ -145,28 +128,28 @@ public: void resume(); /** - * Request to start playing the refered audio sample. + * Request to start playing the referred audio sample. * @param refname Reference name of the audio sample to start playing * @param looping Define if the sound should loop continuously * @return true if the audio sample exsists and is scheduled for playing */ - bool play( const string& refname, bool looping ); + bool play( const std::string& refname, bool looping = false ); /** - * Request to start playing the refered audio sample looping. + * Request to start playing the referred audio sample looping. * @param refname Reference name of the audio sample to start playing * @return true if the audio sample exsists and is scheduled for playing */ - inline bool play_looped( const string& refname ) { + inline bool play_looped( const std::string& refname ) { return play( refname, true ); } /** - * Request to start playing the refered audio sample once. + * Request to start playing the referred audio sample once. * @param refname Reference name of the audio sample to start playing - * @return true if the audio sample exsists and is scheduled for playing + * @return true if the audio sample exists and is scheduled for playing */ - inline bool play_once( const string& refname ) { + inline bool play_once( const std::string& refname ) { return play( refname, false ); } @@ -175,14 +158,14 @@ public: * @param refname Reference name of the audio sample to test for * @return True of the specified sound is currently playing */ - bool is_playing( const string& refname ); + bool is_playing( const std::string& refname ); /** - * Request to stop playing the refered audio sample. + * Request to stop playing the referred audio sample. * @param refname Reference name of the audio sample to stop - * @return true if the audio sample exsists and is scheduled to stop + * @return true if the audio sample exists and is scheduled to stop */ - bool stop( const string& refname ); + bool stop( const std::string& refname ); /** * Set the master volume for this sample group. @@ -223,10 +206,14 @@ public: protected: SGSoundMgr *_smgr; - string _refname; + std::string _refname; bool _active; private: + void cleanup_removed_samples(); + void start_playing_sample(SGSoundSample *sample); + void check_playing_sample(SGSoundSample *sample); + bool _changed; bool _pause; float _volume; @@ -239,8 +226,8 @@ private: sample_map _samples; std::vector< SGSharedPtr > _removed_samples; - bool testForALError(string s); - bool testForError(void *p, string s); + bool testForALError(std::string s); + bool testForError(void *p, std::string s); void update_pos_and_orientation(); void update_sample_config( SGSoundSample *sound );