чтение WAV-файла из базы данных TIMIT в python
Я пытаюсь прочитать wav-файл из базы TIMIT в python, но я получаю сообщение об ошибке:
Когда я использую волну:
wave.Error: file does not start with RIFF id
Когда я использую scipy:
ValueError: File format b'NIST'... not understood.
и когда я использую librosa, программа застряла. Я попытался преобразовать его в wav с помощью sox:
cmd = "sox " + wav_file + " -t wav " + new_wav subprocess.call(cmd, shell=True)
и это не помогло. Я видел старый ответ, ссылающийся на пакет scikits.audiolab, но похоже, что он больше не поддерживается.
Как я могу прочитать этот файл, чтобы получить ndarray данных?
благодаря
- SciPy wavfile: музыка, мусор?
- Pygame не может открыть звуковой файл
- Выполнение события нажатия клавиши при воспроизведении звука в python (tkinter)
- Кросс-платформенное воспроизведение аудио в Python
- PyAudio, как определить частоту и амплитуду во время записи?
Ваш файл не является файлом WAV. По-видимому, это файл NIST SPHERE. На веб-странице НРС : «Многие корпорации LDC содержат речевые файлы в формате NIST SPHERE». Согласно описанию формата файла NIST , первые четыре символа файла – NIST
. Это то, что говорит вам скудная ошибка: он не знает, как читать файл, начинающийся с NIST
.
Я подозреваю, что вам придется преобразовать файл в WAV, если вы хотите прочитать файл с любой из библиотек, которые вы пытались. Чтобы принудительно преобразовать в WAV с помощью программы sph2pipe
, используйте параметр команды -f wav
(или, что то же самое, -f rif
), например
sph2pipe -f wav input.sph output.wav
выпустите это из командной строки, чтобы проверить его wav-файл … или нет
xxd -b myaudiofile.wav | head
если его wav-формат будет казаться чем-то вроде
00000000: 01010010 01001001 01000110 01000110 10111100 10101111 RIFF.. 00000006: 00000001 00000000 01010111 01000001 01010110 01000101 ..WAVE 0000000c: 01100110 01101101 01110100 00100000 00010000 00000000 fmt .. 00000012: 00000000 00000000 00000001 00000000 00000001 00000000 ...... 00000018: 01000000 00011111 00000000 00000000 01000000 00011111 @[email protected] 0000001e: 00000000 00000000 00000001 00000000 00001000 00000000 ...... 00000024: 01100100 01100001 01110100 01100001 10011000 10101111 data.. 0000002a: 00000001 00000000 10000001 10000000 10000001 10000000 ...... 00000030: 10000001 10000000 10000001 10000000 10000001 10000000 ...... 00000036: 10000001 10000000 10000001 10000000 10000001 10000000 ......
обратите внимание, что wav-файл начинается с символов RIFF, который является обязательным индикатором того, что файл использует wav-кодек … если ваша система (я на Linux) не имеет выше утилиты командной строки: xxd, то используйте любой hex-редактор, такой как wxHexEditor, для аналогично изучите ваш wav-файл, чтобы подтвердить, что вы видите RIFF … если нет RIFF, то его просто не wav-файл
Вот подробные сведения о спецификациях формата wav
http://soundfile.sapp.org/doc/WaveFormat/
http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html
http://unusedino.de/ec64/technical/formats/wav.html
http://www.drdobbs.com/database/inside-the-riff-specification/184409308
http://www.topherlee.com/software/pcm-tut-wavformat.html
http://www.labbookpages.co.uk/audio/javaWavFiles.html
- Вывод года из дня недели и даты с датой и временем python
- Pythonic способ сопоставления строки, если она содержится в наборе строк
- Как обрабатывать JavaScript blob в python?
- Воспроизвести mp3-файл, не используя устройство вывода по умолчанию (воспроизведение) в Python
- одновременно воспроизводит несколько файлов wav, для драм-машины в Python
- SciPy: чтение маркеров и меток в .wav-файле
- Добавление и удаление источников звука в / из конвейера GStreamer на ходу
- Воспроизведение звуков барабанов в библиотеке Python Music21
- Как программно изменить объем в Ubuntu
- Потоковое распознавание речи Google на аудиопотоке Python
- matplotlib-Y и ось X меняются местами