问题说明
今天在使用 pocketsphinx_continuous 识别中文 wav 文件是,报如下错误:
代码语言:javascript复制> pocketsphinx_continuous -hmm zh_broadcastnews_ptm256_8000 -lm zh_broadcastnews_64000_utf8.DMP -dict zh_broadcastnews_utf8.dic -infile myfile.wav
ERROR: "continuous.c", line 136: Input audio file has sample rate [44100], but decoder expects [16000]
问题原因
这个 myfile.wav 是我从一个 mp3 文件转换过来的,其中是采样率是 44100HZ,而 pocketsphinx_continuous 需要使用 16000HZ 的音频文件。
具体文件是什么采样率,在 linux 上可以使用 soxi 命令查看,比如:
代码语言:javascript复制$ soxi myfile.wav
Input File : 'myfile.wav'
Channels : 1
Sample Rate : 44100
Precision : 16-bit
Duration : 00:01:26.45 = 3812421 samples = 6483.71 CDDA sectors
File Size : 7.62M
Bit Rate : 706k
Sample Encoding: 16-bit Signed Integer PCM
解决办法
解决办法就是使用 sox 命令将音频文件采样率转换成 16000HZ,比如:
代码语言:javascript复制$ sox myfile.wav -r 16000 myfile-16000.wav
$ soxi myfile-16000.wav
Input File : 'myfile-16000.wav'
Channels : 1
Sample Rate : 16000
Precision : 16-bit
Duration : 00:01:26.45 = 1383191 samples ~ 6483.71 CDDA sectors
File Size : 2.77M
Bit Rate : 256k
Sample Encoding: 16-bit Signed Integer PCM
转换后,重新运行语音识别程序。
代码语言:javascript复制> pocketsphinx_continuous -hmm zh_broadcastnews_ptm256_8000 -lm zh_broadcastnews_64000_utf8.DMP -dict zh_broadcastnews_utf8.dic -infile myfile-16000.wav