Çalma listesi önerilerini 40 dakikalık bir sette bağlamla sınamak

这篇内容暂时只有 Türkçe 版本,以下是原文。

Geçen hafta kendi arşivimden 1.100 parçalık bir havuzla, 40 dakikalık tek bir set çıkarmayı denedim. Ortam sıradan: dizüstü, yerel dosyalar, harici bir ses kartı yok. Öneri motoru parça seçiminde iyi görünüyordu ama seti baştan sona dinlediğimde 12. dakikada tempo düşüyor, 25. dakikada aynı tını iki kez geliyordu. Sorun parçalar değil, sıralamaydı.

Önce her parça için üç sayı çıkardım: BPM, enerji (0–1) ve tını parmak izi. BPM’yi hazır etiketlerden almadım; dosya adlarında tutarsızdı. Yerel bir analiz betiğiyle yeniden ölçtüm:

for f in *.wav; do
  ffmpeg -i "$f" -af "ebur128=peak=true" -f null - 2>&1 | grep -E "I:|LRA:" >> loudness.txt
done

Sonra sıralamayı bir grafik problemi gibi kurdum: her parça bir düğüm, ardışık çalınabilirlik maliyeti |ΔBPM|/10 + |Δenerji|*3 + tını mesafesi. Python tarafında küçük bir greedy çözücü yeterli oldu, tam çözücüye gerek kalmadı:

sira = [baslangic]
while len(sira) < len(parcalar):
    son = sira[-1]
    aday = min((p for p in parcalar if p not in sira),
               key=lambda p: abs(p.bpm-son.bpm)/10 + abs(p.enerji-son.enerji)*3 + tinimesafe(p, son))
    sira.append(aday)

Bunu seçmemin nedeni basit: set dinlerken insan kulağı mutlak BPM’ye değil geçişin pürüzsüzlüğüne bakıyor. Maliyet fonksiyonunda enerjiye 3 katsayısı vermek, 8 BPM’lik bir sıçramanın enerji farkıyla telafi edilmesini engelliyor. Takas şu: greedy her zaman global olarak en iyi seti vermiyor, özellikle havuzun sonunda elimde sadece yüksek enerjili parçalar kalırsa set monotonlaşıyor. 1.100 parçada bunu 3 kez yaşadım; çözüm olarak son 5 parçayı baştan ayırıp ayrı bir kapanış havuzu yaptım.

Bir başka sınır: tını parmak izini kısa örneklerden çıkardığım için canlı kayıtlarda ve uzun girişlerde yanılıyor. Caz parçalarında ilk 30 saniye neredeyse sessiz olabiliyor; bu yüzden analizi parçanın ortasından 20 saniyelik bir pencereye kaydırdım. Ayrıca BPM’si sabit olmayan (rubato) parçaları bu boru hattına hiç sokmuyorum, elle yerleştiriyorum.

Sizin havuzunuzda geçiş maliyetine hangi terimi koyuyorsunuz; tını mı, enerji mi, yoksa tamamen başka bir şey mi?

0
赞同度 100% · 0 条评论 · 3 阅读

0 条评论

支持 Markdown · 回复会实时推送给对方

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