2012-12-03 8 views
5

ho una grande serie di file che vorrei eseguire il riconoscimento sull'uso CMU Sphinx 4. Sfinge richiede il seguente formato:Convertire file audio per CMU Sphinx 4 ingresso

  • 16 khz
  • 16 bit
  • mono
  • little-endian

I miei file sono qualcosa come 44100 kHz, 32 bit stereo i file mp3. Ho provato a utilizzare Tritonus e quindi la sua versione aggiornata JavaZoom, per convertire utilizzando il codice da bakuzen. Tuttavia, AudioSystem.getAudioInputStream(File) getta un UnsupportedAudioFileException e non sono stato in grado di capire perché, così sono andato avanti.

Ora sto provando ffmpeg. Il comando ffmpeg -i input.mp3 -ac 1 -ab 16 -ar 16000 output.wav sembra come dovrebbe fare il trucco (tranne per little endian), ma quando controllo l'output con Audacity, lo etichetta ancora come "float a 32 bit". Il comando che ho trovato su this site utilizza anche -acodec pcm_s16le, che dal suo nome sembra essere in uscita 16 bit little endian; comunque, Audacity mi dice ancora che l'output è 32 bit float.

Qualcuno può dirmi come convertire i file audio nel formato richiesto da CMU Sphinx 4?

risposta

13

Avete effettivamente provato l'output da ffmpeg in CMU Sphinx 4? Il float a 32 bit è probabilmente il formato di campionamento predefinito in Audacity (Modifica> Preferenze> Qualità). Sto indovinando che converte qualsiasi file importato in queste impostazioni, quindi potrebbe non riportare i parametri del file attuale, ma forse il file di lavoro in Audacity.

Rimuovi -ab 16. Questo dovrebbe dire al codificatore di usare 16 bit/se ffmpeg lo ignorerà comunque per pcm_s16le. Così il vostro comando sarà simile:

ffmpeg -i input.mp3 -acodec pcm_s16le -ac 1 -ar 16000 output.wav 

Per convertire tutti i file MP3 in una directory in Linux:

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

o Windows:

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

È possibile visualizzare informazioni sui file con file, ffmpeg, ffprobe, mediainfo tra le altre utilità:

$ 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 
+0

Grazie, questo sembra essere il formato corretto. I miei file di output non funzionano ancora con Sphinx 4, comunque. Potrebbe dover chiedere direttamente a @Nikolay Shmyrev ... –

+0

Il formato era giusto. Il mio file aveva solo zero regioni di livello energetico, quindi una volta aggiunto il dither al frontend, tutto funzionava alla grande. –

+0

@NateGlenn Non so cosa significhi, ma è bello sapere che hai funzionato. – LordNeckbeard

Problemi correlati