#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"); }