语音转文字场景实践
注意:请先确认您集成的 SDK 版本。
-
如果您集成的是 5.22.0 及以上版本: 融云 SDK 已内置语音转文字功能,无需额外集成第三方 SDK,仅需在融云控制台开通即可使用。请直接参考以下官方文档完成集成:
-
如果您集成的是 5.22.0 以下版本,或有自定义第三方语音转文字需求: 请继续阅读本文档,获取适用于旧版 本或自定义集成场景的详细实现方案。
准备工作
在开始之前,请确保已创建应用并完成客户端 SDK 集成。
提示
本文以集成 5.X IMKit SDK 为例,实现语音转文字功能。如您使用 IMLib SDK,需要主动获取 HQVoiceMessage
的 FileUrl
(远端地址),业务侧调用其他三方 SDK 将语音消息成功转文字后,调用 RongCoreClient
的 setMessageExtra
方法将转换后的信息,放到消息的附加信息中自行实现此功能。Web 端不支持使用此文档实现语音转文字能力。
语音转文字功能:IMKit SDK 录制语音文件(支持最长 60 秒的音频)。当您进入聊天界面后,可以手动长按消息列表中的语音消息气泡,在出现的菜单中,单击转文字后,业务侧调用其他三方 SDK 将语音消息成功转文字 后,展示语音对应的文字信息。具体支持的语言以三方能力为准。
效果示例


操作步骤
1. 自定义长按消息菜单
在会话页面长按消息可打开弹窗,根据当前消息类型判断,如果是高清语音消息,增加"转文字"选项。在 onMessageItemLongClick
回调中做"转文字"的处理,您的业务侧调用其他第三方的 API,获取到转换后的信息设置到 Message 的 Extra
中。调用 refreshMessage
后,SDK 自动刷新消息展示信息。
- Android
- iOS
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);
Objective C
// 1.重写长按事件,添加转文字按钮:
- (NSArray<UIMenuItem *> *)getLongTouchMessageCellMenuList:(RCMessageModel *)model {
NSMutableArray<UIMenuItem *> *menuList = [[super getLongTouchMessageCellMenuList:model] mutableCopy];
if ([model.content isKindOfClass:[RCHQVoiceMessage class]]) {
UIMenuItem *forwardItem = [[UIMenuItem alloc] initWithTitle:@"语音转文字"
action:@selector(audioToString)];
[menuList addObject:forwardItem];
}
return menuList.copy;
}
// 2. 实现点击方法做"