语音格式
本文介绍 AmiVoice API 可以处理的语音数据格式,以及在请求参数中的设置方法。
支持的语音
这里说明 AmiVoice API 支持的语音格式。
编码
- Signed 16-bit PCM (little-endian、big-endian)
- A-law (8-bit)
- mu-law (8-bit)
采样率
支持 8kHz、11.025kHz、16kHz、22.05kHz、32kHz、44.1kHz、48kHz 的采样率。A-law 和 mu-law 格式仅支持 8kHz。
在本文档中,11.025kHz 和 22.05kHz 有时也会分别表示为 11kHz 和 22kHz。
AmiVoice API 中用于语音识别处理的语音识别引擎有两种,分别支持 8kHz 和 16kHz 采样率。8kHz 引擎主要用于电话语音,16kHz 引擎则广泛用于其他语音。各语音识别引擎支持的采样率如下表所示:
语音识别引擎 | 支持的采样率 |
---|---|
支持 8kHz 的语音识别引擎 | 8kHz、11.025kHz |
支持 16kHz 的语音识别引擎 | 16kHz、22.05kHz、32kHz、44.1kHz、48kHz |
只有部分语音识别引擎支持 8kHz。详情请参阅语音识别引擎列表。
与歌曲或乐器演奏不同,语音识别通常不需要 16kHz 以上频段的信息。即使发送采样率高于 16kHz 的语音,也会先降采样到 16kHz 再进行处理,因此没有必要使用高于 16kHz 的采样率。为了节省网络带宽并减少传输时间,建议使用适当的采样率发送语音数据。
使用支持 8k 语音的语音识别引擎时也是如此,11kHz 的语音会先降采样到 8kHz 再进行处理。
请参考 AmiVoice TechBlog 的文章『语音识别需要多高的采样率?』。
声道数
1 或 2。
2 声道(立体声)仅支持 Wave、Ogg、FLAC 等文件 header 中包含音频格式信息的"带 header "音频文件。但是,对于立体声音频,只有第一个声道会被用于语音识别。
如果音源是立体声,要对两个声道都进行语音识别,需要为每个声道分别发送语音识别请求。
请参考 AmiVoice TechBlog 的文章『如何将立体声音频文件转换为两个单声道音频文件』。
音频压缩
支持 Speex、Opus、MP3、FLAC。
过度压缩会影响人耳的听辨能力,也会影响识别精度。以下是各压缩方式的压缩率指南:
压缩方式 | 指南 |
---|---|
Speex | quality 7 以上 |
Opus | 压缩率约 10:1 |
文件格式
支持 Wave(WAV)、Ogg、MP3、FLAC。由于音频格式信息包含在文件 header 等处,某些情况下可能不需要在请求参数中指定音频格式。详情请参阅下一节音频格式的设置方法。
音频格式的设置方法
发送语音识别请求时,需要指定要发送的音频数据的格式。Wave(WAV)、Ogg、FLAC 等容器文件的 header 包含音频格式信息。下面分别说明发送这种"带 header "音频文件和不包含音频格式信息的"不带 header "音频数据的情况。
请正确指定音频格式。设置错误可能导致完全无法获得结果,或降低语音识别和说话人区分的精度。
下文提到的音频格式名称不区分大小写。LSB16K
和lsb16k
是相同的。
带 header 的音频格式
当文件 header 等处包含音频格式信息时,按以下方式设置音频格式:
接口 | 音频格式的设置方法 |
---|---|
同步/异步 HTTP | 可以省略音频格式的指定 |
WebSocket | 在s 命令的 第一个参数中,对于采样率为 8kHz/11kHz 的音频数据设置8k ,对于 16kHz 及以上的设置16k 。 |
支持的音频格式及其设置方法汇总如下表:
文件格式 | 编码/音频压缩 | 采样频率 | 声道数 | 音频格式名 |
---|---|---|---|---|
Wave | PCM Signed 16-bit little-endian (※ formatTag: 0x0001) | 8kHz, 11kHz | 1 或 2 | 8K |
Wave | PCM Signed 16-bit little-endian (※ formatTag: 0x0001) | 16kHz及以上 | 1 或 2 | 16K |
Wave | mu-Law 8-bit (※ formatTag: 0x0007) | 8kHz | 1 或 2 | 8K |
Wave | A-Law 8-bit (※ formatTag: 0x0006) | 8kHz | 1 或 2 | 8K |
Ogg | Speex | 8kHz, 11kHz | 1 或 2 | 8K |
Ogg | Speex | 16kHz 及以上 | 1 或 2 | 16K |
Ogg | Opus | 8kHz, 11kHz | 1 或 2 | 8K |
Ogg | Opus | 16kHz 及以上 | 1 或 2 | 16K |
MP3 | MP3 | 8kHz, 11kHz | 1 或 2 | 8K |
MP3 | MP3 | 16kHz 及以上 | 1 或 2 | 16K |
FLAC | FLAC | 8kHz, 11kHz | 1 或 2 | 8K |
FLAC | FLAC | 16kHz 及以上 | 1 或 2 | 16K |
对于双声道音频数据,只有第一个声道会被用于语音识别。
同步 HTTP 接口示例
wav 文件包含音频格式信息,音频格式会自动判别,因此无需指定。使用 curl 命令的示例如下:
curl https://acp-api.amivoice.com/v1/recognize \
-F u={APP_KEY} \
-F d=grammarFileNames=-a-general \
-F a=@test-16k.wav
异步 HTTP 接口示例
wav 文件包含音频格式信息,音频格式会自动判别,因此无需指定。使用 curl 命令的示例如下:
curl https://acp-api-async.amivoice.com/v1/recognitions \
-F u={APP_KEY} \
-F d=grammarFileNames=-a-general \
-F a=@test-16k.wav
除 endpoint 外,与同步 HTTP 接口相同。
WebSocket 接口示例
使用 16kHz 引擎时,在s
命令的第一个参数中设置如下:
s 16K -a-general
当采样率为 8k 且使用支持 8kHz 的引擎(例如"会話_汎用 (-a-general
)")时,设置如下:
s 8K -a-general
在 WebSocket 接口中发送带 header 的音频数据时,请勿指定8K
或16K
以外的音频格式。如果设置了后面提到的用于判断 PCM 格式音频数据的不带 header 的音频格式中的字符串(如LSB16K
等),将基于该信息进行处理。在大多数情况下,这会导致无法检测到语音或返回与实际语音完全不同的结果。
不带 header 的音频格式
发送原始 PCM 数据等"不带 header "的音频数据时,按以下方式设置音频格式:
接口 | 音频格式的设置方法 |
---|---|
同步/异步 HTTP | 在c 参数中指定如LSB16K 这样的音频格式名。 |
WebSocket | 在s 命令的第一个参数中指定如LSB16K 这样的音频格式名。 |
对应编码和采样率的音频格式名如下表所示:
编码 | 采样频率 | 声道数 | 音频格式名 |
---|---|---|---|
PCM Signed 16-bit little-endian | 8kHz | 1 | LSB8K |
PCM Signed 16-bit little-endian | 11kHz | 1 | LSB11K |
PCM Signed 16-bit little-endian | 16kHz | 1 | LSB16K |
PCM Signed 16-bit little-endian | 22kHz | 1 | LSB22K |
PCM Signed 16-bit little-endian | 32kHz | 1 | LSB32K |
PCM Signed 16-bit little-endian | 44.1kHz | 1 | LSB44K |
PCM Signed 16-bit little-endian | 48kHz | 1 | LSB48K |
PCM Signed 16-bit big-endian | 8kHz | 1 | MSB8K |
PCM Signed 16-bit big-endian | 11kHz | 1 | MSB11K |
PCM Signed 16-bit big-endian | 16kHz | 1 | MSB16K |
PCM Signed 16-bit big-endian | 22kHz | 1 | MSB22K |
PCM Signed 16-bit big-endian | 32kHz | 1 | MSB32K |
PCM Signed 16-bit big-endian | 44.1kHz | 1 | MSB44K |
PCM Signed 16-bit big-endian | 48kHz | 1 | MSB48K |
mu-Law 8-bit | 8kHz | 1 | MULAW |
A-Law 8-bit | 8kHz | 1 | ALAW |
同步 HTTP 接口示例
这里展示使用 curl 发送采样率为 16kHz、量化位数为 16 位、单声道、little-endian 的 PCM 数据的示例。在这种情况下,将c
参数指定为LSB16K
:
curl https://acp-api.amivoice.com/v1/recognize \
-F u={APP_KEY} \
-F d=grammarFileNames=-a-general \
-F c=LSB16K \
-F a=@test-16k.pcm
异步 HTTP 接口示例
这里展示使用 curl 发送采样率为 16kHz、量化位数为 16 位、单声道、little-endian 的 PCM 数据的示例。在这种情况下,将c
参数指定为LSB16K
:
curl https://acp-api-async.amivoice.com/v1/recognitions \
-F u={APP_KEY} \
-F d=grammarFileNames=-a-general \
-F c=LSB16K \
-F a=@test-16k.pcm
除 endpoint 外,与同步 HTTP 接口相同。
WebSocket 接口示例
这里发送采样率为 16kHz、量化位数为 16 位、单声道、little-endian 的 PCM 数据。在这种情况下,在s
命令中指定LSB16K
:
s LSB16K -a-general
对于不带 header 的音频,如果指定了8K
或16K
等带 header 音频文件的音频格式,将会尝试读取 header 并失败。如果读取 header 失败,将被视为LSB16K
。发送不带 header 的音频数据时,请务必指定不带 header 的音频格式表中列出的字符串之一。