Files
LayaNative2.0/Conch/source/conch/Audio/JCAudioManager.h
T
2020-11-11 16:17:13 +08:00

147 lines
3.3 KiB
C++

/**
@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 <map>
#include <vector>
#include "resource/Audio/JCWaveInfo.h"
#include "buffer/JCBuffer.h"
#include "resource/Audio/JCMp3Interface.h"
#include <mutex>
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--------------------------------