Как читать несколько файлов WAV в Python, и преобразовать в NumPy массивов для построения - PullRequest
0 голосов
/ 26 сентября 2018

Мне нужно прочитать несколько волновых файлов с именами chunk1.wav, chunk2.wav ... в директории моего проекта и преобразовать их в массивы numpy для построения.Я могу сделать это для одного файла WAV, преобразовать его в NumPy и построить его с помощью Matplotlib, но я не могу сделать это для массива файлов WAV.

Я искал во всем, как импортироватьмассив файлов WAV с функцией .read () из библиотеки scipy.Я пытался использовать массив строк, но функция read () не «понимает» переменную как параметр, не говоря уже о массиве строк.Любой совет о том, как я могу добиться этого многократного чтения WAV?

import pyaudio
import wave
from matplotlib import pyplot as plt
import numpy as np
from pydub import AudioSegment
from pydub.silence import split_on_silence
from scipy.io.wavfile import read

no_of_files = 15
file_name = []

for i in range(0, no_of_files):
    file_name.append("chunk{0}.wav".format(i))

a = read(file_name[5]) #test to see if it works for one file
a = np.array(a[1],dtype=float)
plt.plot(a)
plt.show()

ошибка, которую я получаю:

Файл "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7 / site-packages / scipy / io / wavfile.py ", строка 168, в _read_riff_chunk" понял. ". Format (repr (str1))) ValueError: Формат файла '' ... не понят.

1 Ответ

0 голосов
/ 26 сентября 2018

Глядя на внутренности scipy, это вызвано тем, что подпись файла непонятна, из полученного сообщения об ошибке видно, что подпись файла отсутствует (''), или есть какая-то другая проблема чтения данных из файла:

def _read_riff_chunk(fid):
    str1 = fid.read(4)  # File signature
    if str1 == b'RIFF':
        is_big_endian = False
        fmt = '<I'
    elif str1 == b'RIFX':
        is_big_endian = True
        fmt = '>I'
    else:
        # There are also .wav files with "FFIR" or "XFIR" signatures?
        raise ValueError("File format {}... not "
"understood.".format(repr(str1)))

Я не вижу схожих ограничений с первого взгляда, используя библиотеку python wave, поэтому, возможно, попробуйте прочитать их с помощью и затем преобразовать данные в массив Numpy

...