00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "ExManagerSound.h"
00025
00026 bool ExManagerSound::m_flag = false;
00027 ExManagerSound* ExManagerSound::m_instance = NULL;
00028
00029 ExManagerSound* ExManagerSound::CreateSingleton(void){
00030 Guard(ExManagerSound* ExManagerSound::CreateSingleton(void))
00031 if(!m_flag)
00032 {
00033 m_flag = true;
00034 m_instance = new ExManagerSound;
00035 }else
00036 {
00037 std::cout<<"Error singleton already created"<<std::endl;
00038 }
00039 return m_instance;
00040 UnGuard
00041 }
00042
00043 ExManagerSound::ExManagerSound (void)
00044 {
00045 buffer_index = 0;
00046 source_index = 0;
00047 source_available = 0;
00048 m_initok=false;
00049 }
00050
00051 ExManagerSound::~ExManagerSound (void)
00052 {
00053 alcDestroyContext (context);
00054 }
00055
00056 void ExManagerSound::Init (void)
00057 {
00058 Guard (void ExManagerSound::init (void))
00059 ExManagerObject<ExCSound>::Init();
00060 device = alcOpenDevice(NULL);
00061 if(device == NULL)
00062 {
00063 *Consol <<"ExManagerSound:: alcOpenDevice error "<<std::endl;
00064 return ;
00065 }
00066 context=alcCreateContext(device,NULL);
00067 alcMakeContextCurrent(context);
00068
00069 alGenBuffers(MAX_BUFFER,buffer);
00070 if ((error = alGetError()) != AL_NO_ERROR)
00071 {
00072 *Consol<<"ExManagerSound:: alGenBuffers error:"<<error<<std::endl;
00073 return ;
00074 }
00075
00076 for(int i = 0; i < MAX_SOURCE ; i++)
00077 {
00078 alGenSources(1 , &source[i]);
00079 if ((error = alGetError()) != AL_NO_ERROR)
00080 {
00081 *Consol<<"ExManagerSound:: alGenSources error:"<<error<<std::endl;
00082 return ;
00083 }
00084 else source_available++;
00085 }
00086 m_initok=true;
00087
00088
00089 UnGuard
00090 }
00091
00092 void ExManagerSound::Reset (void)
00093 {
00094 Guard (void ExManagerSound::Reset (void))
00095 ExManagerObject<ExCSound>::Reset();
00096 UnGuard
00097 }
00098
00099 void ExManagerSound::DisplayAviableInput (void) {
00100 Guard (void ExManagerSound::DisplayAviableInput (void))
00101 if(!m_initok)return;
00102 *Consol<<"****************************************"<<std::endl;
00103 *Consol<<"* Soundsystem init success *"<<std::endl;
00104 *Consol<<"****************************************"<<std::endl;
00105 *Consol<<"Company : "<<alGetString (AL_VENDOR)<<std::endl;
00106 *Consol<<"Version : "<<alGetString (AL_VERSION)<<std::endl;
00107 *Consol<<"Renderer : "<<alGetString (AL_RENDERER)<<std::endl;
00108 *Consol<<"Extensions : "<<alGetString (AL_EXTENSIONS)<<std::endl;
00109 *Consol<<"****************************************"<<std::endl;
00110 UnGuard
00111 }
00112
00113 bool ExManagerSound::LoadSound (std::string file) {
00114 Guard (bool ExManagerSound::LoadSound(std::string file))
00115
00116
00117 ALsizei size,freq;
00118 ALenum format;
00119 ALvoid *data;
00120 bool found = false;
00121
00122 for(m_ItMap=m_Map->begin();m_ItMap!=m_Map->end();m_ItMap++)
00123 {
00124 if(m_ItMap->second.GetName()==file)
00125 {
00126 found = true;
00127 break;
00128 }
00129 }
00130 if(found)
00131 {
00132 *Consol << " ***************************************" << std::endl;
00133 *Consol << " ** File " << file.c_str() << " already load" << std::endl;
00134 return -1;
00135 }
00136
00137
00138
00139
00140
00141 alutLoadWAVFile((ALbyte*)file.c_str(),&format,&data,&size,&freq,&loop);
00142 *Consol << " ***************************************" << std::endl;
00143 *Consol << " ** Loading " << file.c_str() << std::endl;
00144 *Consol << " - Format " << format << std::endl;
00145 *Consol << " - Data " << data << std::endl;
00146 *Consol << " - Size " << size << std::endl;
00147 *Consol << " - Freq " << freq << std::endl;
00148 if(loop) *Consol << " - Loop ON";
00149 else *Consol << " - Loop OFF";
00150
00151 if ((error = alGetError()) != AL_NO_ERROR)
00152 {
00153 *Consol<<"ExManagerSound:: LoadWavFile error:"<<error<<std::endl;
00154 return -1;
00155 }
00156
00157 alBufferData(buffer[buffer_index],format,data,size,freq);
00158 if ((error = alGetError()) != AL_NO_ERROR)
00159 {
00160 *Consol<<"ExManagerSound:: alBufferData error:"<<error<<std::endl;
00161 return -1;
00162 }
00163 else
00164 {
00165 ExCSound Sound;
00166 Sound.SetName(file.c_str());
00167 Sound.SetIdent(buffer_index);
00168 Add(Sound);
00169 *Consol << " - ident " << buffer_index << std::endl;
00170 }
00171
00172
00173 alutUnloadWAV(format,data,size,freq);
00174 if ((error = alGetError()) != AL_NO_ERROR)
00175 {
00176 *Consol<<"ExManagerSound:: alutUnloadWAV error:"<<error<<std::endl;
00177 return -1;
00178 }
00179
00180
00181 alSourcei(source[source_index],AL_BUFFER,buffer[buffer_index]);
00182 if ((error = alGetError()) != AL_NO_ERROR)
00183 {
00184 *Consol<<"ExManagerSound:: alSourcei error:"<<error<<std::endl;
00185 return -1;
00186 }
00187
00188 source_index++;
00189 buffer_index++;
00190
00191 *Consol << " ----> " << file.c_str() << " load ok :-)" << std::endl;
00192
00193
00194
00195 return true;
00196
00197 UnGuard
00198 }
00199
00200 void ExManagerSound::PlaySound (std::string file) {
00201 Guard (void ExManagerSound::PlaySound (std::string file))
00202 for(m_ItMap=m_Map->begin();m_ItMap!=m_Map->end();m_ItMap++)
00203 {
00204 if(m_ItMap->second.GetName()==file)
00205 {
00206 alSourcePlay(source[m_ItMap->second.GetIdent()]);
00207 *Consol<<"Play sound :"<<file<<" ident:"<<m_ItMap->second.GetIdent()<<std::endl;
00208 if ((error = alGetError()) != AL_NO_ERROR)
00209 {
00210 *Consol<<"ExManagerSound:: alSourcePlay error:"<<error<<std::endl;
00211 }
00212 return;
00213 }
00214 }
00215 UnGuard
00216 }
00217
00218 void ExManagerSound::StopSound (std::string file) {
00219 Guard (void ExManagerSound::StopSound (std::string file))
00220 UnGuard
00221 }
00222
00223 int ExManagerSound::GetSound (std::string file) {
00224 Guard (ExCSound* ExManagerSound::GetSound (std::string file))
00225 return -1;
00226 UnGuard
00227 }
00228
00229 bool ExManagerSound::RemoveSound (std::string file) {
00230 Guard (bool ExManagerSound::RemoveSound (std::string file))
00231 return true;
00232 UnGuard
00233 }
00234
00235 ExCAction ExManagerSound::InputCommand(ExCCommand Command)
00236 {
00237 Guard(ExCAction ExManagerSound::InputCommand(ExCCommand Command))
00238 return NOTHING;
00239 UnGuard
00240 }
00241
00242 ExCAction ExManagerSound::InputAction(ExCAction Action)
00243 {
00244 Guard(ExCAction ExManagerSound::InputAction(ExCAction Action))
00245 switch(Action.m_Action)
00246 {
00247 case LIST_SOUND:List(); break;
00248 case REMOVE_SOUND:RemoveSound(Action.m_Param);break;
00249 case PLAY_SOUND:PlaySound(Action.m_Param);break;
00250 case STOP_SOUND:StopSound(Action.m_Param);break;
00251 case ADD_SOUND:LoadSound(Action.m_Param);break;
00252 case SET_REPEATS_SOUND:
00253 case GET_REPEATS_SOUND:
00254
00255 default:
00256 *Consol<<"Can not file action in SOUND_ACTION_MAP"<<std::endl;
00257 break;
00258 }
00259
00260 if(Action.m_NextAction){return *Action.m_NextAction;}
00261 else{return NOTHING;}
00262 UnGuard
00263 }
00264
00265
00266