Ordenar una biblioteca de música por BPM

Ordenar una biblioteca de música por BPM

Estoy usando una herramienta llamada bpm-tag que toma un archivo mp3 ("myfile.mp3") como entrada y genera "myfile.mp3: XX.XXX BPM". Me gustaría ejecutar un script que recorra mi biblioteca de música, calcule los BPM de cada canción y la mueva a un directorio de acuerdo con sus BPM (por ejemplo, directorio "Lento" para <80 BPM, etc.). Tengo una vaga idea de cómo hacerlo, pero no sé cómo analizar la salida de bpm-tag para obtener el valor de BPM.

Alguna sugerencia ?

Respuesta1

Esto es lo que he hecho. Parecía funcionar (pero lamentablemente bpm-tag no era lo suficientemente preciso para muchas canciones...).

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

aquí haciendo

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

imprime todos los archivos (-tipo f) que terminan en .mp3 (-nombre '*.mp3') que están en la carpeta o una de sus subcarpetas. Según tengo entendido, las opciones -print0 y -r -d '' son para fines de formato, pero realmente no entiendo cómo funciona.

información relacionada