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 条评论
还没有评论,写下第一条。