我正在开发一个系统来帮助音乐家进行转录.目的是在单个乐器单声道录音上执行自动音乐转录(它不一定是完美的,因为用户将在以后纠正错误/错误).这里有没有人有自动音乐转录的经验?或一般的数字信号处理?无论您的背景如何,都非常感谢任何人的帮助.
到目前为止,我已经研究了使用快速傅里叶变换进行音调检测,并且MATLAB和我自己的Java测试程序中的大量测试表明它足够快速和准确以满足我的需求.需要解决的任务的另一个要素是以乐谱形式显示制作的MIDI数据,但这是我现在不关心的事情.
简而言之,我正在寻找的是一种用于音符开始检测的好方法,即信号中新音符开始的位置.由于慢速开启可能很难正确检测,我最初将使用带有钢琴录音的系统.这也部分归因于我弹钢琴的事实,应该处于更好的位置以获得合适的录音进行测试.如上所述,该系统的早期版本将用于简单的单声道录音,根据未来几周取得的进展,可能会在稍后进行更复杂的输入.
我使用Librosa库进行音高和起始检测.具体来说,我正在使用onset_detect
和piptrack
.
这是我的代码:
def detect_pitch(y, sr, onset_offset=5, fmin=75, fmax=1400):
y = highpass_filter(y, sr)
onset_frames = librosa.onset.onset_detect(y=y, sr=sr)
pitches, magnitudes = librosa.piptrack(y=y, sr=sr, fmin=fmin, fmax=fmax)
notes = []
for i in range(0, len(onset_frames)):
onset = onset_frames[i] + onset_offset
index = magnitudes[:, onset].argmax()
pitch = pitches[index, onset]
if (pitch != 0):
notes.append(librosa.hz_to_note(pitch))
return notes
def highpass_filter(y, sr):
filter_stop_freq = 70 # Hz
filter_pass_freq = 100 # Hz
filter_order = 1001
# High-pass filter
nyquist_rate = sr / …
Run Code Online (Sandbox Code Playgroud) python signal-processing pitch-tracking librosa onset-detection
我正在制作一个复音音乐转录项目.我已经阅读了一些论文,并阅读了解释类似任务的文章.我对问题领域的许多方面感到非常困惑.希望有人能够帮助我.
到目前为止,我已经从给定的mp3获得了解码音频数据流.
我已经了解起病检测是转录的第一步..是否有可用的Java库可用于检测开始.
接下来,如我所读,使用FFT也可以检测基频.
我想知道在这些任务中使用FFT.(我对FFT不熟悉).是否必须执行FFT以进行起始检测和F0检测.如果不是其他方式.我可以在我的音频流上执行FFT,或者是否需要执行其他操作才能操作这些音频数据.
非常感谢.