1 /*************************************************************************** 2 audiomanager.h - description 3 ------------------- 4 begin : december 26th, 2003 5 copyright : (C) 2003-2008 by Duong Khang NGUYEN 6 email : neoneurone @ gmail com 7 8 $Id: audiomanager.h 375 2008-10-28 14:47:15Z neoneurone $ 9 ***************************************************************************/ 10 11 /*************************************************************************** 12 * * 13 * This program is free software; you can redistribute it and/or modify * 14 * it under the terms of the GNU General Public License as published by * 15 * the Free Software Foundation; either version 2 of the License, or * 16 * any later version. * 17 * * 18 ***************************************************************************/ 19 20 // IF we have not included this file already THEN 21 #ifndef _OPENCITY_AUDIOMANAGER_H_ 22 #define _OPENCITY_AUDIOMANAGER_H_ 1 23 24 #include "main.h" 25 26 #define OC_AUDIO_FREQUENCY 44100 // CD quality 27 #define OC_AUDIO_FORMAT AUDIO_S16SYS // host system signed byte order 28 #define OC_AUDIO_CHANNELS 2 // 2 channels for stereo 29 #define OC_AUDIO_CHUNK_SIZE 4096 // mixer's sample chunk size 30 31 #define OC_AUDIO_MIX_CHANNELS 8 // total number of mix channels 32 #define OC_AUDIO_RESERVED_CHANNELS 4 // reserved channels for sound effects 33 34 #define OC_AUDIO_VOLUME_MIN 0 35 #define OC_AUDIO_VOLUME_MAX MIX_MAX_VOLUME 36 37 #define OC_MAX_FILENAME_LENGTH 255 38 39 40 //======================================================================== 41 /** This is a void audio manager. It is used whenever the SDL_mixer library 42 is not present 43 */ 44 class AudioManager { 45 public: 46 /// This is for LR panning effects 47 enum AUDIO_CHANNEL { 48 AUDIO_CENTER_CHANNEL = -1, 49 AUDIO_LEFT_CHANNEL = 0, 50 AUDIO_LEFT_HALF_CHANNEL = 1, 51 AUDIO_RIGHT_CHANNEL = 3, 52 AUDIO_RIGHT_HALF_CHANNEL = 2 53 }; 54 55 AudioManager(); 56 ~AudioManager(); 57 58 59 //======================================================================== 60 /** WARNING: this method must be called before any use of AudioManager 61 */ 62 OPENCITY_ERR_CODE OpenAudio(void); 63 OPENCITY_ERR_CODE CloseAudio(void); 64 65 //======================================================================== 66 /** Set the internal filename to the given M3U music list 67 */ 68 OPENCITY_ERR_CODE 69 LoadMusicList( 70 const string& csrFilename, 71 const string& csrPrefix = "" ); 72 73 const uint & 74 GetNumberMusic(void) const; 75 76 bool 77 PlayingMusic(void) const; 78 79 OPENCITY_ERR_CODE 80 PlayMusic( 81 const uint & rcuiMusicIndex, 82 const int & rciLoops = 1 ); 83 84 OPENCITY_ERR_CODE 85 PlayNextMusic( 86 const int & rciLoops = 1 ); 87 88 OPENCITY_ERR_CODE 89 PlayPreviousMusic( 90 const int & rciLoops = 1 ); 91 92 void 93 StopMusic(void) const; 94 95 void 96 ToggleRandomMusic(void); 97 98 void 99 ToggleMusic(void); 100 101 void 102 VolumeMusic( const int & rciVol ) const; 103 104 105 //======================================================================== 106 /** Set the internal filename to the given M3U sound list. 107 In constrast of LoadMusicList(), it loads all the sounds specified 108 by the music list into memory for better performance. 109 */ 110 OPENCITY_ERR_CODE 111 LoadSoundList( 112 const string & csrFilename, 113 const string& csrPrefix = "" ); 114 115 const uint & 116 GetNumberSound(void) const; 117 118 OPENCITY_ERR_CODE 119 PlaySound( 120 const uint & rcuiSoundIndex, 121 const AUDIO_CHANNEL & enumChannel = AUDIO_CENTER_CHANNEL ); 122 123 void 124 ToggleSound(void); 125 126 void 127 VolumeSound( const int & rciVol ) const; 128 129 130 131 private: 132 bool boolAudioDeviceInitialized; 133 bool boolMusicEnabled; 134 bool boolSoundEnabled; 135 uint uiNumberSound; 136 uint uiNumberMusic; 137 uint uiCurrentMusic; 138 }; 139 140 #endif // _OPENCITY_AUDIOMANAGER_H_ 141 142