aubio可以用来检测只有节奏的片段吗



aubio有办法检测音频中缺少音调元素的部分吗?我测试了一首一开始有16秒节奏的音乐,但所有的aubiopitch和aubionotes算法似乎都能在节奏部分检测到音调。它能以某种方式被调谐以区分音调和非音调的开始吗?或者有没有相关的图书馆可以做到这一点?

过去几天一直很忙,但今天开始调查。。。

我想这需要一段时间才能完善,但我想我会给你一些想法和一些我已经开始研究的代码来攻击它!

首先,伪代码是设计初始方法的好方法。

1/使用import matplotlib.pyplot as plt对音频进行频谱分析,绘制各种fft和音频信号。

2/CCD_ 2,用于基本的类阵列结构处理。

(我知道这不仅仅是伪代码,但嘿:-(

3/plt.specgram创建音频的频谱图。除了它创建的图像(可以用来开始手动解构音频文件(外,它还返回4个结构。

例如

ffts,freqs,times,img = plt.specgram(signal,Fs=44100)

ffts是二维阵列,其中列是时间段(行(的ffts(快速傅立叶变换(。

普通的specgram分析256个样本长的时间段,每次前进128个样本。

这以相当快的速率提供了非常低分辨率的频率阵列。

当以或多或少10赫兹的频率播放时,音符会合并为一个声音,我决定使用specgram选项将音频划分为4096个样本长度(约10赫兹(,每2048个样本(即每秒20次(前进一步。

这提供了一个不错的频率分辨率,并且相隔20秒的时间段比人们感知单个音符的速度更快。

这意味着按如下方式调用specgram

plt.specgram(signal,Fs=44100,NFFT=4096,noverlap=2048,mode='magnitude')

(注意模式-这似乎给了我0-0.1之间的振幅:我有一个问题,fft没有给我与音频信号相同的振幅(你可能已经看到我发布的问题(。但我们来了。。。

4/接下来,我决定清除返回的ffts中的噪声。这意味着我们可以专注于幅度适中的freqs,并消除ffts中始终存在的噪声(根据我的经验(。

这是我的功能:

def gate(signal,minAmplitude):
return np.array([int((((a-minAmplitude)+abs(a-minAmplitude))/2) > 0) * a for a in signal])

看起来有点疯狂——我相信一个称职的数学家可以想出更有效的方法——但这是我能发明的最好的方法。它将幅度小于minAmplitude的任何频率归零。

这是从plt.specgram返回的ffts调用它的相关代码,如下所示,我的函数更为复杂,因为它是类的一部分,并且有它引用的其他函数-但这应该足够了:

def fft_noise_gate(minAmplitude=0.001,check=True):
'''
zero the amplitudes of frequencies 
with amplitudes below minAmplitude 
across self.ffts
check - plot middle fft just because!
'''       
nffts = ffts.shape[1]
gated_ffts = []
for f in range(nffts):
fft = ffts[...,f]
# Anyone got a more efficient noise gate formula? Best I could think up!
fft_gated = gate(fft,minAmplitude)
gated_ffts.append(fft_gated)
ffts = np.array(gated_ffts)
if check:
# plot middle fft just to see!
plt.plot(ffts[int(nffts/2)])
plt.show(block=False)
return ffts

这应该会给你一个开始——我仍在努力,当我有进一步的想法时会给你回复——但如果你有任何想法,请分享。

无论如何,我的策略是:

1/找到峰值(任何声音的开始(,然后2/寻找一致上升和下降的频率范围。

3/将它们区分为单独的乐器(更具体地说是声源(,并绘制其时间和振幅,以创建您的分析(分数(。

希望你玩得开心——我知道我是。

正如我所说的任何想法。。。

问候

Tony

使用频谱分析仪检测具有高振幅的部分。如果你编程,你可以取每个部分,对出现的频率(和振幅(求平均值,让你了解创建振幅峰值所涉及的仪器。

希望这能有所帮助——如果你正在使用python,我可以给你一些如何编程的建议!?

问候

Tony

相关内容

  • 没有找到相关文章

最新更新