去年整理一批 2015–2023 的現場錄音,大概 500 首,全部是 44.1kHz/16bit 的 WAV 轉 FLAC。我想做一份「同調性歌單」,方便練團時直接照著調性接歌。
做法很直接:用 librosa 抓每首歌的色度特徵(chroma_cqt),取平均後跟 24 個大小調的模板比對,取相關性最高的當調性。跑完一輪大概 40 分鐘,輸出 CSV。
import librosa, numpy as np
def estimate_key(path):
y, sr = librosa.load(path, sr=None, mono=True)
chroma = librosa.feature.chroma_cqt(y=y, sr=sr).mean(axis=1)
# 大調模板
major = np.array([6.35,2.23,3.48,2.33,4.38,4.09,2.52,5.19,2.39,3.66,2.29,2.88])
minor = np.array([6.33,2.68,3.52,5.38,2.60,3.53,2.54,4.75,3.98,2.69,3.34,3.17])
# 對 12 個根音做旋轉比對,取最大相關係數
...
(完整程式不貼了,核心就是旋轉模板取最大相關。)
結果拿來用之後才發現問題:現場曲目常有轉調,尤其是最後一段副歌升半音,整首平均下來調性會被拉走;鼓聲重的歌,低頻能量也會干擾色度。500 首裡我抽了 60 首手動核對,大概 12 首被判錯,錯的多半是轉調歌和節奏強烈的。
代價是每首都要人工複查,等於自動化只省了前段,後段還是要靠耳朵。我後來改成兩段式:先讓程式標記「信心分數低於 0.6」的曲目,只人工聽那一批,覆蓋率大約八成,剩下的就放生。
現在這份歌單我拿來當練團參考,不拿來做自動接歌。想問問有在玩現場錄音的人:你們怎麼處理轉調曲目的調性標記?是手動拆段落,還是直接放棄全曲平均?
0
赞同度 100% · 0 条评论 · 2 阅读

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