跳到主要内容

语音转文字场景实践

准备工作

在开始之前,请确保已创建应用并完成客户端 SDK 集成

提示

本文以集成 5.X IMKit SDK 为例,实现语音转文字功能。如您使用 IMLib SDK,需要主动获取 HQVoiceMessageFileUrl(远端地址),业务侧调用其他三方 SDK 将语音消息成功转文字后,调用 RongCoreClientsetMessageExtra 方法将转换后的信息,放到消息的附加信息中自行实现此功能。Web 端不支持使用此文档实现语音转文字能力。

语音转文字功能:IMKit SDK 录制语音文件(支持最长 60 秒的音频)。当您进入聊天界面后,可以手动长按消息列表中的语音消息气泡,在出现的菜单中,单击转文字后,业务侧调用其他三方 SDK 将语音消息成功转文字后,展示语音对应的文字信息。具体支持的语言以三方能力为准。

效果示例

操作步骤

1. 自定义长按消息菜单

在会话页面长按消息可打开弹窗,根据当前消息类型判断,如果是高清语音消息,增加"转文字"选项。在 onMessageItemLongClick 回调中做"转文字"的处理,您的业务侧调用其他第三方的 API,获取到转换后的信息设置到 Message 的 Extra 中。调用 refreshMessage 后,SDK 自动刷新消息展示信息。

Java
MessageItemLongClickAction speechToText =
new MessageItemLongClickAction.Builder()
.titleResId(R.string.speech_to_text)
.actionListener(
new MessageItemLongClickAction.MessageItemLongClickListener() {
@Override
public boolean onMessageItemLongClick(
Context context, UiMessage uiMessage) {
// 获取 message 实体
Message message = uiMessage.getMessage();
// 给当前 message 的 extra 赋值
message.setExtra("1231234");
// 将 message 的 extra 存到本地数据库中
RongCoreClient.getInstance().setMessageExtra(message.getMessageId(),"1231234",null);
// 刷新单条 Message 信息
IMCenter.getInstance().refreshMessage(message);
return true;
}
})
.showFilter(
new MessageItemLongClickAction.Filter() {
@Override
public boolean filter(UiMessage uiMessage) {
//判断是高清语音消息,显示转文字 Item
Message message = uiMessage.getMessage();
return (message.getContent() instanceof HQVoiceMessage);
}
})
.build();
MessageItemLongClickActionManager.getInstance()
.addMessageItemLongClickAction(speechToText);

2. 修改高清语音消息的展示样式

Android 端实现流程

  1. 将 SDK 默认的 HQVoiceMessageItemProvider 类,rc_item_hq_voice_message.xml 资源复制到您项目目录下重新命名。
  2. 调用 replaceMessageProvider 方法替换掉 SDK 默认的消息展示模板。替换后,SDK 在渲染消息时,会自动调用该类型消息的自定义模板进行渲染。
  3. 在自定义 rc_item_hq_voice_message.xml 中增加转换文字后的展示 View,自定义 HQVoiceMessageItemProvider 中增加判断,如果消息附加信息不为空,则展示转换后的文字。

代码类参考:

iOS 端实现流程

导入下面的类,在聊天页面注册绑定自定义的 Cell:

Objective C
- (void)registerCustomCellsAndMessages {
[super registerCustomCellsAndMessages];
///注册自定义语音转文字消息 Cell
[self registerClass:[CustomHQVoiceMessageCell class] forMessageClass:[RCHQVoiceMessage class]];
}

3. 修改语音消息采样率

因市场上大多厂商的转音转文字功能,支持的是 16K 的采样率,所以如需修改语音消息采样率,您需要集成 IMKit 源码,在下图位置增加采样率设置信息。

Android 端修改位置

Java
mMediaRecorder.setAudioSamplingRate(SamplingRate.RC_SAMPLE_RATE_16000.getValue());

iOS 端修改位置

Objective C
rcHQVoiceRecorderHandler.recordSettings = @{
AVFormatIDKey : @(kAudioFormatMPEG4AAC_HE),
AVNumberOfChannelsKey : @1,
AVEncoderBitRateKey : @(16000)
};