Python 查找wav文件中播放的音符的时间戳

Python 查找wav文件中播放的音符的时间戳,python,audio,onset-detection,Python,Audio,Onset Detection,假设我们有一个wav文件,其中记录了一些吉他音乐。声音是非常干净的,没有额外的声音,只有吉他本身,可能节拍器滴答声 找到Python中播放的每个音符(或和弦)的时间戳的最佳方法是什么?我不需要识别便笺本身,只需要识别它发生时的时间戳 我以前从未做过这种事情,所以我有点困惑。我在维基百科上读到关于短时傅里叶变换的文章,它看起来很有希望,但我找不到任何相关的例子。非常感谢关于如何开始的任何帮助/提示。一般问题被调用,您可以尝试许多方法。我将提供一个非常简单的解决方案,可能不适用于您的用例: from

假设我们有一个wav文件,其中记录了一些吉他音乐。声音是非常干净的,没有额外的声音,只有吉他本身,可能节拍器滴答声

找到Python中播放的每个音符(或和弦)的时间戳的最佳方法是什么?我不需要识别便笺本身,只需要识别它发生时的时间戳


我以前从未做过这种事情,所以我有点困惑。我在维基百科上读到关于短时傅里叶变换的文章,它看起来很有希望,但我找不到任何相关的例子。非常感谢关于如何开始的任何帮助/提示。

一般问题被调用,您可以尝试许多方法。我将提供一个非常简单的解决方案,可能不适用于您的用例:

from scipy.io import wavfile
from scipy.signal import argrelmax
from matplotlib.mlab import specgram

sr, x = wavfile.read(path)                                    # read in a mono wav file
spec, freqs, time = specgram(x, NFFT=4096, Fs=sr, mode='psd') # compute power spectral density spectogram
spec2 = np.diff(spec, axis=1)                                 # discrete difference in each frequency bin
spec2[spec2<0] = 0                                            # half-wave rectification
diff = np.sum(spec2, axis=0)                                  # sum positive difference in each time bin

for peak in argrelmax(diff)[0]:                               # find peaks
    print("onset between %f and %f." % (time[peak], time[peak+1]))
从scipy.io导入wavfile
从scipy.signal导入argrelmax
从matplotlib.mlab导入specgram
sr,x=wavfile.read(path)#在mono-wav文件中读取
spec,freqs,time=specgram(x,NFFT=4096,Fs=sr,mode='psd')#计算功率谱密度specgram
spec2=np.差异(spec,轴=1)#每个频率单元中的离散差异

spec2[spec2Librosa看起来很有前途。谢谢!看起来确实很有趣。谢谢!这对我来说是一个很好的起点。