чтение 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 данных?

благодаря

Ваш файл не является файлом 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

https://www.gamedev.net/articles/programming/general-and-gameplay-programming/loading-a-wave-file-r709

http://www.topherlee.com/software/pcm-tut-wavformat.html

http://www.labbookpages.co.uk/audio/javaWavFiles.html

http://www.johnloomis.org/cpe102/asgn/asgn1/riff.html

http://nagasm.org/ASL/sound05/