Sortieren einer Musikbibliothek nach BPM

Sortieren einer Musikbibliothek nach BPM

Ich verwende ein Tool namens bpm-tag, das eine MP3-Datei („myfile.mp3“) als Eingabe verwendet und „myfile.mp3: XX.XXX BPM“ ausgibt. Ich möchte ein Skript ausführen, das meine Musikbibliothek durchsucht, die BPM jedes Songs berechnet und ihn entsprechend seiner BPM in ein Verzeichnis verschiebt (z. B. Verzeichnis „Slow“ für <80 BPM usw.). Ich habe eine vage Idee, wie das geht, weiß aber nicht, wie ich die Ausgabe von bpm-tag analysieren soll, um den BPM-Wert zu erhalten.

Irgendwelche Vorschläge ?

Antwort1

Folgendes habe ich getan. Es schien zu funktionieren (aber leider war der BPM-Tag für viele Songs nicht genau genug ...).

#!/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)

Hier tun

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

druckt alle Dateien (-type f) mit der Endung .mp3 (-name '*.mp3'), die sich im Ordner oder einem seiner Unterordner befinden. So wie ich es verstehe, dienen die Optionen -print0 und -r -d '' der Formatierung, aber ich verstehe nicht wirklich, wie das funktioniert.

verwandte Informationen