2012-12-03 40 views
5

Tôi có một lô lớn của file tôi muốn chạy công nhận về việc sử dụng CMU Sphinx 4. Sphinx đòi hỏi các định dạng sau:Chuyển đổi file audio cho CMU Sphinx 4 đầu vào

  • 16 khz
  • 16 bit
  • mono
  • ít về cuối nhỏ

file của tôi là một cái gì đó giống như 44100 khz, 32 bit stereo file mp3. Tôi đã thử sử dụng Tritonus, và sau đó là phiên bản cập nhật JavaZoom, để chuyển đổi sử dụng mã từ bakuzen. Tuy nhiên, AudioSystem.getAudioInputStream(File) ném một số UnsupportedAudioFileException và tôi không thể tìm ra lý do tại sao, vì vậy tôi đã tiếp tục.

Bây giờ tôi đang thử ffmpeg. Các lệnh ffmpeg -i input.mp3 -ac 1 -ab 16 -ar 16000 output.wav có vẻ như nó nên làm các trick (trừ ít endian), nhưng khi tôi kiểm tra đầu ra với Audacity, nó vẫn còn nhãn nó là "32-bit float". Lệnh tôi tìm thấy trên this site cũng sử dụng -acodec pcm_s16le, mà từ tên của nó dường như được xuất ra 16 bit chút endian; tuy nhiên, Audacity vẫn cho tôi biết đầu ra là 32 bit float.

Bất cứ ai có thể cho tôi biết cách chuyển đổi tệp âm thanh sang định dạng theo yêu cầu của CMU Sphinx 4?

Trả lời

13

Bạn có thực sự thử đầu ra từ ffmpeg trong CMU Sphinx 4 không? Phao 32 bit có lẽ là định dạng lấy mẫu mặc định của bạn trong Audacity (Chỉnh sửa> Tùy chọn> Chất lượng). Tôi đoán nó chuyển đổi bất kỳ tập tin được nhập khẩu để các thiết lập này, vì vậy nó có thể không được báo cáo các thông số của tập tin thực tế, nhưng có lẽ các tập tin làm việc trong Audacity.

Xóa -ab 16. Điều này sẽ hướng dẫn các bộ mã hóa để sử dụng 16 bit/s và ffmpeg sẽ bỏ qua nó cho pcm_s16le anyway. Vì vậy, lệnh của bạn sẽ trông giống như:

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

Để chuyển đổi tất cả các file mp3 trong một thư mục trong Linux:

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

Hoặc Windows:

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

Bạn có thể xem thông tin tập tin với file, ffmpeg, ffprobe, mediainfo trong số các tiện ích khác:

$ 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

Cảm ơn bạn, đây có vẻ là định dạng đúng. Tuy nhiên, các tệp đầu ra của tôi vẫn không chạy với Sphinx 4. Có thể phải hỏi @Nikolay Shmyrev trực tiếp ... –

+0

Định dạng đã đúng. Tập tin của tôi chỉ không có vùng năng lượng bằng không, vì vậy một khi tôi thêm hoà sắc vào lối vào, mọi thứ hoạt động tốt. –

+0

@NateGlenn Tôi không biết điều đó có nghĩa là gì, nhưng tốt để biết bạn đã làm việc đó. – LordNeckbeard