使用 pocketsphinx 做中文语音识别时报错 ERROR: Input audio file has sample rate [44100], but decoder expects [...

2019-01-03 10:42:54 浏览数 (2)

问题说明

今天在使用 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

0 人点赞