Bir müzik kütüphanesini BPM'ye göre sıralama


1

Giriş olarak "mp3 dosyası (" myfile.mp3 ") alan ve" myfile.mp3: XX.XXX BPM "çıktısını alan bpm-tag adında bir araç kullanıyorum. Müzik kitaplığımdan geçen, her şarkının BPM'sini hesaplayan ve BPM'sine göre bir dizine (örneğin, <80 BPM için "Yavaş" dizini) gibi bir dizini çalıştırmak istiyorum. Nasıl yapılacağı konusunda belirsiz bir fikrim var, ancak BPM'nin değerini almak için bpm-tag çıktısının nasıl ayrıştırılacağını bilmiyorum.

Baska öneri ?


4
SU bir senaryo yazma hizmeti değildir - ancak birkaçı yazarken sıkışıp kalmanız durumunda yardım etmeye istekli ve yardımcı olabiliriz. Şimdiye kadar elinizde ne var? Eğer bir dosya için "BPM" değerini elde etmek istiyorsanız size BPM = $ (bpm etiketi myfile.mp3 | "-d" -f2 kesim) çalıştırabilir gibi görünüyor değişken $ BPM içine BPM vereceğini
davidgo

2
Onlardan bahsedene kadar sed ve cut hakkında hiçbir şey bilmiyordum; teşekkür ederim. Senaryomu nasıl yazacağımı çözdüm, cevap olarak mı eklemeliyim?
Adrien MORIN

Yapsaydın kesinlikle faydalı olurdu. =)
Anaksunaman

Yanıtlar:


2

İşte yaptığım şey. İşe benziyordu (ama ne yazık ki bpm-tag birçok şarkı için yeterince doğru değildi ...).

#!/bin/bash

cd /path/to/my/library

while IFS= read -r -d '' FILE; do
    BPM=$(bpm-tag -f -n "$FILE" 2>&1 | sed "s/.mp3:/%/" | cut -d'%' -f2 | sed "s/ BPM//" | sed "s/^ //" | cut -d'.' -f1) 
#bpm-tag has its output in stderr, so I use 2>&1 to redirect it to stdout, then format it with sed and cut
    if [ "$BPM" -le 130 ]
        then cp "$FILE" /path/to/my/library/Slow/
    elif [ "$BPM" -le 180 ]
        then cp "$FILE" /path/to/my/library/Medium/
    else cp "$FILE" /path/to/my/library/Fast/
    fi
done < <(find . -type f -name '*.mp3' -print0)

Burada yapıyor

while IFS= read -r -d '' FILE; do
    echo "$FILE"
done < <(find . -type f -name '*.mp3' -print0)

klasörde veya alt klasörlerinde bulunan .mp3 (-name '* .mp3') ile biten tüm dosyaları (-tipi f) yazdırır. Anladığım kadarıyla, -print0 ve -r -d '' seçenekleri biçimlendirme amaçlıdır, ancak gerçekten nasıl çalıştığını anlamadım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.