【问题标题】:Python | pydub: how to load wav sample into pydub from np.array instead of a wav file?蟒蛇 | pydub:如何将 wav 样本从 np.array 而不是 wav 文件加载到 pydub 中?
【发布时间】:2018-06-11 19:10:45
【问题描述】:
如何将音频np.array 文件加载到 PyDub 库中?目前,我使用AudioSegment.from_wav(file_path),但不方便,如果我已经将wav文件加载为numpy数组:
sample_rate, wav_sample = scipy.io.wavfile.read(file_path)
更新:我的 wav 文件都是 16 位单通道的。
【问题讨论】:
标签:
python
arrays
numpy
wav
pydub
【解决方案1】:
好的,对这个答案持保留态度,因为我不知道pydub 足以查看它是否正常工作,但是您应该能够从提供它需要的所有参数的类初始化程序中做到这一点:
sample_rate, wav_sample = scipy.io.wavfile.read(file_path)
segment = AudioSegment(data=wav_sample.tobytes(),
sample_width=2,
frame_rate=sample_rate, channels=1)
假设是 16 位单通道样本,它似乎可以正常工作。
不同的样本宽度应该很容易从数组大小中推断出来(wav_sample.nbytes() / len(wav_sample) 应该这样做)。
请自己做一些测试并告诉我们!
编辑:多通道有点棘手,据我所知pydub 想要交织通道,而 scipy 将它们作为多列返回。但是使用 numpy 应该很容易以 pydub 想要的格式重塑数据,类似于以下(未测试)?
np.vstack((wav_sample[:,0],wav_sample[:,1])).reshape((-1,), order='F')