蟒蛇 | pydub:如何将 wav 样本从 np.array 而不是 wav 文件加载到 pydub 中?

Ole*_*kov 5 python arrays numpy wav pydub

如何将音频np.array文件加载到 PyDub 库中?目前,我使用AudioSegment.from_wav(file_path),但如果我已经将 wav 文件加载为 numpy 数组,则不方便:

sample_rate, wav_sample = scipy.io.wavfile.read(file_path)
Run Code Online (Sandbox Code Playgroud)

更新:我的 wav 文件都是 16 位、单通道。

fil*_*ppo 3

好吧,对这个答案持保留态度,因为我不太了解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)
Run Code Online (Sandbox Code Playgroud)

假设 16 位单通道样本,它似乎可以正常工作。

不同的样本宽度应该很容易从数组大小推断出来(类似wav_sample.nbytes() / len(wav_sample)应该做的事情)。

请自己做一些测试并告诉我们!

编辑:多个通道有点棘手,pydub据我所知,需要交织通道,而 scipy 将它们作为多列返回。但使用 numpy 应该很容易以pydub所需的格式重塑数据,如下所示(未经测试)?

np.vstack((wav_sample[:,0],wav_sample[:,1])).reshape((-1,), order='F') 
Run Code Online (Sandbox Code Playgroud)