部落格研究

AI 扒譜到底有多準?我們實測了一下

起音 F1 是什麼,兩款音訊轉 MIDI 引擎在真實吉他錄音和一段樂團片段上各得幾分,以及這些數字沒有告訴你的事。

先說結論

出初稿夠用,出成品還不行。2026年10月2日,我們用 12 段公開吉他錄音做了測試:Spotify 開源的 Basic Pitch 起音 F1 達到 0.744,Mirelo 的 Audio-to-MIDI 為 0.471;1.0 意味著每個音符的音高和時間都對,而且沒有一個多餘的音。六段獨奏錄音裡有三段 Mirelo 一個音都沒傳回,但在一段 60 秒的樂團片段上,它以 0.672 比 0.520 領先。音符時長遠不如音符起點可靠;而且這些數字都說明不了寫出來的樂譜好不好讀。

起音 F1(onset F1)衡量的是什麼?

起音 F1 把扒譜結果和參考標註逐個音符比對,漏掉的音和多出來的音同樣扣分。扒出的一個音符,只要音高與某個參考音符相差不超過 50 音分(四分之一音),起點相差不超過 50 毫秒,就算配對成功。每個參考音符只能被配對一次。

配對完會得到兩個比例。精確率是模型寫出的音符中配對成功的比例;召回率是參考音符中被模型找到的比例。F1 是兩者的調和平均數,只要其中一個低,F1 就高不起來。假設一段音樂有 100 個音:一個模型寫了 100 個音,對了 75 個,得分 0.75;另一個模型找到了其中 90 個,卻為此寫了 150 個音,召回率 0.9,精確率 0.6,F1 只有 0.72——多寫的 60 個音拉低了分數。

起止 F1(onset+offset F1)再加一個條件:每個音符的結束點也要落在參考音符時長的 20% 以內,如果 50 毫秒更長,就按 50 毫秒算。Spotify 的 Basic Pitch 論文以起音 F1 為主要指標,因為音符結束點不那麼客觀,論文點出了殘響、延音踏板和標註方式這幾個原因。兩個指標我們都會列出。但兩者都不檢查音符被分給了哪件樂器,也不管調號和節奏該怎麼記。

我們的測試方法

我們用的是 GuitarSet 1.1.0(Xi 等,ISMIR 2018)。這個公開資料集收錄了 360 段約 30 秒的吉他片段:六位吉他手彈奏同樣的 30 份旋律譜,涵蓋五種風格,每份先彈一遍伴奏(comp),再在伴奏之上彈一遍獨奏。錄音用的是六路分弦拾音器(hexaphonic pickup),每根弦各有一路獨立訊號,作者因此能把音符標註基本自動化。

我們選了 12 段完整錄音,每位吉他手一段獨奏、一段伴奏,用的是單聲道麥克風音軌,共 433 秒。選哪幾段在執行任何模型之前就定好了:先排除三段已知標註有誤的錄音(GuitarSet 的 issue #4 和 #5:一個重複的音符和錯誤的時間),再對每位吉他手的每種演奏方式,取「scorestarling-v1:」加檔名的 SHA-256 雜湊值排序最靠前的檔案。下文的逐段結果表列出了挑出的 12 段。

評分用的是 mir_eval 0.8.2,容許誤差採用上文所述的預設值,先逐段計算再取平均,讓每段錄音的權重相同。沒有做任何參數調整:不加時間偏移,不做過濾,也不做對齊平移。Basic Pitch 0.4.0 在一台 Mac 上執行,兩次完整執行的輸出逐位元組一致。Mirelo 的 Audio-to-MIDI API(回報的模型版本為 a2m-1.1)在 2026年10月2日處理了同樣的 12 段錄音,沒有附帶可選的樂器列表;據 Mirelo 的更新紀錄,其 API 自 2026年8月6日起支援這個參數。

以下所有結果都受四點限制:

  • Basic Pitch 的論文把 GuitarSet 和 Slakh 列入了訓練資料,所以兩項測試都對它有利。我們無法確認這 12 段 GuitarSet 錄音是否在它的訓練集裡;樂團片段則取自 Slakh 的測試集。
  • 12 段吉他錄音加一段 60 秒樂團片段,只是診斷性的小樣本,不是基準測試。人聲和真實錄製的樂團演奏都沒有測;鋼琴只在合成音訊上測過,用的也是另一個模型(見文末問答)。
  • 吉他錄音在 Mirelo 上只跑了一次,是在 10月2日。它沒傳回任何音符的那三段,我們也沒有換個方式重試,比如告訴它錄音裡是原聲吉他。樂團片段在 10月5日重新提交了一次,傳回的音符完全相同。
  • 這些數字都不評價寫出來的樂譜。像 MV2H 這樣在樂譜層面評分、還會檢查拍號、聲部和時值的指標,我們還沒有測。

ScoreStarling 扒單一樂器或人聲用的是 Basic Pitch,扒樂團用的是我們的合作夥伴 Mirelo,所以我們並不是中立的旁觀者。正因如此,我們在這裡把方法、樣本和限制都寫清楚。

Basic Pitch 和 Mirelo,誰扒吉他更準?

Basic Pitch 勝出:獨奏旋律上遙遙領先,伴奏上小幅領先。

GuitarSet,12 段錄音,宏平均,2026年10月2日
錄音Basic Pitch 起音 F1Mirelo 起音 F1Basic Pitch 起止 F1Mirelo 起止 F1
獨奏(6 段)0.8180.3010.6540.168
伴奏(6 段)0.6690.6420.3620.280
全部(12 段)0.7440.4710.5080.224

2026年10月4日更新:ScoreStarling 的單一樂器選項做了兩處改動——整體持續偏高或偏低的錄音會先校準到 A440,旋律改為一次只寫一個音——之後我們用同樣的 12 段錄音重測了一遍。獨奏得分 0.846,伴奏 0.679,總體 0.763,算上音符結束點則為 0.522。上表保留的仍是 10月2日單獨執行 Basic Pitch 的結果。

六段獨奏錄音中,有三段 Mirelo 一個音符都沒傳回。這三段在它的獨奏平均分裡按 0 計算,因為使用者拿到的就是空結果;我們也沒有重跑。傳回了音符的那幾段,表現有好有壞。第一段 00_BN3-154-E_solo 上,兩個引擎在音符起點上打成平手(Basic Pitch 0.809,Mirelo 0.814),但 Mirelo 的音符結束點偏差更大(起止 F1 為 0.320,Basic Pitch 為 0.524),還把這首 154 BPM 的曲子判成了約 76.9 BPM,只有原速的一半。伴奏方面,六段裡有兩段 Mirelo 明顯更好。12 段全部算上,它的起止 F1 為 0.224。

逐段起音 F1,GuitarSet,2026年10月2日
錄音Basic PitchMirelo
00_BN3-154-E_solo0.8090.814
01_Rock2-85-F_solo0.8690.326
02_BN1-147-Gb_solo0.8600.667
03_SS1-68-E_solo0.7820(無音符)
04_SS3-84-Bb_solo0.8210(無音符)
05_SS1-68-E_solo0.7680(無音符)
00_BN3-154-E_comp0.6850.810
01_SS1-68-E_comp0.6220.854
02_SS1-100-C#_comp0.5670.491
03_SS3-98-C_comp0.7310.745
04_Rock3-117-Bb_comp0.6830.385
05_Rock2-85-F_comp0.7270.564

Basic Pitch 的 0.744,與作者在他們自己的 GuitarSet 測試集(72 段錄音)上報告的結果相近:起音 F1 為 0.79,算上結束點為 0.56。兩個引擎的速度也不同。Basic Pitch 在一台 Mac 上用 54 秒處理完了 433 秒的音訊,這並不代表正式上線環境的耗時;第一段錄音它用了 6.1 秒,Mirelo 用了 37 秒。

換成整支樂團會怎樣?

混音更難扒,這一回是 Mirelo 領先。我們取了 Slakh2100 測試集中 Track01881 的前 60 秒。Slakh2100 收錄了 2,100 首歌,都是用取樣式虛擬樂器演奏 MIDI 產生的,所以參考音符分毫不差。這一分鐘裡,鋼弦吉他、爵士吉他、鋼琴、貝斯、顫音琴和鼓都有演奏。把所有有音高的樂器合在一起算、不管音符被分給了哪件樂器,並以兩個引擎各自傳回的 MIDI 檔案評分,Basic Pitch 的起音 F1 為 0.520,Mirelo 為 0.672。

Basic Pitch 只輸出一個合併的聲部,也不寫鼓。Mirelo 為每件樂器各寫一個聲部,所以只有 Mirelo 能按樂器評分,這裡按 General MIDI 的樂器類別分組:

鋼琴和鼓扒得最好;顫音琴大多被漏掉了。參考音符數量見下表。
Mirelo 各樂器類別得分,Slakh2100 Track01881,前 60 秒
樂器類別(參考音符數)起音 F1
鋼琴(178)0.827
吉他:鋼弦和爵士(334)0.681
貝斯(127)0.455
顫音琴(64)0.137
鼓點(423)0.698

要把兩把吉他區分開就更難了。按 10月2日 Mirelo 傳回的音符列表逐聲部評分,鋼弦吉他為 0.364,爵士吉他為 0.148;MIDI 檔案裡的音符比這份列表早約 20 毫秒開始,所以按 MIDI 算出的數字略有不同。Mirelo 還給歌曲裡根本沒有的樂器報了 92 個音:管風琴、合成器鋪底音色(pad)、小提琴和大提琴。鼓點只按時間評分,不管是哪面鼓。這只是一首歌,而且是由 MIDI 產生的,不是實際錄音,所以只能看個大致方向,不能當排名。

哪些音最可能扒錯?

對 Basic Pitch 來說,是它以低力度寫出的那些音。Basic Pitch 把每個音符的 MIDI 力度設為 127 乘以模型在這個音符上的平均活化值,所以力度同時也是一種信心分數。它為 12 段吉他錄音一共寫了 2,715 個音符,按同樣的 50 毫秒時間窗比對,低力度的音大多是錯的:

Basic Pitch 寫出的音力度越低,越可能是錯的。具體數量見下表。
Basic Pitch 力度與正確率,共 2,715 個音符
力度音符數佔比正確率
低於 502479.1%21%
50–592509.2%40%
60–7987232.1%67%
80–1271,34649.6%86%

用力度來區分音符對錯,AUC 為 0.77(0.5 相當於擲硬幣,1.0 為完美);換成音符時長只有 0.53,所以音短並不是有用的預警訊號。把力度低於 50 的音全部刪掉,總體起音 F1 能從 0.744 升到 0.765,可這些音裡每五個就有一個是對的。所以 ScoreStarling 的樂譜檢查只把它們列為存疑,而不是直接刪除,最後交給你的耳朵判斷。如果你自己執行 Basic Pitch,在鋼琴捲軸裡按力度給音符著色或排序,也能得到同樣的待查清單。

為什麼各家公布的準確率對不上?

因為它們在不同的錄音上測的是不同的東西,有的甚至沒說明測的是什麼。

公開數據,2026年10月3日核對
來源數據測試資料
Basic Pitch 論文(Bittner 等,2022)起音 F1 0.79;算上結束點為 0.56GuitarSet 測試集,72 段錄音
MuScriptor 論文(Rouard 等,2026)起音 F1 60.4(百分制),YourMT3+ 為 32.52作者自有資料中 372 段經過精細標註的真實錄音
ScoreCloud 指南「音高準確率通常在 85-95%」獨奏樂器和人聲;未說明方法
本次測試起音 F1:Basic Pitch 0.744,Mirelo 0.47112 段 GuitarSet 錄音

只有指標、容許誤差和錄音都一致時,數字才有可比性。我們測出的 Basic Pitch 成績可以和它論文裡的放在一起看,因為兩者都是在 GuitarSet 上算起音 F1,只是子集不同;但不能和 MuScriptor 的放在一起比。ScoreCloud 的頁面沒說音高準確率是怎麼算的、測了多少段錄音,也沒說時間是否計入。MuScriptor 是一個開放的研究模型,Mirelo 的 Audio-to-MIDI Pro 就是從它發展而來的,Mirelo 稱其正式上線的模型更準確。Mirelo 在 2026年9月17日發表的文章中說,更新後的模型「在我們的評估中」提高了音符和樂器辨識的準確率,但沒有公布具體數字。

音符準了,就能得到好讀的樂譜嗎?

不能。起音 F1 比的是以秒計時的音符,完全不管寫出來的樂譜好不好讀。一份樂譜還需要調號、合理的升降號、寫出來的休止符、聲部和拍號,而 Basic Pitch 這類模型輸出的純 MIDI 一樣都沒有。基於同樣的 Basic Pitch 音符,我們最初的記譜程式在全部 12 個案例中寫出的樂譜都沒有調號,也看不到休止符;MuseScore Studio 的 MIDI 匯入功能則在 12 個案例中有 10 個寫出了標註的調,並顯示了所有休止符。Mirelo 自己輸出的 MusicXML,在它完成的 9 個案例中有 5 個寫出了標註的調,而且全都記在單行高音譜表上。

扒譜得分高,樂譜照樣可能難讀;頁面整潔,也照樣可能藏著錯音。完整的前後比較見《為什麼 MIDI 匯入 MuseScore 後亂成一團》。

該選哪個扒譜引擎?

看錄音來選。以下是我們對這些結果的解讀:

  • 單一樂器或單條旋律:選 Basic Pitch。它在吉他獨奏上遙遙領先,免費開源,而且它的 README 也說一次只處理一件樂器時效果最好。
  • 樂團,或者需要分出各個聲部或鼓的混音:選 Mirelo 這類多樂器模型,因為 Basic Pitch 只會寫出一個合併的聲部。
  • 吉他伴奏:兩個都行。它們的平均分接近,在不同錄音上各有勝負;如果選哪個很重要,就拿一小段兩個都試試。
  • 人聲:我們還沒有測。鋼琴:我們只在合成音訊上測過自己的鋼琴獨奏選項,所以沒法給鋼琴扒譜引擎排名。

無論用哪個引擎,節奏和音符時值都要用耳朵再核對一遍。上面 10月2日的測量和 10月4日的重測都不包括我們的鋼琴獨奏選項。ScoreStarling 扒單一樂器或人聲用 Basic Pitch,扒鋼琴獨奏用一個鋼琴模型,兩者都免費;扒樂團用 Mirelo,需要消耗點數(2026年10月7日核實)。每種都只處理上傳檔案的前五分鐘,檔案最大 100 MiB。人聲或單一樂器預設按 4/4 拍記譜;鋼琴獨奏會自己判斷拍號;樂團樂譜的拍號由演奏推斷,或在開始前選定。吉他、貝斯和烏克麗麗聲部也可以顯示為 TAB 譜,但不記推弦、滑音和搥弦;詳見規格說明。

參考資料

  1. GuitarSet 1.1.0——Xi、Bittner、Pauwels、Ye 和 Bello,Zenodo(CC BY 4.0)
  2. GuitarSet 專案網站——GuitarSet 作者團隊
  3. GuitarSet 的 issue 列表——GitHub 上的 marl/GuitarSet
  4. Slakh2100——Manilow、Wichern、Seetharaman 和 Le Roux,Zenodo(CC BY 4.0)
  5. Cutting Music Source Separation Some Slakh——Manilow 等,WASPAA 2019
  6. A Lightweight Instrument-Agnostic Model for Polyphonic Note Transcription and Multipitch Estimation——Bittner 等,Spotify,2022
  7. Basic Pitch 及其 note_creation.py——Spotify,GitHub
  8. mir_eval.transcription——mir_eval 說明文件
  9. MuScriptor: An Open Model for Multi-Instrument Music Transcription——Rouard 等,2026
  10. Audio-to-MIDI Pro: full mixes to editable MIDI——Mirelo,2026年9月17日
  11. Audio to MIDI converter 和 Changelog——Mirelo
  12. How Accurate Is Automatic Music Transcription?——ScoreCloud

常見問題

AI 能把 MP3 扒成譜嗎?

能,可以逐個音符扒成 MIDI,只是會有錯要改。Spotify 的 Basic Pitch 這類模型最擅長單一樂器;完整的混音需要多樂器模型,準確率也更低。在我們 2026年10月2日的測試中,成績最好的一組是 Basic Pitch 扒吉他獨奏,起音 F1 為 0.818(ScoreStarling 對它的用法做了兩處調整後,10月4日重測為 0.846),所以還是要準備憑耳朵改掉一些音。

Basic Pitch 的準確率夠不夠出樂譜?

單一樂器出個初稿,夠了。在 12 段吉他錄音上,只看音符起點時它的起音 F1 為 0.744,把音符結束點也算上就只剩 0.508;而且它輸出的 MIDI 沒有調號、休止符和聲部,得靠記譜這一步補上。《為什麼 MIDI 匯入 MuseScore 後亂成一團》一文講了這一步會改動什麼。

怎樣自己測扒譜的準確率?

你需要一份信得過的參考標註,音符時間以秒為單位。有了它,就能用開源的 mir_eval 函式庫,依我們採用的容許誤差替音符配對評分:起點 50 毫秒,音高 50 音分,結束點為音符時長的 20% 或 50 毫秒。沒有參考標註的話,就把短樂段重複播放,憑耳朵對照樂譜和錄音。

為什麼 Mirelo 扒某些吉他獨奏時一個音都沒出?

我們也不知道。2026年10月2日,六段獨奏錄音中有三段傳回了空結果。當時我們沒有提供 Mirelo 的可選樂器列表,之後也沒有重試。在伴奏上,它的成績接近 Basic Pitch;在多樂器片段上,它領先。

AI 扒人聲或鋼琴準不準?

人聲方面,我們暫時還給不出自己的數據。鋼琴方面,只在合成音訊上測過:25 首樂曲的開頭幾個小節,每首以彈性速度演奏兩遍(共 50 段演奏,2026年10月6日測量)。我們以 Kong 等人的鋼琴模型為基礎的鋼琴獨奏選項,辨識出了約 92% 的譜面音符,但 50 段裡只有 35 段的拍子找對了,拍子、拍號和弱起小節全對的只有 26 段。Basic Pitch 的作者把它設計成適用於各種樂器,也包括人聲。無論用哪個模型,清晰、乾聲的單一人聲或單一樂器錄音,都最有機會扒準。

帶來任何音樂帶走一份樂譜