Преобразование аудиофайлов .wav в файлы .h5 (hdf) с использованием SciPy и PyTables

Мне нужно преобразовать аудио файлы .wav в формат .hf или .npz, так как они являются поддерживаемым форматом для обучения систем перевода речи с FBK-Fairseq-ST (https://github.com/mattiadg/FBK-Fairseq-ST). Следующий сценарий предназначен для запуска с терминала как python script.py /path/file.wav и записи нового файла hdf, в котором хранится информация файла .wav в той же папке.

from scipy.io import wavfile
import tables
import numpy
import sys

#read data from wav
#fs, data = wavfile.read('/home/vittoria/Documents/corpus-test/01.wav')
fs, data = wavfile.read(sys.argv[1])

#ouput
folder=sys.argv[1][:-6]
name= sys.argv[1][-6:-3]+"h5"

#save_to acoular h5 format
acoularh5 = tables.open_file(folder+name, mode = "w", title = name)
acoularh5.create_earray('/','time_data', atom=None, title='', filters=None, \
                         expectedrows=100000, chunkshape=[256,64], \
                         byteorder=None, createparents=False, obj=data)
acoularh5.set_node_attr('/time_data','sample_freq', fs)
acoularh5.close()

Однако возникает ошибка значения: ValueError: ранги shape ((0,)) и chunkshape ((256, 64)) должны совпадать.

ввод из терминала: python 2hf.py 01_83.wav" (относительный путь к файлу python script.py)

Ошибка трассировки. Обратите внимание, что в «environments/hdf/lib/python3.6/» «hdf» — это корневая папка виртуальной среды. «/tables/» — это папка для таблиц пакета 3.6.1 (https://pypi.org/project/tables/), установленный с помощью команды pip в виртуальной среде.

Traceback (most recent call last):
  File "2hf.py", line 18, in <module>
    byteorder=None, createparents=False, obj=data)
  File "/home/giuseppe/environments/hdf/lib/python3.6/site-packages/tables/file.py", line 1384, in create_earray
    track_times=track_times)
  File "/home/giuseppe/environments/hdf/lib/python3.6/site-packages/tables/earray.py", line 160, in __init__
    track_times)
  File "/home/giuseppe/environments/hdf/lib/python3.6/site-packages/tables/carray.py", line 212, in __init__
    (shape, chunkshape))
ValueError: the shape ((0,)) and chunkshape ((256, 64)) ranks must be equal.
Closing remaining open files:01_83.h5...done


person gdc    schedule 08.05.2020    source источник


Ответы (1)


У меня была такая же ошибка, и я решил ее, изменив скрипт таким образом

from scipy.io import wavfile
import tables
import numpy
import sys

#read data from wav
#fs, data = wavfile.read('/home/vittoria/Documents/corpus-test/01.wav')
fs, data = wavfile.read(sys.argv[1])

#ouput
folder=sys.argv[1][:-6]
name= sys.argv[1][-6:-3]+"h5"

#save_to acoular h5 format
acoularh5 = tables.open_file(folder+name, mode = "w", title = name)
acoularh5.create_earray('/','time_data', atom=None, title='', filters=None, \
                         expectedrows=100000, \
                         byteorder=None, createparents=False, obj=data)
acoularh5.set_node_attr('/time_data','sample_freq', fs)
acoularh5.close()

Я просто удалил эту часть , chunkshape=[256,64] :-)

Надеюсь, это помогло.

person Salomon Kabongo    schedule 01.11.2020