本文介绍语音识别服务的音频输入要求、音频格式的检查与转换方法,以及格式不符合要求时的排查方法。
语音识别各服务支持的语音输入格式
音频的实际编码、采样率和声道数需要符合所调用服务的要求。仅修改文件扩展名不会转换音频格式。
语音识别服务 | 音频输入要求 |
|---|---|
一句话识别 |
|
实时语音识别 |
|
录音文件识别 | 支持单声道和双声道的 WAV、MP3、M4A、WMA、AAC、OGG、AMR、FLAC 文件,文件大小不超过 512 MiB。 |
录音文件识别闲时版 | 支持单声道和双声道的 WAV、MP3、M4A、WMA、AAC、OGG、AMR、FLAC 文件,文件大小不超过 512 MiB。 |
录音文件识别极速版 |
|
如何查看语音格式
检查音频时,重点关注以下属性。术语定义请参见基本概念和术语。
采样率:8000 Hz(8 kHz)表示每秒 8000 个采样点;16000 Hz(16 kHz)表示每秒 16000 个采样点。
采样位数:16 bit 表示每个采样点使用 16 bit(2 字节)保存。
声道:Mono 为单声道,Stereo 为立体声。
Linux
使用以下命令查看 WAV 文件属性:
file input.wav
16 kHz、16 bit、单声道 PCM 编码的 WAV 文件,输出示例如下:
input.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 16000 Hz
8 kHz 文件的对应输出如下:
input.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 8000 Hz
裸 PCM 不包含描述采样率、采样位数和声道数的文件头,需要从录音或导出配置中确认这些参数。
Windows
右键单击音频文件,选择属性,在详细信息页签查看音频属性。8 kHz 和 16 kHz 的 PCM 编码 WAV 文件均可按此方式查看。
如何估算 PCM 数据大小
未压缩 PCM 数据的大小可以按以下公式计算:
PCM 数据大小(MiB)= 采样率(Hz)× 采样位数(bit)× 声道数 × 时长(秒)÷(8 × 1024 × 1024)
例如,16 kHz、16 bit、单声道、60 秒的 PCM 数据为 1,920,000 字节,约 1.83 MiB。WAV 文件还包含容器头等信息;该公式不适用于 MP3、AAC 等压缩音频的文件大小计算。
如何进行语音格式转换
音频的采样率、采样位数、声道或编码不符合输入要求时,可以先转换为所需格式,再调用识别服务。
Linux(FFmpeg)
从 FFmpeg 官网获取 FFmpeg。以下示例中的输入文件名需要替换为实际文件名。
查看音频属性
ffmpeg -i input.mp3
该命令显示输入信息,不生成输出文件。
转换为 PCM 编码的 WAV
以下命令将 WAV 转为 16 kHz、16 bit、单声道 WAV。输入为 MP3、AMR 或 44.1 kHz WAV 时,替换输入文件名即可;输出为 8 kHz 时,将 -ar 16000 改为 -ar 8000。
ffmpeg -i input.wav -ar 16000 -ac 1 -c:a pcm_s16le output.wav
在裸 PCM 和 WAV 之间转换
裸 PCM 输入需要在 -i 前指定原始音频的参数。以下示例假设输入为 16 kHz、16 bit、小端、单声道 PCM;参数必须与实际数据一致。
ffmpeg -f s16le -ar 16000 -ac 1 -i input.pcm -ar 16000 -ac 1 -c:a pcm_s16le output.wav
将 WAV 转为 16 kHz、16 bit、小端、单声道裸 PCM:
ffmpeg -i input.wav -ar 16000 -ac 1 -c:a pcm_s16le -f s16le output.pcm
-f s16le 指定输出为裸 PCM,不能仅将输出文件命名为 .wav 来生成 WAV 容器。
转换 A-law 或 μ-law 音频
对于 8 kHz、单声道的裸 A-law 或 μ-law 数据,分别使用以下命令输出 8 kHz、16 bit、单声道 WAV:
ffmpeg -f alaw -ar 8000 -ac 1 -i input.alaw -ar 8000 -ac 1 -c:a pcm_s16le output.wav
ffmpeg -f mulaw -ar 8000 -ac 1 -i input.mulaw -ar 8000 -ac 1 -c:a pcm_s16le output.wav
若 A-law 或 μ-law 已封装在 WAV 文件中,直接读取 WAV 容器,不要用 -f alaw 或 -f mulaw 强制按裸数据解析:
ffmpeg -i input.wav -ar 8000 -ac 1 -c:a pcm_s16le output.wav
Windows(音频转换工具)
可以使用 Adobe Audition、CoolEdit 等音频转换工具,打开音频文件后修改导出设置并导出。
例如,输出 16 kHz、16 bit、单声道音频时,在导出音频混缩对话框的采样类型区域,将采样率设置为 16000 Hz、声道设置为 Mono(单声道)、分辨率设置为 16 Bit。导出格式需符合所调用服务的要求。
常见问题及解决方法
示例音频正常,自己的音频没有识别结果怎么办?
先确认音频包含有效语音,再检查实际编码、采样率和声道数是否符合音频输入要求,并确认请求参数与音频一致。
可以将音频转换为8 kHz 或 16 kHz、16 bit、单声道的 PCM 编码 WAV。转换方法请参见如何进行语音格式转换。
录音文件识别或闲时版报 UNSUPPORT_SAMPLE_RATE 怎么办?
收到 status: 41010101、message: UNSUPPORT_SAMPLE_RATE 时,先检查项目中选择的模型与音频采样率是否匹配:8 kHz 模型对应 8 kHz 音频,16 kHz 模型对应 16 kHz 音频。
对于高于 16 kHz 的音频,录音文件识别可在设置 version=4.0 的同时设置 enable_sample_rate_adaptive=true,将音频自动降采样为 16 kHz。参数说明请参见录音文件识别接口说明。该参数不是任意采样率与模型不匹配问题的通用解决办法。
也可以先将音频转换为模型支持的采样率,再发起识别。请参见如何进行语音格式转换。
实时语音识别返回空结果怎么办?
检查输入音频是否包含有效语音,以及实际编码、采样率和声道数是否符合音频输入要求。请求中的格式和采样率参数应与音频一致。
使用已有音频文件时,不需要一律转为 PCM 或 WAV;输入不符合要求时,再按格式转换方法处理。
使用 MP3 调用一句话识别报错怎么办?
一句话识别支持 MP3。检查实际文件编码、采样率和声道数,并将请求的 format 设置为 mp3。不要仅根据文件扩展名判断编码,也不要将 MP3 输入误设为 pcm。
输入要求请参见音频输入要求。
一句话识别报 TOO_LONG_SPEECH 怎么办?
一句话识别仅支持不超过 60 秒的音频。收到 status: 41010104、message: TOO_LONG_SPEECH 时,检查音频时长。超过 60 秒的音频可使用实时语音识别、录音文件识别或录音文件识别闲时版。各服务的限制请参见音频输入要求。
控制台产品体验上传音频后无法识别怎么办?
可以先将音频转换为 8 kHz 或 16 kHz、16 bit、单声道的 PCM 编码 WAV 文件,再上传。转换方法请参见如何进行语音格式转换。
录音文件识别或闲时版报 AUDIO_DURATION_TOO_LONG 怎么办?
收到 status: 41050103、message: AUDIO_DURATION_TOO_LONG 时,检查音频时长。录音文件识别和闲时版支持的最大音频时长为 12 小时;双声道且两个声道均需识别时,最大时长为 6 小时。可以将长音频切分后分别识别。
从 FFmpeg 官网获取工具。以下命令提取原音频第 10 分钟至第 5 小时 10 分钟的区间:
ffmpeg -i input_audio.wav -ss 00:10:00 -to 5:10:00 -c copy output_audio.wav
-i input_audio.wav:指定输入文件。-ss 00:10:00:指定开始时间为第 10 分钟。-to 5:10:00:指定结束时间为第 5 小时 10 分钟。-c copy:直接复制音频数据,不重新编码。输出时长约为 5 小时,实际边界受音频包影响。output_audio.wav:输出文件。