跳至主要内容

语音格式

本文介绍 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。

提示

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

压缩方式指南
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 的音频格式表中列出的字符串之一。