正如标题所述,我在将 PyDub AudioSegment 转换为 NumPy 数组并返回时遇到了困难。我知道如何将 PyDub AudioSegment 转换为 NumPy 数组,并且对 如何将 NumPy 数组转换为 PyDub AudioSegment 有一个模糊的想法,但我学到的方法多种多样,并且不与彼此。那么,我如何可靠地将 AudioSegment 获取到数组并返回?
这是我用来获取数组的代码:
audio= AudioSegment.from_file("/file/path/sillysong.wav")
data = audio.get_array_of_samples()
data = np.array(data)
data = data.reshape(audio.channels, -1, order='F')
data
我不知道如何取回这种形式的数组。对于上下文,我正在使用 TensorFlow,并且需要数据采用数组形式。感谢您的帮助! (我是一名新编码员,所以可能明显缺少一些东西。)
你的做法是正确的。我有一个 LowRider.wav 的示例,我使用 pydub 读取它:
from pydub import AudioSegment
%matplotlib notebook
import matplotlib.pyplot as plt
import numpy as np
audio = AudioSegment.from_file("LowRider.wav")
data = np.array(audio.get_array_of_samples())
data = data.reshape(audio.channels, -1, order='F')
print("Shape of the converted numpy array:", data.shape)
frame_rate = audio.frame_rate
time_vector = np.linspace(0, len(data[0,:])/frame_rate, num=len(data[0,:]))
plt.figure()
plt.plot(time_vector, data[0,:], "-", label = "Channel 1")
plt.plot(time_vector, data[1,:], "--", label = "Channel 2")
plt.legend()
plt.xlabel("Time (s)")
plt.ylabel("Signal")
plt.show()
这将为您提供
data
,其中包含来自两个通道的数据。这是两人的剧情:
要转换回
.wav
,请使用以下代码,我提供了一个导出供您测试转换是否成功:
reshaped_data = data.reshape(-1, order='F')
new_audio = AudioSegment(
reshaped_data.tobytes(),
frame_rate=audio.frame_rate,
sample_width=reshaped_data.dtype.itemsize,
channels=audio.channels
)
new_audio.export("LowRider_Exported.wav", format="wav")
更改文件名并让我知道它是否有效:D