语音转文字
本文主要描述了如何使用 IMLib SDK 将语音消息的音频转成文本。
提示
此功能从 5.22.0 版本开始支持。
语音转文字简介
语音转文字的消息包括 RCVoiceMessage 和 RCHQVoiceMessage,客户端 SDK 发起语音转文字请求后,会通过事件代理回调转换结果。以下是时序图:
IMLib SDK 的 RCVoiceMessage 和 RCHQVoiceMessage 对象中,增加了语音转文字 RCSpeechToTextInfo 属性。下表是语音消息和语音转文字信息的属性,完整的属性列表可参考 API 文档。
RCVoiceMessage 中新增属性如下:
属性名 | 类型 | 描述 |
---|---|---|
sttInfo | RCSpeechToTextInfo | 语音转文本信息。 |
RCHQVoiceMessage 中新增属性如下:
属性名 | 类型 | 描述 |
---|---|---|
sttInfo | RCSpeechToTextInfo | 语音转文本信息。 |
numberOfChannels | NSUInteger | 声道数量 [仅单声道支持 STT 功能]。 |
sampleRate | NSUInteger | 采样率 [仅 8000, 16000 支持 STT 功能]。 |
format | NSString | 编码格式。 |
RCSpeechToTextInfo 对象属性如下:
属性名 | 类型 | 描述 |
---|---|---|
status | RCSpeechToTextStatus | 转换状态。 |
text | NSString | 转换的文本内容。 |
isVisible | BOOL | 是否可见,默认 NO。 |
提示
- 通过
messageWithPath:duration:
接口初始化 RCHQVoiceMessage 时,SDK 会自动识别音频文件信息。 - 高清语音消息的音频文件需要满足这些要求:声道数量为单声道,采样率是 8000 或 16000。
- 普通语音消息的 content 必须是 base64 的字符串。
语音转文字
SDK 发起语音转文字请求后,结果是通过代理回调的方式通知给应用。
添加语音转文字结果代理
应用可以通过 addSpeechToTextDelegate:
方法设置语音转文字回调代理。
示例代码
Objective C
[[RCCoreClient sharedCoreClient] addSpeechToTextDelegate:self];
实现语音转文字代理方法
语音转文字结束后,应用程序会收到 speechToTextDidComplete:messageUId:code:
代理。
参数说明
参数 | 类型 | 说明 |
---|---|---|
info | RCSpeechToTextInfo | 语音转文字信息。 |
messageUId | NSString | 消息唯一 ID。 |
code | RCErrorCode | 错误码。 |
示例代码
Objective C
- (void)speechToTextDidComplete:(RCSpeechToTextInfo *)info
messageUId:(nonnull NSString *)messageUId
code:(RCErrorCode)code {
// TODO 业务逻辑。
}
发起语音转换文本请求
您可以调用 requestSpeechToTextForMessage:completionHandler:
方法,发起语音转文字请求。
参数说明
参数 | 类型 | 说明 |
---|---|---|
messageUId | NSString | 消息唯一 ID。 |
completionHandler | Block | 结果回调。 |
示例代码
Objective C
[[RCCoreClient sharedCoreClient] requestSpeechToTextForMessage:@"messageUId" completionHandler:^(RCErrorCode code) {
// TODO 业务逻辑。
}];
设置语音转换文本功能的可见性
您通过 setMessageSpeechToTextVisible:isVisible:completionHandler:
控制语音转文本的可见性。
参数说明
参数 | 类型 | 说明 |
---|---|---|
messageId | NSInteger | 消息本地 ID。 |
isVisible | BOOL | 是否可见。 |
completionHandler | Block | 结果回调。 |
示例代码
Objective C
[[RCCoreClient sharedCoreClient] setMessageSpeechToTextVisible:messageId
isVisible:YES
completionHandler:^(RCErrorCode code) {
// TODO 业务逻辑。
}];