※ 引述《phoenixlife (鍵盤小底迪)》之銘言:
: 如題
: 我想做一個程式input一個音樂檔 然後直接轉換成音階(Do Re Mi..)
: 不知道這有沒有人做過
: 在github也不知道打哪些關鍵字
: frequency,note....找到很多沒有想要的
: 另外,有做這類適合用哪些package
: 這樣才會有比較好的方向下手
: 感謝
小弟不才,正好是相關領域的研究人員
你說的這個問題其實就是自動轉譜
自動轉譜的問題其實很難,而很難的原因有2個面向
1. Multi-Pitch estimation
假設有個很細的時間軸上的最小單位,比方說0.005秒
然後我就每個最小基本時間單位(0.005s)做一次偵測
把聲音的能量直接對到鋼琴上的某個Key
這個技術目前state-of-the-art準確度好像80%多左右
但是使用上依然限制很大,比方說錄音品質必須足夠好,同時彈奏的音不能太多
鋼琴不能走音,不能有鋼琴以外的其他樂器...等
以致在實際的生活中很難被大量的應用
2. Beat tracking.
節拍的概念(比方說4分音符究竟有多長),其實是變動的
從每一首曲子的拍號,到每一個音的速度都有可能是不相同的
所以"16分音符"代表的時間長度其實也並非是固定的,目前SOTA對於節拍的偵測
應賅可以做到8.9成正確,但是同樣也是有穩定性的問題,要準確的偵測到
"從那邊開始算起來是第一拍",這段音樂究竟是4/4 or 3/4 or 4/6,這種事情
以目前的技術來說,也還沒辦法給出非常穩定的結果。
結語,由於在時間以及在頻率上自動分析的準確度以及穩定度都還不是很理想
因此音高辨識的技術目前並不是非常成熟,一般你可以找到的軟體在準確度以及穩定度
上都很難有讓人滿意的表現,所以你不太會看到有現成的「可用code」
(因為準確度太低,做出來你也不會想用)
但是如果能限縮自動轉譜的自由度,比方說在滿足下面這些條件
1. 音檔的長度固定
2. 節拍固定
3. 同時彈奏的音不能超過兩個
4. 樂器數量最多只有一種
5. 沒有走音
6. 錄音品質良好
...等的前提下
應賅是可以做到準確度足夠高的自動轉譜啦
找個做相關研究的人幫忙,應賅是可以做到的
以上提供給你參考