GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Irgendeine Beat-Erkennungssoftware für Linux?

Auf der Website, die DaveParillo vorgeschlagen hat, habe ich das BpmDj-Projekt gefunden. Es hat einen bpmcount ausführbare Datei, die die BPM sehr gut berechnet:Sie verarbeitet sowohl mp3 als auch flac:

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

Das Einzige, was übrig bleibt, ist, die Sammlung neu zu taggen. Ich werde diese Antwort aktualisieren, wenn ich Erfolg habe. Danke! :)

Schritt 1

Führen Sie bpmcount aus gegen die gesamte Sammlung und speichern Sie die Ergebnisse in einer Textdatei. Das Problem ist, dass bpmcount stürzt von Zeit zu Zeit ab und versucht, bis zu 2 GB Speicher zu verbrauchen, wenn es mehrere Dateien verarbeitet, also sollten wir es nacheinander mit Dateinamen füttern. So:

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

Schritt 2

Wir benötigen einige zusätzliche Pakete:apt-get install vorbis-tools flac python-mutagen .Schauen Sie sich nun an, wie das 'bpm'-Tag hinzugefügt werden kann:

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

Leider habe ich keine *.ape-Tracks

Jetzt haben wir die BPMs und die gesamte Sammlung sollte neu getaggt werden. Hier ist das 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

Schritt 2.1 erneut besucht Hier ist ein Skript, das Ihrer Sammlung BPM-Tags hinzufügt.

Es führt einen Prozess pro CPU-Kern aus, um den Prozess zu beschleunigen. Außerdem verwendet es keine temporären Dateien und kann erkennen, ob eine Datei bereits getaggt ist.

Außerdem habe ich festgestellt, dass FLAC manchmal sowohl ID3 als auch VorbisComment enthält. Dieses Skript aktualisiert beides.

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

Genießen! :)


Dies ist ein Befehlszeilentool zum Erkennen des BPM und Einfügen in die Tags der FLAC-Datei:

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


Ich habe Kolyptos Originalskript mit bpmcount verwendet und umgeschrieben für bpm-tag (Dienstprogramm von bpm-tools ), mit der ich mehr Glück bei der Installation hatte. Ich habe auch selbst einige Verbesserungen vorgenommen.

Sie finden es auf GitHub https://github.com/meridius/bpmwrap


Linux
  1. Eine Linux-Distribution für digitale Künstler

  2. 11 Beste CAD-Software für Linux

  3. Die 10 besten Open-Source-Buchhaltungssoftware für Linux

  4. Beste Malsoftware für Linux

  5. Holen Sie sich den Quellcode für jeden Linux-Befehl

Die 15 besten Fraktal-Software für Linux-Desktop

Top 10 der besten Netzwerkinventarisierungssoftware für Linux

Top 10 der besten Geometriesoftware für Linux-Systeme

Die 15 Geowissenschafts- oder Geowissenschaftssoftware für Linux

Top 10 der besten Präsentationssoftware für Linux-Desktops

15 beste Videobearbeitungssoftware für Linux-Systeme