一、使用场景
关于变声玩法的效果请参见 实时语音趣味变声,大叔变声“妙音娘子”Get一下。
二、前提条件
·已开通实时语音服务:可参见 服务开通指引。
·已开通语音转文本服务:可参见 服务开通指引。
·已接入 GME SDK:包括核心接口和实时语音接口的接入,详情可参见 Native SDK 快速接入、Unity SDK 快速接入、Unreal SDK 快速接入。
·已接入 GME SDK 库文件libgmesoundtouch:需要保证工程库文件中带有 libgmesoundtouch,具体参见 库文件对应功能。
三、变声接口
在已经进房成功且打开麦克风的情况下,调用 SetVoiceType 接口设置变声特效,接口返回0代表调用成功,房间内的人听到的本端发出的声音带有变声效果。如果要自测变声效果,请使用耳返功能(接口:EnableLoopBack)。
四、函数原型
AndroidiOSUnityC++public abstract int SetVoiceType(int type);-(QAVResult)SetVoiceType:(ITMG_VOICE_TYPE) type public abstract int SetVoiceType(int voiceType);virtual int SetVoiceType(ITMG_VOICE_TYPE voiceType) = 0;
| 参数 | 类型 | 意义 |
| type | int | 表示本端音频变声类型 |
五、变声类型
| 类型参数 | 参数代表 | 意义 |
| ITMG_VOICE_TYPE_ORIGINAL_SOUND | 0 | 原声 |
| ITMG_VOICE_TYPE_LOLITA | 1 | 小女孩 |
| ITMG_VOICE_TYPE_UNCLE | 2 | 大叔 |
| ITMG_VOICE_TYPE_INTANGIBLE | 3 | 空灵 |
| ITMG_VOICE_TYPE_DEAD_FATBOY | 4 | 小胖子 |
| ITMG_VOICE_TYPE_HEAVY_MENTA | 5 | 重金属 |
| ITMG_VOICE_TYPE_DIALECT | 6 | 歪果仁 |
| ITMG_VOICE_TYPE_INFLUENZA | 7 | 感冒 |
| ITMG_VOICE_TYPE_CAGED_ANIMAL | 8 | 困兽 |
| ITMG_VOICE_TYPE_HEAVY_MACHINE | 9 | 重机器 |
| ITMG_VOICE_TYPE_STRONG_CURRENT | 10 | 强电流 |
| ITMG_VOICE_TYPE_KINDER_GARTEN | 11 | 幼稚园 |
| ITMG_VOICE_TYPE_HUANG | 12 | 小顽童 |
六、示例代码
int ret = m_pTmgContext->GetAudioEffectCtrl()->SetVoiceType((ITMG_VOICE_TYPE)m_ComBoxVoiceChangeType.GetCurSel()); if (ret != AV_OK) { char result[128] = { 0 }; snprintf(result, sizeof result, "SetVoiceType failed error code: %d", ret); m_EditMonitor.SetWindowText(MByteToWChar(std::string(result)).c_str()); }
七、语音消息变声流程
语音消息变声不会影响原始的音频信息,在播放的时候才体现变声效果。
八、语音消息播放
语音消息播放接口,带有变声效果参数。
AndroidiOSUnityC++public abstract int PlayRecordedFile(String filePath,int voicetype);-(int)PlayRecordedFile:(NSString*)filePath VoiceType:(ITMG_VOICE_TYPE) typeITMGPTT PlayRecordedFile(string filePath,int voiceType);public abstract int PlayRecordedFile(string filePath,int voiceType);
| 参数 | 类型 | 含义 |
| filePath | string | 本地语音文件的路径 |
| voicetype | int | 变声类型 |
九、错误码
| 错误码值 | 原因 | 建议方案 |
| 20485 | 播放未开始 | 确保文件存在,文件路径的合法性 |