我正在尝试创建一个由从WAV文件生成的Numpy数组组成的数据集。我可以将所有单独的WAV文件放入Numpy数组中,但我不能将它们合并成一个Numpy数组,因为它们的形状都略有不同。第一个维度对所有文件都是相同的,但第二个维度(帧数)略有不同。
要将WAV转换为Numpy,我使用librosa.stft。我能想到的唯一方法是用零填充每个Numpy以匹配最大帧数。这需要我迭代每个数组(3000)和每个数组中的每一行来填充每一行。一定有更好的方法。
这是通过WAV文件迭代的代码,转换为声谱图,然后保存为Numpy数组
def process(directory):
# Load file
for file in os.listdir(directory):
f = os.path.join(directory, file).replace("\\", r"/")
x, sr = librosa.load(f, sr=22050)
# Covert to spectrogram
X = librosa.stft(x)
print(X.shape)
spectrgoram = np.abs(X)
# Save file
np.save(f"C:/Python/GANs/Sound_Digit_Gan/Data2/{file}",spectrgoram)
process(directory)
由于X的形状被打印出来,这些是值的几个示例:(1025,二十三)(1025,二十九)(1025,二十六)(1025,三十四)(1025,二十六)(1025,二十七)(1025,四十)(1025,二十二)(1025,二十五)(1025,二十四)(1025,三十五)
然后,当我尝试使用以下代码创建列车数据集时:
directory = "C:/Python/GANs/Sound_Digit_Gan/Data2/"
train = []
for f in os.listdir(directory):
file = os.path.join(directory, f).replace("\\", r"/")
#print(file)
array = np.load(file)
#print(array.shape)
train.append(array)
train = np.array(train)
我得到错误:ValueError: could not broadcast input array from shape (1025,13) into shape (1025,)
我相信这是因为数组的形状不完全相同。如何才能得到相同的形状,而又不丢失音频信号数据?
1条答案
按热度按时间w46czmvw1#
在音频机器学习中,将时间维度沿着的大小标准化是一个常见的预处理步骤,因此librosa库提供了一个方便的函数:librosa.util.fix_length。