跳至主要内容

语音格式

本文介绍 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 的采样率。为了节省网络带宽并减少传输时间,建议使用适当的采样率发送语音数据。需要注意的是,16kHz 以外的采样率不会影响语音识别的准确性。

使用支持 8k 语音的语音识别引擎时也是如此,11kHz 的语音会先降采样到 8kHz 再进行处理。

请参考 AmiVoice TechBlog 的文章『语音识别需要多高的采样率?』。

声道数

1 或 2。

2 声道(立体声)仅支持 Wave、Ogg、FLAC 等文件 header 中包含音频格式信息的"带 header "音频文件。但是,对于立体声音频,只有第一个声道会被用于语音识别。

提示

如果音源是立体声,要对两个声道都进行语音识别,需要为每个声道分别发送语音识别请求。

请参考 AmiVoice TechBlog 的文章『如何将立体声音频文件转换为两个单声道音频文件』。

音频压缩

支持 Speex、Opus、MP3、FLAC。

提示

过度压缩会影响人耳的听辨能力,也会影响识别精度。以下是各压缩方式的压缩率指南:

压缩方式指南
Speexquality 7 以上
Opus压缩率约 10:1

文件格式

支持 Wave(WAV)、Ogg、MP3、FLAC。由于音频格式信息包含在文件 header 等处,某些情况下可能不需要在请求参数中指定音频格式。详情请参阅下一节音频格式的设置方法

音频格式的设置方法

发送语音识别请求时,需要指定要发送的音频数据的格式。Wave(WAV)、Ogg、FLAC 等容器文件的 header 包含音频格式信息。下面分别说明发送这种"带 header "音频文件和不包含音频格式信息的"不带 header "音频数据的情况。

危险

请正确指定音频格式。设置错误可能导致完全无法获得结果,或降低语音识别和说话人区分的精度。

提示

下文提到的音频格式名称不区分大小写。LSB16Klsb16k是相同的。

带 header 的音频格式

当文件 header 等处包含音频格式信息时,按以下方式设置音频格式:

接口
音频格式的设置方法
同步/异步 HTTP可以省略音频格式的指定
WebSockets命令的第一个参数中,对于采样率为 8kHz/11kHz 的音频数据设置8k,对于 16kHz 及以上的设置16k

支持的音频格式及其设置方法汇总如下表:

文件格式
编码/音频压缩采样频率声道数音频格式名
WavePCM Signed 16-bit little-endian
(※ formatTag: 0x0001)
8kHz, 11kHz1 或 28K
WavePCM Signed 16-bit little-endian
(※ formatTag: 0x0001)
16kHz及以上1 或 216K
Wavemu-Law 8-bit
(※ formatTag: 0x0007)
8kHz1 或 28K
WaveA-Law 8-bit
(※ formatTag: 0x0006)
8kHz1 或 28K
OggSpeex8kHz, 11kHz1 或 28K
OggSpeex16kHz 及以上1 或 216K
OggOpus8kHz, 11kHz1 或 28K
OggOpus16kHz 及以上1 或 216K
MP3MP38kHz, 11kHz1 或 28K
MP3MP316kHz 及以上1 或 216K
FLACFLAC8kHz, 11kHz1 或 28K
FLACFLAC16kHz 及以上1 或 216K
备注

对于双声道音频数据,只有第一个声道会被用于语音识别。

同步 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 的音频数据时,请勿指定8K16K以外的音频格式。如果设置了后面提到的用于判断 PCM 格式音频数据的不带 header 的音频格式中的字符串(如LSB16K等),将基于该信息进行处理。在大多数情况下,这会导致无法检测到语音或返回与实际语音完全不同的结果。

不带 header 的音频格式

发送原始 PCM 数据等"不带 header "的音频数据时,按以下方式设置音频格式:

接口
音频格式的设置方法
同步/异步 HTTPc参数中指定如LSB16K这样的音频格式名。
WebSockets命令的第一个参数中指定如LSB16K这样的音频格式名。

对应编码和采样率的音频格式名如下表所示:

编码采样频率声道数音频格式名
PCM Signed 16-bit little-endian8kHz1LSB8K
PCM Signed 16-bit little-endian11kHz1LSB11K
PCM Signed 16-bit little-endian16kHz1LSB16K
PCM Signed 16-bit little-endian22kHz1LSB22K
PCM Signed 16-bit little-endian32kHz1LSB32K
PCM Signed 16-bit little-endian44.1kHz1LSB44K
PCM Signed 16-bit little-endian48kHz1LSB48K
PCM Signed 16-bit big-endian8kHz1MSB8K
PCM Signed 16-bit big-endian11kHz1MSB11K
PCM Signed 16-bit big-endian16kHz1MSB16K
PCM Signed 16-bit big-endian22kHz1MSB22K
PCM Signed 16-bit big-endian32kHz1MSB32K
PCM Signed 16-bit big-endian44.1kHz1MSB44K
PCM Signed 16-bit big-endian48kHz1MSB48K
mu-Law 8-bit8kHz1MULAW
A-Law 8-bit8kHz1ALAW

同步 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
备注

WebSocket 接口的s命令还需设置其他参数。详情请参阅识别请求的开始或参考中的s 命令响应数据包

警告

对于不带 header 的音频,如果指定了8K16K等带 header 音频文件的音频格式,将会尝试读取 header 并失败。如果读取 header 失败,将被视为LSB16K。发送不带 header 的音频数据时,请务必指定不带 header 的音频格式表中列出的字符串之一。