Çalma listesi önerisi üretirken tempo eşleştirme denemesi

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

Kendi arşivimden öneri listesi çıkaran küçük bir betik yazdım; 2.400 parçalık yerel kütüphanede, çoğu 90–140 BPM aralığında. Sorun şuydu: sıralamayı sadece türe göre yapınca geçişler kopuyordu, özellikle 100 BPM altındaki parçalardan 128’e atlarken. Dinlerken değil, listeyi kaydederken fark ettim; 40 parçalık listede 6-7 yerde tempo sıçraması vardı.

Önce her parçanın BPM’ini ayrı bir dosyaya çıkardım, tag’lerden okumak yerine yerel analiz aracıyla. Sonra liste üretiminde sıralamayı iki anahtara bağladım: tür ve tempo. Basit bir yaklaşımla, parçaları tempo aralıklarına böldüm ve her aralıkta tür dağılımını korudum.

# tek seferlik: bpm listesi
for f in ~/muzik/*.flac; do
  bpm=$(bpm-tag "$f" 2>/dev/null | cut -d' ' -f1)
  echo "$f\t$bpm" >> bpm.tsv
done

Sıralama tarafında Python’da şunu kullandım:

import csv, random
from collections import defaultdict

rows = [r for r in csv.reader(open('bpm.tsv'), delimiter='\t') if len(r) == 2]
buckets = defaultdict(list)
for path, bpm in rows:
    b = int(float(bpm) // 10) * 10
    buckets[b].append(path)

liste = []
for b in sorted(buckets):
    parcalar = buckets[b][:]
    random.shuffle(parcalar)
    liste.extend(parcalar[:12])

with open('oneri.m3u', 'w') as out:
    out.write('#EXTM3U\n')
    for p in liste:
        out.write(p + '\n')

Bunu yapmamın sebebi şu: öneri listesinde amaç türü değil, dinleme akışını bozmamak. Tempo 10’luk kovalara ayrıldığında iki komşu kova arasındaki geçiş en fazla 10 BPM oluyor; bu da kulakta ani sıçrama yaratmıyor. Karışık tür sıralamasının verdiği çeşitliliği de kaybetmiyorum çünkü her kovada ayrı shuffle var. Maliyeti: liste artık albüm bütünlüğüne değil tempoya göre diziliyor; konsept albümleri tek tek dinlemek isteyen için bu kötü. Ayrıca BPM analizi her dosyada 1–3 saniye sürüyor, 2.400 parçada bir kez çalıştırıp sonucu saklamak gerekiyor.

Nerede bozuluyor: canlı kayıtlarda ve rubato ağırlıklı parçalarda BPM etiketi tek bir sayıya inmiyor; benim kovalarım yanlış yere düşürüyor. Bir de 60 BPM altındaki parçaların bir kısmı araç tarafından 120 olarak okunuyor, yani oktav hatası var; bunu elle düzeltmeden liste kullanılmıyor. Kendi arşivimde 30 kadar dosyada bu hatayı gördüm, hepsi uzun ambient parçalardı. Son olarak, tempo kovaları arasında kesme yaptığım için aynı kovanın 13. parçası hiç listeye girmiyor; 12 sınırını keyfi seçtim, daha büyük kütüphanede bu oran bozuluyor.

Sizin arşivinizde tempo etiketi ne kadar güvenilir? Özellikle canlı kayıtlarda BPM’i tek sayıya indirmek yerine aralık olarak tutan bir yöntem deneyen var mı?

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

0 条评论

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

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