日期 | 版本号 | 修改说明 | 作者 |
---|---|---|---|
2017/10/11 | V1.0.0 | 文档创建 | 尹鑫 |
2017/12/18 | V1.0.1 | 1、新增屏蔽敏感词汇 2、新增语音时长 3、OPVoicePlayResult 接口变化 | 尹鑫 |
2019/3/14 | V1.0.7 | 1、讯飞SDK更新(Version 1.0.1216.1174) | 尹鑫 |
掌趣iOS语音SDK,实现语音识别功能。
基本流程:
接入前,需要由掌趣项目负责人完成渠道申报并在掌趣后台进行配置,从而获取到该游戏的渠道参数、掌趣配置文件ourpalm.cfg。
AppId是第三方应用集成讯飞开放平台SDK的身份标识,SDK静态库和appid是绑定的,每款应用必须保持唯一,否则会出现10407错误码。
Xcode->Project->Build Settings工程配置
[1] 添加库的连接参数
请在工程文件Build Settings处,找到Other Linker Flags,并添加以下内容
[2] 请将Apple LLVM 5.0 – Language – C++中C++ Standard Library项修改为以下内容
注意:
(1)Compiler Default的默认值在xcode5中为libstdc++,但在xcode6中的默认值为libc++。
(2)如果游戏需要支持C++11的新特性,C++ Standard Library需要设置为libc++,如下图,并且需要使用llvm文件中的静态库
[3] 其他编译设置
Contacts.framework
ContactsUI.framework
libc++.tbd
AddressBook.framework
AddressBookUI.framework
AVFoundation.framework
AudioToolbox.framework
CoreMotion.framework
Accelerate.framework
ImageIO.framework
WebKit.framework
CFNetwork.framework
libresolv.tbd
JavaScriptCore.framework
Security.framework
CoreTelephony.framework
libsqlite3.dylib
CoreGraphics.framework
AdSupport.framework
UIKit.framework
Foundation.framework
在Info.plist文件中添加OPVoice_XF_APPID
注意:参数AppId必须与静态库iflyMSC.framework一一对应,否则会出现10407错误码。
<key>OPVoice_XF_APPID</key>
<string>5a30c954</string>
<key>NSMicrophoneUsageDescription</key>
<string>要您的同意,才能访问麦克风</string>
功能说明
初始化语音SDK
接口定义
void Init();
接口示例
OPVoiceSDK::GetInstance().Init();
功能说明
当游戏角色登录成功后,设置游戏角色信息
接口定义
void SetGameLoginInfo(OPGameInfo opGameInfo);
OPGameInfo参数说明
参数名称 | 重要性 | 类型 | 说明 | |
---|---|---|---|---|
mGame_RoleName | 必须 | std::string | 游戏角色名称(不支持富文本) | |
mGame_RoleId | 必须 | std::string | 游戏角色 id | |
mGame_ServerId | 必须 | std::string | 游戏服务器id | |
mGame_ServerName | 必须 | std::string | 游戏服务器名称 | |
mGame_RoleLevel | 非必须 | std::string | 游戏角色等级 | |
mGame_RoleVipLevel | 非必须 | std::string | 游戏角色vip等级 |
接口示例
OPGameInfo gameInfo;
gameInfo.mGame_RoleId = "001";//游戏角色id(必填)
gameInfo.mGame_RoleName = “abc”;//游戏角色名称(必填)
gameInfo.mGame_ServerId = "1";//游戏服务器id(必填)
gameInfo.mGame_ServerName = "test";//游戏服务器名称(必填)
gameInfo.mGame_RoleLevel = "1";//游戏角色等级(可选)
gameInfo.mGame_RoleVipLevel = "1";//游戏角色vip等级(可选)
OPVoiceSDK::GetInstance().SetGameLoginInfo(gameInfo);
功能说明
开始录制语音并进行语音识别
接口定义
//MsgId为游戏聊天记录的唯一标示,当语音录制成功后,会返回该MsgId录制结果
void StartRecord(const char* MsgId);
接口示例
OPVoiceSDK::GetInstance().StartRecord(“123456789”);
功能说明
停止录制语音以及语音识别
接口定义
void StopRecord();
接口示例
OPVoiceSDK::GetInstance().StopRecord();
功能说明
播放语音,如果本地没有语音文件会自动下载语音并进行播放
接口定义
//voiceId为SDK返回的语音唯一标识
void PlayVoice(const char* voiceId);
接口示例
OPVoiceSDK::GetInstance().PlayVoice("SDK返回的语音唯一标识");
功能说明
停止播放语音
接口定义
void StopVoice();
接口示例
OPVoiceSDK::GetInstance().StopVoice();
功能说明
通过设置语音回调接口,游戏可以获取语音录制结果以及语音播放结果
接口定义
class OPVoiceListener
{
public:
//语音录制回调
virtual void OPVoiceRecordResult(OPRecordState state,const char* data){};
//语音播放回调
virtual void OPVoicePlayResult(OPPlayState state,const char* voiceId){};
};
void SetVoiceListener(OPVoiceListener *listener);
接口示例
class OPSDK : public OPVoiceListener
{
public:
//语音录制回调
void OPVoiceRecordResult(OPRecordState state,const char* data);
//语音播放回调
void OPVoicePlayResult(OPPlayState state,const char* voiceId,const char* data);
}
//设置语音回调
OPVoiceSDK::GetInstance().SetVoiceListener(this);
//语音录制回调
void OPSDK::OPVoiceRecordResult(OPRecordState state,const char* data)
{
//说明:data为json数据格式
//例如:
//{
// "localVoiceId":"游戏聊天记录的唯一标识",
// "voiceId":"掌趣SDK返回的语音唯一标识,与localVoiceId一一对应",
// "voiceToWord":"语音识别结果",
// "isShielded":"是否有敏感词汇"
// "shieldedStr":"屏蔽后的语音识别结果"
// "timeLength":语音时长(毫秒)
//}
if (state == OPRecord_Success) {
cout<<"语音录制成功并上传成功"<<endl;
}else if(state == OPRecord_UploadFail){
cout<<"语音录制成功但上传失败,可通过ReUploadVoice()重新上传语音"<<endl;
}else{
cout<<"语音录制失败"<<endl;
}
}
//语音播放回调
void OPSDK::OPVoicePlayResult(OPPlayState state,const char* voiceId,const char* data)
{
if (state == OPPlay_Downloading) {
cout<<"语音文件不存在,正在下载语音文件"<<endl;
}else if(state == OPPlay_Downloaded){
cout<<"语音文件下载成功"<<endl;
}else if(state == OPPlay_Success){
cout<<"语音播放成功"<<endl;
}else{
cout<<"语音播放失败"<<endl;
}
}
功能说明
当语音录制录制成功,但上传失败时,即 语音录制回调state = OPRecord_UploadFail,游戏可以通过调用ReUploadVoice()接口重新上传语音
接口定义
//MsgId为游戏聊天记录唯一标示
void ReUploadVoice(const char* MsgId);
接口示例
OPVoiceSDK::GetInstance().ReUploadVoice();