Android&iOS&Windows&Mac

最近更新时间:2026-06-22 17:23:47

我的收藏

功能描述

语音转文字功能支持两种使用场景,一种场景是将发送出去的语音消息转文字,另一种场景是将本地录制的音频转文字。
说明:
语音转文字是增值付费功能,已结束内测。具体费用请参见文档: 增值服务计费说明。申请开通可参见 概述及开通指引
为了方便用户测试功能,该功能提供免费试用,详细参见 免费试用说明
语音消息转文字仅增强版 7.4 及以上版本支持。
录音转文字仅增强版 8.8 及以上版本支持。

效果展示

您可以使用本功能,实现如下图所示的转文字效果:
语音消息转文字
录音转文字





语音消息转文字

接口说明

您可以调用 convertVoiceToText (Java / Swift / Objective-C / C++) 接口将语音消息转换成文本。
接口参数说明如下:
入参
含义
说明
language
识别的目标语言
如果您的主流用户使用中、英文居多,language 参数可传空字符串,此时我们默认使用中英模型识别。
如果您想指定识别的目标语言,可以将其设置成指定值。目前支持的语言请参见 语言支持
callback
识别结果回调
其中的 result 为识别的文本。
注意:
识别的语音消息时长不可以超过 60s(60.00001s 也不行),否则会识别失败。
识别的语音消息音频需要设置为 16k 采样率,否则可能识别失败。
示例代码如下:
Java
Swift
Objective-C
C++
// 获取到语音消息的 V2TIMMessage 对象
V2TIMMessage msg = messageList.get(0);
if (msg.elemType == V2TIM_ELEM_TYPE_SOUND) {
// 从 V2TIMMessage 中获取到 soundElem
V2TIMSoundElem soundElem = msg.getSoundElem();
// 调用语音转文字,默认使用中英文识别模型
soundElem.convertVoiceToText("",new V2TIMValueCallback<String>() {
@Override
public void onError(int code, String desc) {
TUIChatUtils.callbackOnError(callBack, TAG, code, desc);
String str = "convertVoiceToText failed, code: " + code + " desc: " + desc;
ToastUtil.show(str,true, 1);
}
@Override
public void onSuccess(String result) {
// 识别成功,result 为识别结果
String str = "convertVoiceToText succeed, result: " + result;
ToastUtil.show(str, true, 1);
}
});
}
// 获取到语音消息的 V2TIMMessage 对象
let msg = messageList[0]

// 检查消息类型是否为语音
if msg.elemType == .V2TIM_ELEM_TYPE_SOUND {
// 从 V2TIMMessage 中获取到 soundElem
let soundElem = msg.soundElem
// 调用语音转文字,默认使用中英文识别模型
soundElem.convertVoiceToText("") { code, desc, result in
// 识别成功,result 为识别结果
print("convertVoiceToText, code: \\(code), desc: \\(desc ?? ""), result: \\(result ?? "")")
}
}
// 获取到语音消息的 V2TIMMessage 对象
V2TIMMessage *msg = messageList[0];
if (msg.elemType == V2TIM_ELEM_TYPE_SOUND) {
// 从 V2TIMMessage 中获取到 soundElem
V2TIMSoundElem *soundElem = msg.soundElem;
// 调用语音转文字,默认使用中英文识别模型
[soundElem convertVoiceToText:@"" completion:^(int code, NSString *desc, NSString *result) {
// 识别成功,result 为识别结果
NSLog(@"convertVoiceToText, code: %d, desc: %@, result: %@", code, desc, result);
}];
}
template <class T>
class ValueCallback final : public V2TIMValueCallback<T> {
public:
using SuccessCallback = std::function<void(const T&)>;
using ErrorCallback = std::function<void(int, const V2TIMString&)>;

ValueCallback() = default;
~ValueCallback() override = default;

void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback) {
success_callback_ = std::move(success_callback);
error_callback_ = std::move(error_callback);
}

void OnSuccess(const T& value) override {
if (success_callback_) {
success_callback_(value);
}
}
void OnError(int error_code, const V2TIMString& error_message) override {
if (error_callback_) {
error_callback_(error_code, error_message);
}
}

private:
SuccessCallback success_callback_;
ErrorCallback error_callback_;
};

auto callback = new ValueCallback<V2TIMString>{};
callback->SetCallback(
[=](const V2TIMString& result) {
// 语音转文字成功,result 为转换结果
delete callback;
},
[=](int error_code, const V2TIMString& error_message) {
// 语音转文字失败
delete callback;
});

// 获取到语音消息的 V2TIMMessage 对象
V2TIMMessage *msg = messageList[0];
// 从 V2TIMMessage 中获取到 soundElem
V2TIMElem *elem = message.elemList[0];
if (elem->elemType == V2TIM_ELEM_TYPE_SOUND) {
V2TIMSoundElem *sound_elem = (V2TIMSoundElem *)elem;
// 调用语音转文字,默认使用中英文识别模型
sound_elem->ConvertVoiceToText("", callback);
}

录音转文字

录音上传云端

您可以调用 callExperimentalAPI (Java / Swift / Objective-C / C++) 接口的 uploadFile 能力将录音上传云端并生成 url 下载地址。
接口参数说明如下:
入参
含义
说明
filePath
文件路径
录音文件本地存储路径。
fileType
文件类型
0: Unknown
1: Image
2: Video
3: Audio
4: log
示例代码如下:
Java
Swift
try {
JSONObject uploadParam = new JSONObject();
uploadParam.put("filePath", recordPath);
uploadParam.put("fileType", 3); // 0: Unknown, 1: Image, 2: Video, 3: Audio, 4: Log
V2TIMManager.getInstance().callExperimentalAPI(
"uploadFile",
uploadParam.toString(),
new V2TIMValueCallback<Object>() {
@Override
public void onSuccess(Object result) {
if (result instanceof String) {
String fileUrl = (String) result;
System.out.println("Upload successful, URL: " + fileUrl);
}
}
@Override
public void onError(int code, String desc) {
System.err.println("Upload failed, code: " + code + ", desc: " + desc);
}
}
);
} catch (JSONException e) {
e.printStackTrace();
}
let uploadParam: [String: Any] = [
"filePath": recordPath,
"fileType": 3 // 0: Unknown 1: Image 2: Video 3: Audio 4: log
]

if let uploadData = try? JSONSerialization.data(withJSONObject: uploadParam, options: .prettyPrinted),
let uploadParamStr = String(data: uploadData, encoding: .utf8) {
V2TIMManager.sharedInstance().callExperimentalAPI(
api: "uploadFile",
param: uploadParamStr as NSObject,
succ: { result in
if let fileUrl = result as? String, !fileUrl.isEmpty {
print("Upload successful, URL: \\(fileUrl)")
}
},
fail: { code, desc in
print("Upload failed, code: \\(code), desc: \\(String(describing: desc))")
}
)
}

云端语音转文字

您可以调用 callExperimentalAPI (Java / Swift / Objective-C / C++) 接口的 convertVoiceToText 能力将云端语音转换成文字。
接口参数说明如下:
入参
含义
说明
url
语音文件 url
语音文件上传云端后生成的 url 下载地址。
language
文本的语言
如果不设置,默认会自动检测。
示例代码如下:
Java
Swift
try {
JSONObject convertParam = new JSONObject();
convertParam.put("url", fileUrl);
convertParam.put("language", ""); // Empty means auto-detect
V2TIMManager.getInstance().callExperimentalAPI(
"convertVoiceToText",
convertParam.toString(),
new V2TIMValueCallback<Object>() {
@Override
public void onSuccess(Object result) {
if (result instanceof String) {
String text = (String) result;
System.out.println("Voice to text successful: " + text);
}
}
@Override
public void onError(int code, String desc) {
System.err.println("Voice to text failed, code: " + code + ", desc: " + desc);
}
}
);
} catch (JSONException e) {
e.printStackTrace();
}
let convertParam: [String: Any] = [
"url": fileUrl,
"language": "" // Empty means auto-detect
]

if let convertData = try? JSONSerialization.data(withJSONObject: convertParam, options: .prettyPrinted),
let convertParamStr = String(data: convertData, encoding: .utf8) {
V2TIMManager.sharedInstance().callExperimentalAPI(
api: "convertVoiceToText",
param: convertParamStr as NSObject,
succ: { result in
if let text = result as? String {
print("Voice to text successful: \\(text)")
}
},
fail: { code, desc in
print("Voice to text failed, code: \\(code), desc: \\(String(describing: desc))")
}
)
}

语言支持

目前支持识别的目标语言如下:
支持的语言
入参设置
中文普通话
"zh (cmn-Hans-CN)"
中文粤语
"yue-Hant-HK"
English
"en-US"
日本语(日本)
"ja-JP"