GNU/Linux >> Znalost Linux >  >> Linux

Nějaký software pro detekci rytmu pro Linux?

Na webu DaveParillo navrhl, že jsem našel projekt BpmDj. Má bpmcount spustitelný soubor, který počítá tepy za minutu velmi pěkně:zvládá mp3 i flac:

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

Jediné, co zbývá, je přetagovat sbírku. Tuto odpověď aktualizuji, kdykoli se mi to podaří. Díky! :)

Krok 1

Spusťte bpmcount proti celé kolekci a uložit výsledky do textového souboru. Problém je v tom, že bpmcount čas od času se zhroutí a pokusí se sníst až 2 GB paměti, když zpracovává několik souborů, takže bychom jej měli dávat názvy souborů jeden po druhém. Takhle:

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

Krok 2

Budeme potřebovat nějaké další balíčky:apt-get install vorbis-tools flac python-mutagen .Nyní se podívejte, jak lze přidat značku 'bpm':

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

Bohužel, nemám žádné stopy *.ape

Nyní máme BPM a celá sbírka by měla být přeznačena. Zde je skript:

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

Znovu zkontrolován krok 2.1 Zde je skript, který přidá značky BPM do vaší sbírky.

Spouští jeden proces na jádro CPU, aby byl proces rychlejší. Navíc nepoužívá žádné dočasné soubory a je schopen zjistit, zda je soubor již označen.

Navíc jsem zjistil, že FLAC má někdy uvnitř jak ID3, tak VorbisComment. Tento skript aktualizuje oba.

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

Užívat si! :)


Toto je nástroj příkazového řádku pro detekci BPM a vložení do značek souboru FLAC:

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


Použil jsem původní skript kolypto pomocí bpmcount a přepsal jej na bpm-tag (utilita bpm-tools ), který jsem měl s instalací větší štěstí. Také jsem provedl několik vlastních vylepšení.

Najdete ho na GitHubu https://github.com/meridius/bpmwrap


Linux
  1. Linuxová distribuce pro digitální umělce

  2. FreeCAD – 3D modelovací a návrhářský software pro Linux

  3. Software pro automatickou extrakci pro Linux?

  1. 11 nejlepších CAD softwaru pro Linux

  2. 10 nejlepších Open Source účetního softwaru pro Linux

  3. Nejlepší software pro malování pro Linux

  1. Získejte zdrojový kód pro jakýkoli příkaz Linux

  2. 5 nejlepších blogovacích programů pro Linux Desktop

  3. Existuje nějaký software pro vzdálenou plochu přístupný přes prohlížeč pro linux?