我有一个想编写的程序的想法,但它需要一种将音乐音频(单吉他,初步估计)转换为音符(例如,音乐的 OCR/语音识别)的方法。
谷歌发现智能评分,但尽管它宣传它具有比我所需要的更多的功能(几种仪器),但它是专有的,而我正在寻找免费且与 GPL 兼容的东西。
是否有任何免费/GPL 程序或库可以做到这一点?
答案1
有诺蒂。它可以检测笔记并将其转录到屏幕上。它是 GPL,因此您应该能够提取和调整检测/转换例程。
另一个选择是音乐抄写套件哪个:
是一款将音乐音频文件转录为常见音乐符号的工具包。这是通过手动注释频谱图或类似内容并将其转换为 MIDI 文件和 abc 音乐符号文件来完成的。
专有程序 Transcribe! 具有详尽清单其他音乐转录工具,包括一些开源工具。您还可以查看SourceForge用于其他开源音乐转录程序。
答案2
谷歌推荐waon
。
最初于http://waon.sourceforge.net/我已经在 Xubuntu 18.04 上进行了编译,包括基于 gtk 的 gui。
什么是 waon
WaoN 是一款 Wave-to-Notes 转录器,即 Tuukka Toivonen 的 timidity(及其后代 timidity++)的反面。(...)我最初的意图是从我最喜欢的钢琴家的声音中拾取和声。(...)
目前,WaoN 包含三个程序:
waon: transcriber (wav-to-mid converter) pv: phase vocoder for time-streching and pitch-shifting gwaon: GUI for waon and pv
WaoN 是在 GNU 通用公共许可证下发布的。
在哪里可以找到源代码
CVS 已经过时了,SourceForge 正在逐步淘汰。我将基于 CVS 的历史记录转换为 git,并将其重新托管在https://github.com/fidergo-stephane-gourichon/waon。
有什么选择吗?
以下是可执行文件提供的选项的摘要。
./waon --help
WaoN - a Wave-to-Notes transcriber, Version 0.10
Copyright (C) 1998-2007 Kengo Ichiki <[email protected]>
Web: http://waon.sourceforge.net/
WaoN is a Wave-to-Notes transcriber,
that is, a converter from sound file to midi file.
Usage: ./waon [option ...]
Options:
-h --help print this help.
-v, --version print version information.
OPTIONS FOR FILES
-i --input input wav file (default: stdin)
-o --output output mid file (default: 'output.mid')
options -i and -o have argument '-' as stdin/stdout
-p --patch patch file (default: no patch)
FFT OPTIONS
-n sampling number from WAV in 1 step (default: 2048)
-w --window 0 no window
1 parzen window
2 welch window
3 hanning window (default)
4 hamming window
5 blackman window
6 steeper 30-dB/octave rolloff window
READING WAV OPTIONS
-s --shift shift number from WAV in 1 step
(default: 1/4 of the value in -n option)
PHASE-VOCODER OPTIONS
-nophase don't use phase diff to improve freq estimation.
(default: use the correction)
NOTE SELECTION OPTIONS
-c --cutoff log10 of cut-off ratio to scale velocity of note
(default: -5.0)
-r --relative log10 of cut-off ratio relative to the average.
(default: no relative cutoff
= absolute cutoff with the value in -c option)
-k --peak peak threshold for note-on, which ranges [0,127]
(default: 128 = no peak-search = search only first on-event)
-t --top top note [midi #] (default: 103 = G7)
-b --bottom bottom note [midi #] (default: 28 = E1)
Here middle C (261 Hz) = C4 = midi 60. Midi # ranges [0,127].
-a --adjust adjust-pitch param, which is suggested by WaoN after analysis.
unit is half-note, that is, +1 is half-note up,
and -0.5 is quater-note down. (default: 0)
DRUM-REMOVAL OPTIONS
-psub-n number of averaging bins in one side.
that is, for n, (i-n,...,i,...,i+n) are averaged
(default: 0)
-psub-f factor to the average, where the power is modified as
p[i] = (sqrt(p[i]) - f * sqrt(ave[i]))^2
(default: 0.0)
OCTAVE-REMOVAL OPTIONS
-oct factor to the octave removal, where the power is modified as
p[i] = (sqrt(p[i]) - f * sqrt(oct[i]))^2
(default: 0.0)
答案3
我无法为您提供软件解决方案,但可以解决根本问题:即识别任意源中的“自然”音调。难题中缺少的一块是有效利用频谱图的相位部分来重新分配将频谱中的频率调整到更自然的位置(频谱中的“瞬时频率”)。结果是频谱更加集中于线性调频线上。类似的考虑也适用于尺度图 - 尺度图与频谱图的不同之处在于,尺度图采用对数标度频率,而不是线性标度。
我知道 Loris 包是一个提供了一组例程的包,其中包括用于估计瞬时频率的例程。
由于您正在编写自己的软件,因此您可以尝试直接实现用于频谱图或尺度图的重新分配方法,并将其用作分析的中间步骤。一种可能性可能是尝试我在此演示视频的描述部分中提供的公式。有一种专门针对基于小波的尺度图进行调整的方法,称为“同步压缩”,它执行尺度图的重新分配模拟。
我列出的公式要简单得多,可以更直接地进行类似的分析,并且还有一个额外的优势,即尺度图中的各个分量也是真正的声音分量(因为相位也在那里),因此总声音实际上是分量声音的总和。换句话说,“逆”变换(从尺度图到声音)只是简单的加法。