iOS语音SDK接入说明

修订记录

日期 版本号 修改说明 作者
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) 尹鑫

1 接入指南

掌趣iOS语音SDK,实现语音识别功能。
基本流程:

1.1 获取配置文件

接入前,需要由掌趣项目负责人完成渠道申报并在掌趣后台进行配置,从而获取到该游戏的渠道参数、掌趣配置文件ourpalm.cfg。

1.2 获取讯飞语音AppId

AppId是第三方应用集成讯飞开放平台SDK的身份标识,SDK静态库和appid是绑定的,每款应用必须保持唯一,否则会出现10407错误码。

1.3 获取掌趣语音SDK

2 搭建环境

2.1 工程配置

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] 其他编译设置

2.2 Framework添加及配置

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

2.3 添加讯飞语音AppId

在Info.plist文件中添加OPVoice_XF_APPID
注意:参数AppId必须与静态库iflyMSC.framework一一对应,否则会出现10407错误码。

  1. <key>OPVoice_XF_APPID</key>
  2. <string>5a30c954</string>

2.4 配置麦克风权限

  1. <key>NSMicrophoneUsageDescription</key>
  2. <string>要您的同意,才能访问麦克风</string>

3 语音集成

3.1 初始化

功能说明
初始化语音SDK

接口定义

  1. void Init();

接口示例

  1. OPVoiceSDK::GetInstance().Init();

3.2 设置角色信息

功能说明
当游戏角色登录成功后,设置游戏角色信息

接口定义

  1. 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等级

接口示例

  1. OPGameInfo gameInfo;
  2. gameInfo.mGame_RoleId = "001";//游戏角色id(必填)
  3. gameInfo.mGame_RoleName = abc”;//游戏角色名称(必填)
  4. gameInfo.mGame_ServerId = "1";//游戏服务器id(必填)
  5. gameInfo.mGame_ServerName = "test";//游戏服务器名称(必填)
  6. gameInfo.mGame_RoleLevel = "1";//游戏角色等级(可选)
  7. gameInfo.mGame_RoleVipLevel = "1";//游戏角色vip等级(可选)
  8. OPVoiceSDK::GetInstance().SetGameLoginInfo(gameInfo);

3.3 录制语音

功能说明
开始录制语音并进行语音识别

接口定义

  1. //MsgId为游戏聊天记录的唯一标示,当语音录制成功后,会返回该MsgId录制结果
  2. void StartRecord(const char* MsgId);

接口示例

  1. OPVoiceSDK::GetInstance().StartRecord(“123456789”);

3.4 停止录制语音

功能说明
停止录制语音以及语音识别

接口定义

  1. void StopRecord();

接口示例

  1. OPVoiceSDK::GetInstance().StopRecord();

3.5 播放语音

功能说明
播放语音,如果本地没有语音文件会自动下载语音并进行播放

接口定义

  1. //voiceId为SDK返回的语音唯一标识
  2. void PlayVoice(const char* voiceId);

接口示例

  1. OPVoiceSDK::GetInstance().PlayVoice("SDK返回的语音唯一标识");

3.6 停止播放语音

功能说明
停止播放语音

接口定义

  1. void StopVoice();

接口示例

  1. OPVoiceSDK::GetInstance().StopVoice();

3.7 设置语音回调

功能说明
通过设置语音回调接口,游戏可以获取语音录制结果以及语音播放结果

接口定义

  1. class OPVoiceListener
  2. {
  3. public:
  4. //语音录制回调
  5. virtual void OPVoiceRecordResult(OPRecordState state,const char* data){};
  6. //语音播放回调
  7. virtual void OPVoicePlayResult(OPPlayState state,const char* voiceId){};
  8. };
  9. void SetVoiceListener(OPVoiceListener *listener);

接口示例

  1. class OPSDK : public OPVoiceListener
  2. {
  3. public:
  4. //语音录制回调
  5. void OPVoiceRecordResult(OPRecordState state,const char* data);
  6. //语音播放回调
  7. void OPVoicePlayResult(OPPlayState state,const char* voiceId,const char* data);
  8. }
  9. //设置语音回调
  10. OPVoiceSDK::GetInstance().SetVoiceListener(this);
  11. //语音录制回调
  12. void OPSDK::OPVoiceRecordResult(OPRecordState state,const char* data)
  13. {
  14. //说明:data为json数据格式
  15. //例如:
  16. //{
  17. // "localVoiceId":"游戏聊天记录的唯一标识",
  18. // "voiceId":"掌趣SDK返回的语音唯一标识,与localVoiceId一一对应",
  19. // "voiceToWord":"语音识别结果",
  20. // "isShielded":"是否有敏感词汇"
  21. // "shieldedStr":"屏蔽后的语音识别结果"
  22. // "timeLength":语音时长(毫秒)
  23. //}
  24. if (state == OPRecord_Success) {
  25. cout<<"语音录制成功并上传成功"<<endl;
  26. }else if(state == OPRecord_UploadFail){
  27. cout<<"语音录制成功但上传失败,可通过ReUploadVoice()重新上传语音"<<endl;
  28. }else{
  29. cout<<"语音录制失败"<<endl;
  30. }
  31. }
  32. //语音播放回调
  33. void OPSDK::OPVoicePlayResult(OPPlayState state,const char* voiceId,const char* data)
  34. {
  35. if (state == OPPlay_Downloading) {
  36. cout<<"语音文件不存在,正在下载语音文件"<<endl;
  37. }else if(state == OPPlay_Downloaded){
  38. cout<<"语音文件下载成功"<<endl;
  39. }else if(state == OPPlay_Success){
  40. cout<<"语音播放成功"<<endl;
  41. }else{
  42. cout<<"语音播放失败"<<endl;
  43. }
  44. }

3.8 重新上传语音

功能说明
当语音录制录制成功,但上传失败时,即 语音录制回调state = OPRecord_UploadFail,游戏可以通过调用ReUploadVoice()接口重新上传语音

接口定义

  1. //MsgId为游戏聊天记录唯一标示
  2. void ReUploadVoice(const char* MsgId);

接口示例

  1. OPVoiceSDK::GetInstance().ReUploadVoice();