GNU/Linux >> Tutoriels Linux >  >> Linux

Un logiciel de détection de rythme pour Linux ?

Sur le site DaveParillo m'a suggéré d'avoir trouvé le projet BpmDj. Il a un bpmcount exécutable qui calcule le bpm très sympa :il gère aussi bien les mp3 que les flac :

161.135 Metallica/2008 - Death Magnetic/01-That Was Just Your Life.flac
63.5645 Doom3.mp3

Il ne reste plus qu'à réétiqueter la collection. Je mettrai à jour cette réponse chaque fois que je réussirai. Merci ! :)

Étape 1

Exécutez bpmcount contre l'ensemble de la collection et stocker les résultats dans un fichier texte. Le problème est que bpmcount se bloque de temps en temps et essaie de consommer jusqu'à 2 Go de mémoire lorsqu'il traite plusieurs fichiers, nous devons donc l'alimenter avec des noms de fichiers un par un. Comme ceci :

musicdir='/home/ootync/music'
find "$musicdir" -iregex ".*\.\(mp3\|ogg\|flac\|ape\)" -exec bpmcount {} \; \
    | fgrep "$musicdir" > "$musicdir/BPMs.txt"

Étape 2

Nous aurons besoin de packages supplémentaires :apt-get install vorbis-tools flac python-mutagen .Regardez maintenant comment la balise 'bpm' peut être ajoutée :

mid3v2 --TBPM 100 doom3.mp3
vorbiscomment -a -t "BPM=100" mother.ogg
metaflac --set-tag="BPM=100" metallica.flac

Hélas, je n'ai pas de pistes *.ape

Maintenant, nous avons les BPM et toute la collection devrait être réétiquetée. Voici le script :

cat "$musicdir/BPMs.txt" | while read bpm file ; do
    bpm=`printf "%.0f" "$bpm"` ;
    case "$file" in 
        *.mp3) mid3v2 --TBPM "$bpm" "$file" > /dev/null ;; 
        *.ogg) vorbiscomment -a -t "BPM=$bpm" "$file" ;; 
        *.flac) metaflac --set-tag="BPM=$bpm" "$file" ;; 
        esac
    done

Étape 2.1 revisitée Voici un script qui ajoutera des balises BPM à votre collection.

Il exécute un processus par cœur de processeur pour accélérer le processus. De plus, il n'utilise aucun fichier temporaire et est capable de détecter si un fichier est déjà balisé.

De plus, j'ai découvert que FLAC contient parfois à la fois ID3 et VorbisComment. Ce script met à jour les deux.

#!/bin/bash

function display_help() {
    cat <<-HELP
            Recursive BPM-writer for multicore CPUs.
            It analyzes BPMs of every media file and writes a correct tag there.
            Usage: $(basename "$0") path [...]
            HELP
    exit 0
    }

[ $# -lt 1 ] && display_help

#=== Requirements
requires="bpmcount mid3v2 vorbiscomment metaflac"
which $requires > /dev/null || { echo "E: These binaries are required: $requires" >&2 ; exit 1; }

#=== Functions

function bpm_read(){
    local file="$1"
    local ext="${file##*.}"
    declare -l ext
    # Detect
    { case "$ext" in
        'mp3')  mid3v2 -l "$file" ;;
        'ogg')  vorbiscomment -l "$file" ;;
        'flac') metaflac --export-tags-to=- "$file" ;;
        esac ; } | fgrep 'BPM=' | cut -d'=' -f2
    }
function bpm_write(){
    local file="$1"
    local bpm="${2%%.*}"
    local ext="${file##*.}"
    declare -l ext
    echo "BPM=$bpm @$file"
    # Write
    case "$ext" in
        'mp3')  mid3v2 --TBPM "$bpm" "$file" ;;
        'ogg')  vorbiscomment -a -t "BPM=$bpm" "$file" ;;
        'flac') metaflac --set-tag="BPM=$bpm" "$file"
                mid3v2 --TBPM "$bpm" "$file" # Need to store to ID3 as well :(
                ;;
        esac
    }

#=== Process
function oneThread(){
    local file="$1"
    #=== Check whether there's an existing BPM
        local bpm=$(bpm_read "$file")
        [ "$bpm" != '' ] && return 0 # there's a nonempty BPM tag
    #=== Detect a new BPM
    # Detect a new bpm
    local bpm=$(bpmcount "$file" | grep '^[0-9]' | cut -f1)
    [ "$bpm" == '' ] && { echo "W: Invalid BPM '$bpm' detected @ $file" >&2 ; return 0 ; } # problems
    # Write it
    bpm_write "$file" "${bpm%%.*}" >/dev/null
    }

NUMCPU="$(grep ^processor /proc/cpuinfo | wc -l)"
find [email protected] -type f -regextype posix-awk -iregex '.*\.(mp3|ogg|flac)' \
    | while read file ; do
        [ `jobs -p | wc -l` -ge $NUMCPU ] && wait
        echo "$file"
        oneThread "$file" &
        done

Prendre plaisir! :)


Il s'agit d'un outil en ligne de commande pour détecter le BPM et le mettre dans les balises du fichier FLAC :

http://www.pogo.org.uk/~mark/bpm-tools/


J'ai utilisé le script original de kolypto en utilisant bpmcount et l'a réécrit pour bpm-tag (utilité de bpm-tools ) que j'ai eu plus de chance d'installer. J'ai également apporté quelques améliorations.

Vous pouvez le trouver sur GitHub https://github.com/meridius/bpmwrap


Linux
  1. FreeCAD - Un logiciel de modélisation et de conception 3D pour Linux

  2. 11 meilleurs logiciels de CAO pour Linux

  3. 10 meilleurs logiciels de comptabilité open source pour Linux

  4. Meilleur logiciel de peinture pour Linux

  5. Les 5 meilleurs logiciels de blogs pour Linux Desktop

Les 15 meilleurs logiciels Fractal pour Linux Desktop

Top 10 des meilleurs logiciels d'inventaire réseau pour Linux

Top 10 des meilleurs logiciels de géométrie pour système Linux

Les 15 logiciels de sciences de la Terre ou géosciences pour Linux

Top 10 des meilleurs logiciels de présentation pour Linux Desktop

15 meilleurs logiciels de montage vidéo pour le système Linux