上個月整理一批 2018 到 2023 的現場錄音,總共 214 首,大部分是觀眾席錄的,少數是 soundboard 流出。我想把它們排成一份能連續聽的歌單,第一步就是用 BPM 自動排序:快歌開場,中段鋪陳,最後收在慢歌。我用 aubio 的 aubio tempo 掃過一輪,把結果寫進 CSV,再依 BPM 分箱。指令大概長這樣:
for f in *.flac; do
bpm=$(aubio tempo "$f" 2>/dev/null | awk '{print $1}')
echo "$f,$bpm" >> bpm.csv
done
跑完 214 首大約花了十幾分鐘。打開 CSV 一看,問題馬上浮出來:有 31 首的 BPM 落在 60 以下或 180 以上,明顯是偵測錯誤;還有十幾首是同一首歌的不同版本,BPM 卻差了 20 以上。我手動用節拍器對了幾首,發現 aubio 對現場錄音的容忍度很低,尤其是鼓組收得比較遠、低頻糊成一團的場次。
於是我改成兩段式:先用 BPM 粗排,再手動修正。修正的重點不是把 BPM 調到絕對準,而是把「聽感上相近」的曲目放在一起。例如有兩首實測 128 和 132 BPM,但一首是刷弦為主的民謠,一首是四四拍的搖滾,硬接會很突兀。我最後是照「節奏密度」分群:把曲目分成「稀疏」「中等」「密集」三類,再在群內按 BPM 排。這樣手動改了 47 首,大概花了兩個晚上。
代價是這份歌單只對我自己有效,換一個人聽可能覺得接歌點很怪。邊界條件也很明確:如果錄音裡沒有明顯的節拍脈衝,例如自由節奏的鋼琴獨奏,BPM 偵測基本沒用,只能靠耳朵。我還踩過一個坑:有一首的 BPM 被偵測成 87,但我實際數是 174,因為它是一首快歌,aubio 抓到的是半速。這類半速/倍速的誤判,在 214 首裡出現了 9 次,我最後是看曲目長度和鼓點密度交叉判斷才抓出來。
現在這份歌單存在 foobar2000 裡,每次播到接歌點我還是會停下來想一下。你們排現場歌單時,是相信 BPM 偵測,還是直接憑感覺?有沒有遇過半速誤判特別嚴重的曲風?


0 条评论
还没有评论,写下第一条。