2

我正在尝试编写一个应用程序,该应用程序将允许用户从远程系统说出一小组命令并让它们在我的服务器上执行。使用 pocketsphinx 解析语音文本。当使用麦克风在本地运行时,pocketsphinx_continuous 可以完美地工作,无论我如何含糊其辞。但是在导入音频文件并使用 ffmpeg 将音频下采样到单声道、16 位 PCM 文件时,它会毫无困难地解析第一个单词。然后它将跳过其他所有内容并将其视为 . 我相信问题出在文件格式而不是pocketsphinx配置中。

ffmpeg -y -i Sound\AddSheet.wav -ac 1 -f s16le -acodec pcm_s16le -ar 16k AddTmp.wav
在批处理文件中使用命令行 。

我得到的输出的底部是:

INFO: fsg_search.c(1407): Start node ADD.0:5:47
INFO: fsg_search.c(1407): Start node <sil>.0:2:49
INFO: fsg_search.c(1446): End node <sil>.126:128:305 (-486)
INFO: fsg_search.c(1662): lattice start node <s>.0 end node <sil>.126
INFO: ps_lattice.c(1352): Normalizer P(O) = alpha(<sil>:126:305) = -175371
INFO: ps_lattice.c(1390): Joint P(O,S) = -176076 P(S|O) = -705
000000000: ADD USER

这不是文件中的音频。文件中所说的单词是“ADD SPREADSHEET”,它可以在同一个麦克风上完美运行,而无需插入 .wav 文件。

我尝试使用 sox 增加音量并降低背景噪音:

sox -v 3.0 Sound\%1 Sound\%1-loud.wav ffmpeg -i Sound\%1-loud.wav -vn -ss 00:00:00 -t 00:00:01 -y Sound\%1-noiseaud.wav 
sox Sound\%1-noiseaud.wav -n noiseprof Sound\%1-noise.prof 
sox Sound\%1 Sound\%1-clean.wav noisered sound\noise.prof 0.21 
ffmpeg -y -i Sound\%1-clean.wav -ac 1 -f s16le -acodec pcm_s16le -ar 16k AddTmp.wav

对最终结果没有明显影响。

如果您查看输出,您会注意到 fsg_search.c 已找到 ADD 作为起始节点,然后对其余节点保持沉默。请帮助解决这个问题。

4

0 回答 0