GNU/Linux >> Tutoriales Linux >  >> Linux

¿Algún software de detección de latidos para Linux?

En el sitio DaveParillo sugirió que encontré el proyecto BpmDj. Tiene un bpmcount ejecutable que calcula los bpm muy bien:maneja mp3 así como flac:

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

Lo único que queda es volver a etiquetar la colección. Actualizaré esta respuesta cada vez que tenga éxito. ¡Gracias! :)

Paso 1

Ejecute bpmcount contra toda la colección y almacenar los resultados en un archivo de texto. El problema es que bpmcount se bloquea de vez en cuando e intenta consumir hasta 2 GB de memoria cuando procesa varios archivos, por lo que debemos proporcionarle los nombres de archivo uno por uno. Así:

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

Paso 2

Necesitaremos algunos paquetes adicionales:apt-get install vorbis-tools flac python-mutagen .Ahora observe cómo se puede agregar la etiqueta 'bpm':

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

Por desgracia, no tengo pistas *.ape

Ahora tenemos los BPM y se debe volver a etiquetar toda la colección. Aquí está el guión:

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

Paso 2.1 revisado Aquí hay un script que agregará etiquetas BPM a su colección.

Ejecuta un proceso por núcleo de CPU para acelerar el proceso. Además, no utiliza archivos temporales y es capaz de detectar si un archivo ya está etiquetado.

Además, descubrí que FLAC a veces tiene ID3 y VorbisComment dentro. Este script actualiza ambos.

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

¡Disfrutar! :)


Esta es una herramienta de línea de comandos para detectar el BPM y colocarlo en las etiquetas del archivo FLAC:

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


Usé el script original de kolypto usando bpmcount y lo reescribí para bpm-tag (utilidad de bpm-tools ) que tuve mejor suerte con la instalación. También hice algunas mejoras por mi cuenta.

Puede encontrarlo en GitHub https://github.com/meridius/bpmwrap


Linux
  1. FreeCAD:un software de diseño y modelado 3D para Linux

  2. 11 mejores programas CAD para Linux

  3. Los 10 mejores software de contabilidad de código abierto para Linux

  4. El mejor software de pintura para Linux

  5. Obtenga el código fuente para cualquier comando de Linux

Los 15 mejores software fractal para escritorio Linux

Los 10 mejores software de inventario de red para Linux

Los 10 mejores software de geometría para el sistema Linux

Los 15 programas de ciencias de la tierra o geociencias para Linux

Los 10 mejores programas de presentación para escritorio Linux

15 mejores programas de edición de video para sistema Linux