豆包实时语音模型3.0-全双工端到端语音大模型(Seeduplex),主要实现语音对话交互功能,可提供更加拟人,更低时延的语音对话效果,以下为面向开发者的Android SDK接入说明。
接入端到端实时语音-全双工版本前,请您务必完成接入必读的阅读,了解全双工版本协议设计原则、相关注意事项、最佳实践等。 Android: com.bytedance.speechengine:speechengine_tob: 0.0.15.0
主要参考DialogDuplexActivity
Dialog 语音对话过程中,如果既启用录音机,又启用播放器,则设备会录入播放的人声而影响对话。故Dialog SDK 内置 AEC能力,对回声进行消除处理。(需要开启AEC功能,并配置AEC模型文件路径)
特别的,在自定义输入音频或自定义输出音频场景,如果能确保输入音频没有回声,可以选择关闭AEC。如果不能,则需要自行保证输出音频和输入回声所处的时间位置一致,以便AEC进行处理。
(当前硬件AEC为强制开启,故可能存在可能关闭Dialog SDK内置AEC之后,硬件AEC继续生效不会自打断。主要原因是为了设备当前有其它APP存在播放的声音时,该声音Dialog SDK内置AEC消除不掉,故强制开启硬件AEC 作为保底。)
AEC 模型如下:
语音对话 SDK 通过发送指令接口 sendDirective 触发各种操作,需要注意不建议在 SDK 的回调线程中调用该接口。
S2S-全双工版本采取通用的DIRECTIVE_SEND_UPLINK_EVENT指令,透传对应上行事件的的payload,上行事件说明&示例请参考:S2S-全双工版本API文档。 启动引擎后,SDK会不断回调消息。S2S-全双工版本采取通用的MESSAGE_TYPE_DIALOG_DOWNLINK_EVENT回调事件,透传对应下行事件的的payload,下行事件说明&示例请参考:S2S-全双工版本API文档。 当不再需要语音对话后,建议对引擎实例进行销毁,释放内存资源。
发送DIRECTIVE_PAUSE_RECORDER用于暂停麦克风录音,此时SDK会持续给服务端发送静音包以保活session(静音最长维持时间为10min)。注:S2S全双工版本静音音频仍会计费,调用该指令需注意该影响。
Dialog 可以选择不使用系统录音机,而通过feedAudio接口,传入原始音频数据作为用户的输入音频。注意:
- 输入音频仅支持 PCM 16bit位深音频格式,且采样率需要为16k,通道数为1即单通道。
- 如果采样率不为16k,或者通道数不为1,可以开启SDK 内部重采样,SDK会自动重采为16k、单通道音频。
Dialog 可以关闭设备播放器,业务方通过回调拿到原始音频数据,再视需要进行使用。
- 播放器数据回调:即使关闭播放器,也会跟随现实时间播放进度,每100ms现实时间就回调100ms的音频数据。
- 解码器数据回调:不跟随现实时间,只要收到Dialog服务的音频数据并解码后,就立刻回调接收到的所有音频数据。