7

CMU Sphinx 4 を使用して認識を実行したい大量のファイルがあります。Sphinx には次の形式が必要です。

  • 16kHz
  • 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 で必要な形式に変換する方法を誰か教えてもらえますか?

4

1 に答える 1

20

実際に 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

Linux でディレクトリ内のすべての mp3 ファイルを変換するには:

for f in *.mp3; do ffmpeg -i "$f" -acodec pcm_s16le -ac 1 -ar 16000 "${f%.mp3}.wav"; done

または Windows:

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

Windows バッチ ファイルの場合:

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

fileffmpegffprobemediainfoその他のユーティリティでファイル情報を表示できます。

$ 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
于 2012-12-04T01:46:18.230 に答える