2012-12-03 14 views
5

Mam dużą partię plików chciałbym uruchomić na uznanie za pomocą CMU Sphinx 4. Sphinx wymaga następującego formatu:Konwersja plików audio do CMU Sphinx 4 wejścia

  • 16 khz
  • 16 bit
  • mono
  • ostrokońcej

Moje pliki są czymś jak 44100 kHz, 32 bit stereo plików mp3. Próbowałem użyć Tritonus, a następnie jego zaktualizowanej wersji JavaZoom, aby przekonwertować za pomocą kodu z bakuzen. Jednak AudioSystem.getAudioInputStream(File) rzuca UnsupportedAudioFileException, a ja nie byłem w stanie dowiedzieć się dlaczego, więc ruszyłem dalej.

Teraz próbuję ffmpeg. Polecenie ffmpeg -i input.mp3 -ac 1 -ab 16 -ar 16000 output.wav wygląda na to, że powinno wystarczyć (z wyjątkiem małego endianina), ale kiedy sprawdzam wyjście z Audacity, wciąż oznacza to jako "32-bitowy float". Polecenie znalezione na this site również używa -acodec pcm_s16le, który od swojej nazwy wydaje się wyprowadzać 16-bitowy mały endian; jednak Audacity nadal mówi mi, że wyjście to 32 bit float.

Czy ktoś może mi powiedzieć, jak konwertować pliki audio do formatu wymaganego przez CMU Sphinx 4?

Odpowiedz

13

Czy rzeczywiście wypróbowałeś wyjście z ffmpeg w CMU Sphinx 4? Pętla 32-bitowa jest prawdopodobnie domyślnym formatem próbkowania w Audacity (Edycja> Preferencje> Jakość). Zgaduję, że konwertuje on dowolny importowany plik do tych ustawień, więc może nie raportować parametrów rzeczywistego pliku, ale może działającego pliku w Audacity.

Usuń -ab 16. Poleciłoby to enkoderowi użycie 16 bitów na sekundę, a ffmpeg i tak zignoruje to dla pcm_s16le. Więc polecenie będzie wyglądać następująco:

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

Aby przekonwertować wszystkie pliki mp3 w katalogu w systemie Linux:

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

lub Windows:

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

można zobaczyć informacje o pliku z file, ffmpeg, ffprobe, mediainfo między innymi użytecznościami:

$ 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

Dziękujemy, wydaje się, że jest to poprawny format. Moje pliki wyjściowe nadal nie działają z Sphinx 4. Może będzie musiał zapytać @Nikolay Shmyrev bezpośrednio ... –

+0

Format był właściwy. Mój plik miał tylko regiony o zerowym poziomie energii, więc kiedy dodałem dither do interfejsu, wszystko działało świetnie. –

+0

@NateGlenn Nie wiem, co to znaczy, ale dobrze wiedzieć, że to działa. – LordNeckbeard

Powiązane problemy