3

いくつかのギター音楽が録音された wav ファイルがあるとします。音は非常にきれいで、余分な音はギター自体とおそらくメトロノームのカチカチ音だけです。

Python で演奏された各音符 (または和音) のタイムスタンプを見つける最良の方法は何でしょうか? メモ自体を特定する必要はなく、メモが発生したときのタイムスタンプだけを特定する必要があります。

こういうことは今までやったことがなかったので、ちょっと戸惑いました。ウィキペディアで短時間フーリエ変換について読んでいましたが、有望に見えますが、関連する例が見つかりませんでした。開始方法に関するヘルプ/ヒントをいただければ幸いです。

4

1 に答える 1

2

一般的な問題は発症検出と呼ばれ、試すことができる多くの方法があります。おそらくあなたのユースケースでは機能しない、非常に単純なソリューションを提供します。

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]))
于 2016-01-28T12:30:48.543 に答える