Files
LayaNative2.0/Conch/include/common/resource/Audio/JCAudioWavplayer-openharmony.h
T
2024-07-12 11:44:27 +08:00

80 lines
3.1 KiB
C++

#ifndef __JCAudioWavPlayer_OHOS_H__
#define __JCAudioWavPlayer_OHOS_H__
#include <stdio.h>
#include <thread>
#include "../../util/JCCommonMethod.h"
#include "JCWaveInfo.h"
#include "JCAudioInterface.h"
#include <unordered_map>
#include <vector>
#include <ohaudio/native_audiostreambuilder.h>
#include <ohaudio/native_audiorenderer.h>
namespace laya{
class JCFileResManager;
class OHAudioRenderInfo
{
public:
OH_AudioRenderer* _audioRender;
OH_AudioStreamBuilder* _builder;
JCAudioInterface* m_pAudio; //Audio 为了回调使用
bool m_bPlaying; //是否为播放状态
const char* pcmBuffer;
int32_t m_pBufferSize;
int32_t writeOffset = 0;
std::function<int32_t(OH_AudioRenderer* renderer, void* userData, void* buffer, int32_t bufferLen)> writeDataCallback;
public:
void operator=(const OHAudioRenderInfo &other){
m_bPlaying = other.m_bPlaying;
_audioRender = other._audioRender;
m_pAudio = other.m_pAudio;
}
};
class JCAudioWavPlayer{
public:
typedef std::unordered_map<std::string, JCWaveInfo*> MapWaveInfo;
typedef MapWaveInfo::iterator MapWaveInfoIter;
public:
JCAudioWavPlayer(JCFileResManager* pFileResManager);
~JCAudioWavPlayer();
void Release();
public:
OHAudioRenderInfo* playAudio(JCAudioInterface* p_pAudio, const std::string& p_sSrc, bool bIsOgg);
void delAudio(JCAudioInterface* p_pAudio);
OHAudioRenderInfo* playAudioFromBuffer(JCAudioInterface* p_pAudio, const char* p_pBuffer, unsigned int p_nBufferSize, int p_nRate, int p_nBitsPerSample, int nChannels);
void setVolume(OHAudioRenderInfo* pAudioRenderInfo, float p_nVolume);
void stop(OHAudioRenderInfo* pAudioRenderInfo);
void setAllVolume(float p_nVolume);
void stopAll();
void checkWavePlayEnd();
void pause();
void resume();
static int32_t AudioRendererOnWriteData(OH_AudioRenderer *renderer, void *userData, void *buffer, int32_t bufferLen);
public:
/**
* @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);
/**
* @brief 查找资源根据ulid
* @param[in] ulid
* @return
*/
JCWaveInfo* FindWaveInfo(const std::string& p_sUrl);
/**
* @brief 清空所有
*/
bool ClearAllWaveInfo(void);
void autoGarbageCollection();
public:
static int s_nGarbageCollectionTime;
MapWaveInfo m_vWaveInfos; //wave的信息
public:
JCFileResManager* m_pFileResManager;
OH_AudioRenderer *audioRenderer;
std::vector<OHAudioRenderInfo*> m_pAudioRenderSource; //播放声音用的
};
}
#endif //__JCAudioWavPlayer_H__