Files
wnmj-normal/Classes/Voice/YvVoiceManager.cpp
2026-03-03 13:56:44 +08:00

168 lines
4.4 KiB
C++

#include "cocos2d.h"
#include "YVTool.h"
using namespace YVSDK;
#include "YvVoiceManager.hpp"
YvVoiceManager* YvVoiceManager::GetInstance()
{
static YvVoiceManager* pManager = NULL;
if (pManager == NULL)
{
pManager = new YvVoiceManager();
}
return pManager;
}
void YvVoiceManager::Init()
{
pYVTool = YVTool::getInstance();
pYVTool->initSDK(1003394, cocos2d::FileUtils::getInstance()->getWritablePath(), false);
//pYVTool->initSDK(1001325, cocos2d::FileUtils::getInstance()->getWritablePath(), false);
cocos2d::log("YvVoiceManager.Init");
pYVTool->addLoginListern(this);
pYVTool->addReConnectListern(this);
pYVTool->addCPUserInfoListern(this);
pYVTool->addDownLoadFileListern(this);
pYVTool->addUpLoadFileListern(this);
pYVTool->addFinishPlayListern(this);
pYVTool->addRecordVoiceListern(this);
pYVTool->addStopRecordListern(this);
pYVTool->addCPUserInfoListern(this);
//pYVTool->addDownloadVoiceListern(this);
this->isPlaying = false;
onPlayFinishFunc = nullptr;
}
void YvVoiceManager::Cleanup()
{
cocos2d::log("YvVoiceManager::Cleanup");
pYVTool->cpLogout();
pYVTool->releaseSDK();
delete pYVTool;
pYVTool = NULL;
}
void YvVoiceManager::CpLogin(std::string nickName, std::string uuid)
{
cocos2d::log("YvVoiceManager::CpLogin");
pYVTool->cpLogin(nickName, uuid);
}
void YvVoiceManager::onLoginListern(CPLoginResponce*)
{
cocos2d::log("YvVoiceManager::onLoginListern");
}
void YvVoiceManager::StartRecord()
{
cocos2d::log("YvVoiceManager::StartRecord");
std::string savePath = cocos2d::FileUtils::getInstance()->getWritablePath() + cocos2d::StringUtils::format("record_%ld.amr", time(nullptr));
pYVTool->startRecord(savePath);
this->isPlaying = false;
}
void YvVoiceManager::onRecordVoiceListern(RecordVoiceNotify* notify)
{
cocos2d::log("YvVoiceManager::onRecordVoiceListern");
}
void YvVoiceManager::StopRecord()
{
cocos2d::log("YvVoiceManager::StopRecord()");
pYVTool->stopRecord();
}
void YvVoiceManager::onStopRecordListern(RecordStopNotify* notify)
{
cocos2d::log("YvVoiceManager::onStopRecordListern");
std::string fileName = notify->strfilepath;
this->UploadFile(fileName);
}
void YvVoiceManager::PlayRecord(std::string url)
{
cocos2d::log("YvVoiceManager::PlayRecord");
pYVTool->playFromUrl(url);
isPlaying = true;
//此处会产生两处回调 onDownLoadFileListern onFinishPlayListern
}
void YvVoiceManager::onDownLoadFileListern(DownLoadFileRespond* resp)
{
cocos2d::log("YvVoiceManager::onDownLoadFileListern");
if(resp->result != 0)
{
cocos2d::log("YvVoiceManager::onDownLoadFileListern download audio file failed %s", resp->msg.c_str());
if (this->onPlayFinishFunc != NULL)
{
this->onPlayFinishFunc();
}
isPlaying = false;
}
else
{
isPlaying = true;
}
}
void YvVoiceManager::onFinishPlayListern(StartPlayVoiceRespond* resp)
{
cocos2d::log("YvVoiceManager::onFinishPlayListern");
this->isPlaying = false;
if (this->onPlayFinishFunc != NULL)
{
this->onPlayFinishFunc();
}
}
//云播放时下载进度事件
void YvVoiceManager::onDownloadVoiceListern(YVSDK::DownloadVoiceRespond* resp)
{
cocos2d::log("YvVoiceManager::onDownloadVoiceListern percent: %d", resp->percent);
}
void YvVoiceManager::UploadFile(std::string fileName)
{
cocos2d::log("YvVoiceManager::UploadFile");
pYVTool->upLoadFile(fileName, fileName);
}
void YvVoiceManager::onUpLoadFileListern(UpLoadFileRespond* resp)
{
cocos2d::log("YvVoiceManager::onUpLoadFileListern percent %u", resp->percent);
//发送到其他客户端, sendTalkFile
if(resp->result != 0)
{
cocos2d::log("YvVoiceManager::onUpLoadFileListern upload failed.result %d: %s ", resp->result, resp->msg.c_str() );
// 删除文件;
cocos2d::FileUtils::getInstance()->removeFile(resp->fileid);
return;
}
if (resp->percent==100 && this->uploadListen != NULL)
{
this->uploadListen->onUpLoadFileListern(resp);
// 删除文件;
cocos2d::FileUtils::getInstance()->removeFile(resp->fileid);
}
}
void YvVoiceManager::onFinishSpeechListern(SpeechStopRespond*)
{
cocos2d::log("YvVoiceManager::onFinishSpeechListern");
}
void YvVoiceManager::onCPUserInfoListern(GetCPUserInfoRespond*)
{
cocos2d::log("YvVoiceManager::onCPUserInfoListern");
}
void YvVoiceManager::onReConnectListern(ReconnectionNotify*)
{
cocos2d::log("YvVoiceManager::onReConnectListern");
}