/** @file JCAudioManager.h @brief @author James @version 1.0 @date 2014_11_26 */ #ifndef __JCAudioManager_H__ #define __JCAudioManager_H__ //包含头文件 #ifdef ANDROID #include "android/JCAudioMp3Media.h" #elif WIN32 #include "windows/JCAudioMp3Player.h" #elif __APPLE__ #include "ios/JCAudioMp3Player.h" #endif #include "resource/Audio/JCAudioWavPlayer.h" #include #include #include "resource/Audio/JCWaveInfo.h" #include "buffer/JCBuffer.h" #include "resource/Audio/JCMp3Interface.h" #include namespace laya { /** * @brief */ class JCAudioManager { public: /** @brief构造函数 */ JCAudioManager( JCFileResManager* pFileResManger ); /** @brief析构函数 */ ~JCAudioManager( void ); /* * getInstace() */ static JCAudioManager* GetInstance( void ); static void ClearAllWork(); static void DelInstance( void ); public: //以下是mp3的接口 void createMp3player(); //设置全局的静音 void setMp3Mute( bool p_bMute ); //获得全局的静音 bool getMp3Mute( void ); //获得MP3是不是停止播放了 bool getMp3Stopped(); //全局音量 void setMp3Volume( float p_nVolume ); //获得音量 float getMp3Volume( void ); void playMp3( const char* p_sUrl,int p_nTimes,int nCurrentTime,JCAudioInterface* p_pJSAudio ); void delMp3Obj(JCAudioInterface* p_pJSAudio); //如果js对象删除了,就要调用这个 void pauseMp3(); void stopMp3(); void resumeMp3(); void setCurrentTime(double nCurrentTime); double getCurrentTime(); double getDuration(); public: /** @brief 清空所有 */ bool ClearAllAudioBufferPlay( void ); /** @brief 播放声音 * @param[in] 声音interface */ OpenALSourceInfo* playWav(JCAudioInterface* p_pAudio, const std::string& p_sUrl,bool bIsOgg); /** @brief 删除wav * @param[in] 声音的interface */ void delWav(JCAudioInterface* p_pAudio); void stopWav(OpenALSourceInfo* pOpenALInfo ); void stopAllWav(); void setWavVolume(OpenALSourceInfo* pOpenALInfo,float nVolume ); void setAllWavVolume( float nVolume ); /** @brief 添加资源 * @return */ JCWaveInfo* AddWaveInfo( const std::string& p_sUrl,unsigned char* p_pBuffer,int p_nSize,const char* p_sFilePath,void* p_pExternalMark,bool p_bIsOgg ); JCWaveInfo* AddWaveInfo( const std::string& p_sUrl,JCBuffer& p_pBuffer,int p_nSize,void* p_pExternalMark,bool p_bIsOgg ); JCWaveInfo* FindWaveInfo( const std::string& p_sUrl ); void update(); public: JCMp3Interface* m_pMp3Player; JCAudioWavPlayer* m_pWavPlayer; //播放wav protected: bool m_bMuteMp3; //MP3是否静音 float m_nVolumeMp3; //MP3的音量 bool m_bStopMp3; //是否停止了mp3的播放 protected: static JCAudioManager* m_sAudioManager; //静态的this指针 static std::mutex m_mutex; }; } #endif //__JCAudioManager_H__ //-----------------------------END FILE--------------------------------