
我有一個想要編寫的程式的想法,但它需要一種將音樂音訊(單吉他,初步近似)轉換為音符(例如音樂的 OCR/語音識別)的方法。
谷歌發現智慧評分,但儘管它宣傳了我需要的更多功能(幾種儀器),但它是專有的,我正在尋找免費且兼容 GPL 的東西。
是否有任何免費/GPL 程式或庫可以做到這一點?
答案1
答案2
谷歌推薦waon
。
原來在http://waon.sourceforge.net/我在 Xubuntu 18.04 上編譯它,包括基於 gtk 的 gui。
什麼是 waon
WaoN 是一個 Wave-to-Notes 轉錄器,即 Tuukka Toivonen 的 timidity 的逆(及其後代 timidity++)。 (...) 我的初衷是從我最喜歡的鋼琴家的聲音中拾取和聲。 (...)
目前,WaN 包含三個程式:
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 套件提供了一組例程,其中包括用於估計瞬時頻率的例程。
由於您正在編寫自己的軟體,因此您可以嘗試直接實現頻譜圖或尺度圖的重新分配方法,並將其用作分析的中間步驟。一種可能是嘗試使用我在該演示影片的描述部分中提供的公式。有一種方法專門針對基於小波的尺度圖進行了調整,稱為“同步擠壓”,它可以進行重新分配的尺度模擬。
我列出的公式要簡單得多,可以更直接地進行類似的分析,並且具有額外的優點,即尺度圖中的各個分量也是真正的聲音分量(因為相位也存在),因此總聲音實際上是各分量聲音的總和。換句話說,「逆」變換(從尺度圖到聲音)只是簡單的加法。