如何读取 python 中的多个 wav 文件,并转换为 numpy 数组进行绘图

how to read multiple wav files in python, and convert to numpy arrays to plot

我需要在我的项目目录中读取多个名为chunk1.wav、chunk2.wav...的wave文件,并将它们转换成numpy数组进行绘图。我可以对单个 wav 文件执行此操作,将其转换为 numpy 并使用 matplotlib 绘制它,但无法对一组 wav 文件执行此操作。

我搜索了关于如何使用 scipy 库中的 .read() 函数导入一组 wav 文件的方法。我尝试使用字符串数组,但 read() 函数没有 "understand" 变量作为参数,更不用说字符串数组了。 关于如何实现多次 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 "understood.".format(repr(str1))) ValueError: 文件格式 ''... 不理解。

查看 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 数组