GNU/Linux >> Linux Esercitazione >  >> Linux

Qualsiasi software di rilevamento del battito per Linux?

Nel sito che DaveParillo mi ha suggerito ho trovato il progetto BpmDj. Ha un bpmcount eseguibile che calcola il bpm molto carino:gestisce mp3 così come flac:

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

L'unica cosa che rimane è ritaggare la raccolta. Aggiornerò questa risposta ogni volta che avrò successo. Grazie! :)

Passaggio 1

Esegui bpmcount contro l'intera raccolta e memorizzare i risultati in un file di testo. Il problema è che bpmcount si blocca di tanto in tanto e cerca di consumare fino a 2 GB di memoria quando elabora diversi file, quindi dovremmo alimentarlo con i nomi dei file uno per uno. In questo modo:

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

Passaggio 2

Avremo bisogno di alcuni pacchetti aggiuntivi:apt-get install vorbis-tools flac python-mutagen .Ora dai un'occhiata a come aggiungere il tag 'bpm':

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

Purtroppo non ho tracce *.ape

Ora abbiamo i BPM e l'intera raccolta dovrebbe essere rietichettata. Ecco lo 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

Passaggio 2.1 rivisitato Ecco uno script che aggiungerà i tag BPM alla tua raccolta.

Esegue un processo per CPU Core per rendere il processo più veloce. Inoltre, non utilizza file temporanei ed è in grado di rilevare se un file è già contrassegnato.

Inoltre, ho scoperto che FLAC a volte contiene sia ID3 che VorbisComment. Questo script aggiorna entrambi.

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

Divertiti! :)


Questo è uno strumento da riga di comando per rilevare il BPM e inserirlo nei tag del file FLAC:

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


Ho usato lo script originale di kolypto usando bpmcount e l'ho riscritto per bpm-tag (utilità di bpm-tools ) che ho avuto più fortuna con l'installazione. Ho anche apportato alcuni miglioramenti.

Puoi trovarlo su GitHub https://github.com/meridius/bpmwrap


Linux
  1. FreeCAD – Un software di modellazione e progettazione 3D per Linux

  2. 11 migliori software CAD per Linux

  3. 10 migliori software di contabilità open source per Linux

  4. Il miglior software di pittura per Linux

  5. Ottieni il codice sorgente per qualsiasi comando Linux

I 15 migliori software frattali per desktop Linux

I 10 migliori software di inventario di rete per Linux

I 10 migliori software di geometria per sistemi Linux

I 15 software di Scienze della Terra o Geoscienze per Linux

I 10 migliori software di presentazione per desktop Linux

15 migliori software di editing video per sistema Linux