本文介绍 Paraformer 实时语音识别 Java SDK 的参数和接口细节。
用户指南: 关于模型介绍和选型建议请参见 实时语音识别 。
在线体验 :仅 paraformer-realtime-v2、paraformer-realtime-8k-v2 和 paraformer-realtime-v1 支持 在线体验 。
前提条件
-
已开通服务并 获取 API Key 。请 配置 API Key 到环境变量 ,而非硬编码在代码中,防范因代码泄露导致的安全风险。
说明当您需要为第三方应用或用户提供临时访问权限,或者希望严格控制敏感数据访问、删除等高风险操作时,建议使用 临时鉴权 Token 。
与长期有效的 API Key 相比,临时鉴权 Token 具备时效性短(60 秒)、安全性高的特点,适用于临时调用场景,能有效降低 API Key 泄露的风险。
使用方式:在代码中,将原本用于鉴权的 API Key 替换为获取到的临时鉴权 Token 即可。
模型列表
|
|
paraformer-realtime-v2(推荐) |
paraformer-realtime-8k-v2(推荐) |
paraformer-realtime-v1 |
paraformer-realtime-8k-v1 |
|
适用场景 |
直播、会议等场景 |
电话客服、语音信箱等 8kHz 音频的识别场景 |
直播、会议等场景 |
电话客服、语音信箱等 8kHz 音频的识别场景 |
|
采样率 |
任意 |
8kHz |
16kHz |
8kHz |
|
语种 |
中文(包含中文普通话和各种方言)、英文、日语、韩语、德语、法语、俄语 支持的中文方言:上海话、吴语、闽南语、东北话、甘肃话、贵州话、河南话、湖北话、湖南话、江西话、宁夏话、山西话、陕西话、山东话、四川话、天津话、云南话、粤语 |
中文 |
中文 |
中文 |
|
标点符号预测 |
✅ 默认支持,无需配置 |
✅ 默认支持,无需配置 |
✅ 默认支持,无需配置 |
✅ 默认支持,无需配置 |
|
逆文本正则化(ITN) |
✅ 默认支持,无需配置 |
✅ 默认支持,无需配置 |
✅ 默认支持,无需配置 |
✅ 默认支持,无需配置 |
|
定制热词 |
✅ 参见 定制热词 |
✅ 参见 定制热词 |
||
|
指定待识别语种 |
✅ 通过
|
❌ |
❌ |
❌ |
|
情感识别 |
❌ |
|
❌ |
❌ |
快速开始
Recognition 类 提供了同步调用和流式调用等接口。请根据实际需求选择合适的调用方式:
-
同步调用:针对本地文件进行识别,并一次性返回完整的处理结果。适合处理录制好的音频。
-
流式调用:可直接对音频流进行识别,并实时输出结果。音频流可以来自外部设备(如麦克风)或从本地文件读取。适合需要即时反馈的场景。
同步调用
提交单个语音实时转写任务,通过传入本地文件的方式同步阻塞地拿到转写结果。
实例化
Recognition
类
,调用
call
方法绑定
请求参数
和待识别文件,进行识别并最终获取识别结果。
流式调用:基于回调
提交单个语音实时转写任务,通过实现回调接口的方式流式输出实时识别结果。
-
启动流式语音识别
实例化 Recognition 类 ,调用
call方法绑定 请求参数 和 回调接口(ResultCallback) 并启动流式语音识别。 -
流式传输
循环调用 Recognition 类 的
sendAudioFrame方法,将从本地文件或设备(如麦克风)读取的二进制音频流分段发送至服务端。在发送音频数据的过程中,服务端会通过 回调接口(ResultCallback) 的
onEvent方法,将识别结果实时返回给客户端。建议每次发送的音频时长约为 100 毫秒,数据大小保持在 1KB 至 16KB 之间。
-
结束处理
调用 Recognition 类 的
stop方法结束语音识别。该方法会阻塞当前线程,直到 回调接口(ResultCallback) 的
onComplete或者onError回调触发后才会释放线程阻塞。
流式调用:基于 Flowable
提交单个语音实时转写任务,通过实现工作流(Flowable)的方式流式输出实时识别结果。
Flowable 是一个用于工作流和业务流程管理的开源框架,它基于 Apache 2.0 许可证发布。关于 Flowable 的使用,请参见 Flowable API 详情 。
高并发调用
在 DashScope Java SDK 中,采用了 OkHttp3 的连接池技术,以减少重复建立连接的开销。详情请参见 实时语音识别高并发场景 。
请求参数
通过
RecognitionParam
的链式方法配置模型、采样率、音频格式等参数。配置完成的参数对象传入
Recognition
类
的
call
/
streamCall
方法中使用。
|
参数 |
类型 |
默认值 |
是否必须 |
说明 |
|
model |
String |
- |
是 |
用于实时语音识别的模型。详情请参见 模型列表 。 |
|
sampleRate |
Integer |
- |
是 |
设置待识别音频采样率(单位 Hz)。 因模型而异:
|
|
format |
String |
- |
是 |
设置待识别音频格式。 支持的音频格式:pcm、wav、mp3、opus、speex、aac、amr。
重要
opus/speex:必须使用 Ogg 封装; wav:必须为 PCM 编码; amr:仅支持 AMR-NB 类型。 |
|
vocabularyId |
String |
- |
否 |
设置热词 ID,若未设置则不生效。v2 及更高版本模型设置热词 ID 时使用该字段。 在本次语音识别中,将应用与该热词 ID 对应的热词信息。具体使用方法请参见 定制热词 。 |
|
phraseId |
String |
- |
否 |
设置热词 ID,若未设置则不生效。v1 系列模型设置热词 ID 时使用该字段。 在本次语音识别中,将应用与该热词 ID 对应的热词信息。具体使用方法请参见 Paraformer 语音识别热词定制与管理 。 |
|
disfluencyRemovalEnabled |
boolean |
false |
否 |
设置是否过滤语气词:
|
|
language_hints |
String[] |
["zh", "en"] |
否 |
设置待识别语言代码。如果无法提前确定语种,可不设置,模型会自动识别语种。 目前支持的语言代码:
该参数仅对支持多语言的模型生效(参见 模型列表 )。
说明
通过 parameter 设置
通过 parameters 设置
|
|
semantic_punctuation_enabled |
boolean |
false |
否 |
设置是否开启语义断句,默认关闭。
语义断句准确性更高,适合会议转写场景;VAD(Voice Activity Detection,语音活动检测)断句延迟较低,适合交互场景。
通过调整
该参数仅在模型为 v2 及更高版本时生效。
说明
通过 parameter 设置
通过 parameters 设置
|
|
max_sentence_silence |
Integer |
800 |
否 |
设置 VAD(Voice Activity Detection,语音活动检测)断句的静音时长阈值(单位为 ms)。 当一段语音后的静音时长超过该阈值时,系统会判定该句子已结束。 参数范围为 200ms 至 6000ms,默认值为 800ms。
该参数仅在
说明
通过 parameter 设置
通过 parameters 设置
|
|
multi_threshold_mode_enabled |
boolean |
false |
否 |
该开关打开时(true)可以防止 VAD 断句切割过长。默认关闭。
该参数仅在
说明
通过 parameter 设置
通过 parameters 设置
|
|
punctuation_prediction_enabled |
boolean |
true |
否 |
设置是否在识别结果中自动添加标点:
该参数仅在模型为 v2 及更高版本时生效。
说明
通过 parameter 设置
通过 parameters 设置
|
|
heartbeat |
boolean |
false |
否 |
当需要与服务端保持长连接时,可通过该开关进行控制:
该参数仅在模型为 v2 及更高版本时生效。
说明
使用该字段时,SDK 版本不能低于 2.19.1。
通过 parameter 设置
通过 parameters 设置
|
|
inverse_text_normalization_enabled |
boolean |
true |
否 |
设置是否开启 ITN(Inverse Text Normalization,逆文本正则化)。 默认开启(true)。开启后,中文数字将转换为阿拉伯数字。 该参数仅在模型为 v2 及更高版本时生效。
说明
通过 parameter 设置
通过 parameters 设置
|
|
apiKey |
String |
- |
否 |
用户 API Key。 |
关键接口
Recognition
类
Recognition
通过“
import com.alibaba.dashscope.audio.asr.recognition.Recognition;
”方式引入。它的关键接口如下:
|
接口/方法 |
参数 |
返回值 |
描述 |
|
|
无 |
基于回调形式的流式实时识别,该方法不会阻塞当前线程。 |
|
|
识别结果 |
基于本地文件的同步调用,该方法会阻塞当前线程直到全部音频读完,该方法要求所识别文件具有可读权限。 |
|
|
|
基于 Flowable 的流式实时识别。 |
|
|
无 |
推送音频,每次推送的音频流不宜过大或过小,建议每包音频时长为 100ms 左右,大小在 1KB~16KB 之间。 识别结果通过 回调接口(ResultCallback) 的 onEvent 方法获取。 |
|
无 |
无 |
停止实时识别。
该方法会阻塞当前线程,直到回调实例
|
|
code: WebSocket 关闭码(Close Code) reason:关闭原因 这两个参数可参考 The WebSocket Protocol 文档进行配置 |
true |
在任务结束后,无论是否出现异常都需要关闭 WebSocket 连接,避免造成连接泄漏。关于如何复用连接提升效率请参考 实时语音识别高并发场景 。 |
|
无 |
requestId |
获取当前任务的
requestId,在调用
说明
该方法自 2.18.0 版本及以后的 SDK 中才开始提供。 |
|
无 |
首包延迟 |
获取首包延迟,从发送第一包音频到收到首包识别结果延迟,在任务完成后使用。
说明
该方法自 2.18.0 版本及以后的 SDK 中才开始提供。 |
|
无 |
尾包延迟 |
获得尾包延迟,发送
说明
该方法自 2.18.0 版本及以后的 SDK 中才开始提供。 |
回调接口(
ResultCallback
)
流式调用 时,服务端会通过回调的方式,将关键流程信息和数据返回给客户端。您需要实现回调方法,处理服务端返回的信息或者数据。
回调方法的实现,通过继承抽象类
ResultCallback
完成,继承该抽象类时,您可以指定泛型为
RecognitionResult
。
RecognitionResult
封装了服务器返回的数据结构。
由于
Java
支持连接复用,因此没有
onClose
和
onOpen
。
|
接口/方法 |
参数 |
返回值 |
描述 |
|
|
无 |
当服务有回复时会被回调。 |
|
无 |
无 |
任务完成后该接口被回调。 |
|
|
无 |
发生异常时该接口被回调。 |
响应结果
实时识别结果(
RecognitionResult
)
RecognitionResult
代表一次实时识别的结果。
|
接口/方法 |
参数 |
返回值 |
描述 |
|
无 |
requestId |
获取 requestId。 |
|
无 |
是否是完整句子,即产生断句 |
判断给定句子是否已经结束。 |
|
无 |
获取单句信息,包括时间戳和文本信息等。 |
单句信息(
Sentence
)
|
接口/方法 |
参数 |
返回值 |
描述 |
|
无 |
句子开始时间,单位为 ms |
返回句子开始时间。 |
|
无 |
句子结束时间,单位为 ms |
返回句子结束时间。 |
|
无 |
识别文本 |
返回识别文本。 |
|
无 |
字时间戳信息(Word) 的 List 集合 |
返回字时间戳信息。 |
|
无 |
当前句子的情感 |
返回当前句子的情感:
情感识别遵循如下约束:
|
|
无 |
当前句子识别情感的置信度 |
返回当前句子识别情感的置信度,取值范围:[0.0,1.0],值越大表示置信度越高。 情感识别遵循如下约束:
|
字时间戳信息(
Word
)
|
接口/方法 |
参数 |
返回值 |
描述 |
|
无 |
字开始时间,单位为 ms |
返回字开始时间。 |
|
无 |
字结束时间,单位为 ms |
返回字结束时间。 |
|
无 |
字 |
返回识别的字。 |
|
无 |
标点 |
返回标点。 |
错误码
如遇报错问题,请参见 错误信息 进行排查。
若问题仍未解决,请加入 开发者群 反馈遇到的问题,并提供 Request ID,以便进一步排查问题。
更多示例
更多示例,请参见 GitHub 。
常见问题
功能特性
Q:在长时间静默的情况下,如何保持与服务端长连接?
将请求参数
heartbeat
设置为
true,并持续向服务端发送静音音频。
静音音频指的是在音频文件或数据流中没有声音信号的内容。静音音频可以通过多种方法生成,例如使用音频编辑软件如 Audacity 或 Adobe Audition,或者通过命令行工具如 FFmpeg。
Q:如何将音频格式转换为满足要求的格式?
可使用 FFmpeg 工具 ,更多用法请参见 FFmpeg 官网。
# 基础转换命令(万能模板)
# -i,作用:输入文件路径,常用值示例:audio.wav
# -c:a,作用:音频编码器,常用值示例:aac, libmp3lame, pcm_s16le
# -b:a,作用:比特率(音质控制),常用值示例:192k, 320k
# -ar,作用:采样率,常用值示例:44100 (CD), 48000, 16000
# -ac,作用:声道数,常用值示例:1(单声道), 2(立体声)
# -y,作用:覆盖已存在文件(无需值)
ffmpeg -i input_audio.ext -c:a 编码器名 -b:a 比特率 -ar 采样率 -ac 声道数 output.ext
# 例如:WAV → MP3(保持原始质量)
ffmpeg -i input.wav -c:a libmp3lame -q:a 0 output.mp3
# 例如:MP3 → WAV(16bit PCM标准格式)
ffmpeg -i input.mp3 -c:a pcm_s16le -ar 44100 -ac 2 output.wav
# 例如:M4A → AAC(提取/转换苹果音频)
ffmpeg -i input.m4a -c:a copy output.aac # 直接提取不重编码
ffmpeg -i input.m4a -c:a aac -b:a 256k output.aac # 重编码提高质量
# 例如:FLAC无损 → Opus(高压缩)
ffmpeg -i input.flac -c:a libopus -b:a 128k -vbr on output.opus
Q: 是否支持查看每句话对应的时间范围?
支持。语音识别结果中会包含每句话的开始时间戳和结束时间戳,可通过它们确定每句话的时间范围。
Q:如何识别本地文件(录音文件)?
识别本地文件有两种方式:
-
直接传入本地文件路径:此种方式在最终识别结束后获取完整识别结果,不适合即时反馈的场景。
参见 同步调用 ,在 Recognition 类 的
call方法中传入文件路径对录音文件直接进行识别。 -
将本地文件转成二进制流进行识别:此种方式一边识别文件一边流式获取识别结果,适合即时反馈的场景。
-
参见 流式调用:基于回调 ,通过 Recognition 类 的
sendAudioFrame方法向服务端发送二进制流对其进行识别。 -
参见 流式调用:基于 Flowable ,通过 Recognition 类 的
streamCall方法向服务端发送二进制流对其进行识别。
-
故障排查
Q:无法识别语音(无识别结果)是什么原因?
-
请检查请求参数中的音频格式(
format)和采样率(sampleRate/sample_rate)设置是否正确且符合参数约束。以下为常见错误示例:-
音频文件扩展名为 .wav,但实际为 MP3 格式,而请求参数
format设置为 mp3(参数设置错误)。 -
音频采样率为 3600Hz,但请求参数
sampleRate/sample_rate设置为 48000(参数设置错误)。
可以使用 ffprobe 工具获取音频的容器、编码、采样率、声道等信息:
ffprobe -v error -show_entries format=format_name -show_entries stream=codec_name,sample_rate,channels -of default=noprint_wrappers=1 input.xxx -
-
使用
paraformer-realtime-v2模型时,请检查language_hints设置的语言是否与音频实际语言一致。例如:音频实际为中文,但
language_hints设置为en(英文)。 -
若以上检查均无问题,可通过定制热词提升对特定词语的识别效果。