如何确保不同音频文件的帧大小一致?
how do I ensure consistent frame size amongst separate audio files?
我目前正在尝试回归网络以提取 MFCC 特征。网络的输入是采样和成帧的音频文件,我似乎在做这件事时遇到了一些问题,或者以某种方式做它以获得一致的输出——这意味着一致的帧大小,因为它不能作为输入对于神经网络。
我目前正在对每个音频文件进行采样和取景:
def load_sound_files(file_paths , data_input):
raw_sounds = []
data_output = []
for fp in file_paths:
y,sr = librosa.load(fp)
X = librosa.util.frame(y)
raw_sounds.append(X)
return raw_sounds
这意味着每个音频都附加到一个列表中,每个列表中都有一个包含框架音频文件的数组。
[array([[frame],[frame],...,[frame]],dtype=float32), ...]
我试过打印这个
print raw_sounds[0].shape
print raw_sounds[1].shape
得到了这个结果
(2048, 121)
(2048, 96)
但为什么我会得到这个结果?关于取景选项,我没有做任何更改,那么它们为什么不同?
如果没有办法保持一致,那么在输入不一致的情况下,人们将如何训练能够做到这一点的神经网络?
音频文件是不同长度的序列。
有多种方法可以处理可变长度输入。您通常将固定维度的输入多次馈送到神经网络,每个音频帧一次。然后,网络使用 RNN、LSTM 或 seq2seq(不断变化,但在 contrib/seq2seq 中)等架构从序列中学习。您还可以使用简单的 DNN(前馈)架构。
你的结果
(2048, 121)
(2048, 96)
给出帧长和帧数。所以帧大小实际上是一致的 2048 个样本长。两者之间的唯一区别是,第一个声音文件有 121 帧,第二个声音文件有 96 帧。
我目前正在尝试回归网络以提取 MFCC 特征。网络的输入是采样和成帧的音频文件,我似乎在做这件事时遇到了一些问题,或者以某种方式做它以获得一致的输出——这意味着一致的帧大小,因为它不能作为输入对于神经网络。
我目前正在对每个音频文件进行采样和取景:
def load_sound_files(file_paths , data_input):
raw_sounds = []
data_output = []
for fp in file_paths:
y,sr = librosa.load(fp)
X = librosa.util.frame(y)
raw_sounds.append(X)
return raw_sounds
这意味着每个音频都附加到一个列表中,每个列表中都有一个包含框架音频文件的数组。
[array([[frame],[frame],...,[frame]],dtype=float32), ...]
我试过打印这个
print raw_sounds[0].shape
print raw_sounds[1].shape
得到了这个结果
(2048, 121)
(2048, 96)
但为什么我会得到这个结果?关于取景选项,我没有做任何更改,那么它们为什么不同?
如果没有办法保持一致,那么在输入不一致的情况下,人们将如何训练能够做到这一点的神经网络?
音频文件是不同长度的序列。
有多种方法可以处理可变长度输入。您通常将固定维度的输入多次馈送到神经网络,每个音频帧一次。然后,网络使用 RNN、LSTM 或 seq2seq(不断变化,但在 contrib/seq2seq 中)等架构从序列中学习。您还可以使用简单的 DNN(前馈)架构。
你的结果
(2048, 121)
(2048, 96)
给出帧长和帧数。所以帧大小实际上是一致的 2048 个样本长。两者之间的唯一区别是,第一个声音文件有 121 帧,第二个声音文件有 96 帧。