void SimpleAudioEngine::preloadEffect(const char* pszFilePath) { int nRet = 0; CCAudioOut* pEffectPlayer = NULL; do { BREAK_IF(! pszFilePath); string strFilePath = fullPathFromRelativePath(pszFilePath); nRet = _Hash(strFilePath.c_str()); BREAK_IF(s_List.end() != s_List.find(nRet)); //AppLog("not find effect, create it..."); if (s_List.size() >= 64) { // get the first effect, and remove it form list //AppLog("effect preload more than 64, delete the first effect"); pEffectPlayer = s_List.begin()->second; pEffectPlayer->Finalize(); s_List.erase(s_List.begin()->first); } if (pEffectPlayer == NULL) pEffectPlayer = new CCAudioOut; pEffectPlayer->Initialize(strFilePath.c_str()); s_List.insert(Effect(nRet, pEffectPlayer)); } while (0); }
void QBSoundMac::unloadEffect(const char* filename) { QBSoundLocker locker(&mMutex,"unloadEffect"); if (filename) { unsigned int nRet = _Hash(filename); EffectList::iterator p = effectTrack.find(nRet); if (p != effectTrack.end()) { delete p->second; p->second = NULL; effectTrack.erase(nRet); } } }
void QBSoundMac::preloadEffect(const char* filename) { QBSoundLocker locker(&mMutex,"preloadEffect"); do { if (filename==NULL) break; unsigned int nRet = _Hash(filename); if (effectTrack.end() != effectTrack.find(nRet)) break; effectTrack.insert(make_pair(nRet,new EffectBuffer())); EffectBuffer* buffer = effectTrack[nRet]; if (buffer->load(filename)!=0) { effectTrack.erase(nRet); } } while (0); }
void SimpleAudioEngine::preloadEffect(const char* pszFilePath) { int nRet = 0; do { BREAK_IF(! pszFilePath); nRet = _Hash(pszFilePath); BREAK_IF(s_List.end() != s_List.find(nRet)); s_List.insert(Effect(nRet, MciPlayer())); MciPlayer& player = s_List[nRet]; player.Open(_FullPath(pszFilePath), nRet); BREAK_IF(nRet == player.GetSoundID()); s_List.erase(nRet); nRet = 0; } while (0); }
unsigned int QBSoundMac::playEffect(const char* filename,bool bLoop,float pitch, float pan, float gain) { QBSoundLocker locker(&mMutex,"playEffect"); if (filename) { unsigned int nRet = _Hash(filename); do { if (filename==NULL) break; unsigned int nRet = _Hash(filename); if (effectTrack.end() != effectTrack.find(nRet)) break; effectTrack.insert(make_pair(nRet,new EffectBuffer())); EffectBuffer* buffer = effectTrack[nRet]; if (buffer->load(filename)!=0) { effectTrack.erase(nRet); } } while (0); EffectList::iterator p = effectTrack.find(nRet); if (p != effectTrack.end()) { EffectBuffer* effect = p->second; findPlayer(soundID)->setVolume(gain); findPlayer(soundID)->play((unsigned char*)effect->pcmbuffer,effect->pcmsize); soundID ++; if (soundID > 9999) soundID = 1; } return soundID; } return 0; }
void SimpleAudioEngine::unloadEffect(const char* pszFilePath) { unsigned int nID = _Hash(pszFilePath); s_List.erase(nID); }
void SimpleAudioEngine::unloadEffect(int nSoundId) { s_List.erase(nSoundId); }