Конвертировать аудио файлы для ввода CMU Sphinx 4

У меня есть большая партия файлов, которые я хотел бы запустить распознавание при использовании CMU Sphinx 4. Для Sphinx требуется следующий формат:

  • 16 кГц
  • 16 бит
  • моно
  • прямой порядок байтов

Мои файлы - что-то вроде 44100 кГц, 32-битные стереофонические mp3-файлы. Я попытался использовать Tritonus, а затем его обновленную версию JavaZoom, чтобы конвертировать, используя код из bakuzen. Тем не мение, AudioSystem.getAudioInputStream(File) бросает UnsupportedAudioFileExceptionи я не смог понять почему, поэтому я пошел дальше.

Сейчас я пытаюсь ffmpeg. Команда ffmpeg -i input.mp3 -ac 1 -ab 16 -ar 16000 output.wav Похоже, что это должно сработать (за исключением байтов с прямым порядком байтов), но когда я проверяю вывод с помощью Audacity, он по-прежнему помечает его как "32-разрядный float". Команда, которую я нашел на этом сайте, также использует -acodec pcm_s16leкоторый из своего имени, похоже, выводит 16-битный порядок байтов; тем не менее, Audacity все еще говорит мне, что результат 32 bit float,

Может кто-нибудь сказать мне, как конвертировать аудио файлы в формат, требуемый CMU Sphinx 4?

1 ответ

Решение

Вы на самом деле пробовали вывод ffmpeg в CMU Sphinx 4? 32-разрядный формат с плавающей запятой, вероятно, является форматом выборки по умолчанию в Audacity ("Правка"> "Настройки"> "Качество"). Я предполагаю, что он преобразует любой импортированный файл в эти настройки, поэтому он может не сообщать о параметрах реального файла, но, возможно, рабочий файл в Audacity.

Удалить -ab 16, Это будет указывать кодировщику использовать 16 бит / с, и ffmpeg будет игнорировать его для pcm_s16le в любом случае. Итак, ваша команда будет выглядеть так:

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

Чтобы преобразовать все mp3-файлы в каталоге в Linux:

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"

Вы можете увидеть информацию о файле с 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
Другие вопросы по тегам