我已经建立了一个U-Net模型来执行多音轨音频的混音,为此我使用了音轨的20 s剪辑(转换成声谱图)作为训练模型的输入。然而训练过程非常长,所以我认为最好从每个音轨中提取2s剪辑来训练模型。
数据按8个股骨柄组织(单个乐器音轨)作为输入,并将单个混合的茎作为目标(都有sr=44100
)。我想找到混合轨迹中最有活力的2s部分,并裁剪所有轨迹(输入和混合)这一特定的2s部分。我主要使用librosa准备数据,但我我不确定使用什么函数来查找声音最大(我知道这是不明确的)的88200采样段(2s)的起始点。
2条答案
按热度按时间9wbgstp71#
如果我能很好地理解这个问题,下面的代码可能会作为一个有用的起点,它接收一个声音文件,并使用
librosa.feature.rms
定位它“最响”的位置(正如您在问题中提到的,定义哪个位最响并不完全简单),然后从原始声音文件中以该点为中心剪切出一个2秒的切片:idfiyjo82#
我发现了一个很好的窍门
我发现它相当快。希望它能帮助一些人!
编辑:说明
寻找具有最大RMS的长度为
target_length
的窗口与寻找具有最大平方和的窗口相同。如果我们计算平方和的累积值cs = np.cumsum(audio ** 2)
,那么cs[x + target_length] - cs[x]
结果是窗口[x: x+target_length]
上的平方和。数组cs[target_length:] - cs[:-target_length]
正好包含x
从0到len(audio) - target_length
的这个结果。我们拿着argmax,瞧!