转换CMU Sphinx 4输入的音频文件

Nat*_*enn 6 java audio speech-recognition ffmpeg cmusphinx

我有一大堆文件,我想在使用CMU Sphinx 4时获得认可.Sphinx需要以下格式:

  • 16千赫兹
  • 16位
  • 小尾数

我的文件类似于44100 khz,32位立体声mp3文件.我尝试使用Tritonus,然后使用更新版本JavaZoom,使用bakuzen中的代码进行转换.然而,AudioSystem.getAudioInputStream(File)抛出一个UnsupportedAudioFileException,我无法弄清楚为什么,所以我继续前进.

现在我正在尝试ffmpeg.该命令ffmpeg -i input.mp3 -ac 1 -ab 16 -ar 16000 output.wav似乎应该可以解决这个问题(除了小端),但是当我用Audacity检查输出时,它仍然将其标记为"32位浮点数".我在这个网站上找到的命令也使用了-acodec pcm_s16le,它的名字似乎是输出16位小端; 但是,Audacity仍然告诉我输出结果32 bit float.

谁能告诉我如何将音频文件转换为CMU Sphinx 4所需的格式?

llo*_*gan 16

你真的尝试过CMU Sphinx 4中ffmpeg的输出吗?32位浮点可能是Audacity中的默认采样格式(" 编辑">"首选项">"质量").我猜它会将任何导入的文件转换为这些设置,因此它可能不会报告实际文件的参数,但可能是Audacity中的工作文件.

删除-ab 16.这将指示编码器使用16位/秒,无论如何ffmpeg将忽略它为pcm_s16le.所以你的命令看起来像:

ffmpeg -i input.mp3 -acodec pcm_s16le -ac 1 -ar 16000 output.wav
Run Code Online (Sandbox Code Playgroud)

要转换Linux中目录中的所有mp3文件:

for f in *.mp3; do ffmpeg -i "$f" -acodec pcm_s16le -ac 1 -ar 16000 "${f%.mp3}.wav"; done
Run Code Online (Sandbox Code Playgroud)

或Windows:

for /r %i in (*) do ffmpeg -i %i -acodec pcm_s16le -ac 1 -ar 16000 %i.wav
Run Code Online (Sandbox Code Playgroud)

在Windows批处理文件中:

for /r %%i in (*.mp3) do ffmpeg -i "%%i" -acodec pcm_s16le -ac 1 -ar 16000 "%i.wav"
Run Code Online (Sandbox Code Playgroud)

你可以看到文件信息有file,ffmpeg,ffprobe,mediainfo等公用事业领域:

$ file hjl0bC.wav 
hjl0bC.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 16000 Hz

$ ffmpeg -i hjl0bC.wav
[...]
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 16000 Hz, mono, s16, 256 kb/s
Run Code Online (Sandbox Code Playgroud)