GNU/Linux >> Belajar Linux >  >> Linux

Adakah perangkat lunak pendeteksi ketukan untuk Linux?

Di situs DaveParillo menyarankan saya telah menemukan proyek BpmDj. Ini memiliki bpmcount dapat dieksekusi yang menghitung bpm dengan sangat baik:ia menangani mp3 dan juga flac:

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

Satu-satunya yang tersisa adalah memberi tag ulang pada koleksi. Saya akan memperbarui jawaban ini setiap kali saya berhasil. Terima kasih! :)

Langkah 1

Jalankan bpmcount terhadap seluruh koleksi dan menyimpan hasilnya ke file teks. Masalahnya adalah bpmcount crash dari waktu ke waktu dan mencoba memakan hingga 2GB memori ketika memproses beberapa file jadi kita harus memberi makan dengan nama file satu per satu. Seperti ini:

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

Langkah 2

Kami memerlukan beberapa paket tambahan:apt-get install vorbis-tools flac python-mutagen .Sekarang lihat bagaimana tag 'bpm' dapat ditambahkan:

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

Sayangnya, saya tidak punya *.ape track

Sekarang kami memiliki BPM dan seluruh koleksi harus diberi tag ulang. Berikut skripnya:

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

Langkah 2.1 Tinjau Ulang Berikut skrip yang akan menambahkan tag BPM ke koleksi Anda.

Ini menjalankan satu proses per CPU Core untuk membuat proses lebih cepat. Selain itu, tidak menggunakan file sementara dan mampu mendeteksi apakah file sudah diberi tag.

Selain itu, saya menemukan bahwa FLAC terkadang memiliki ID3 dan VorbisComment di dalamnya. Skrip ini memperbarui keduanya.

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

Menikmati! :)


Ini adalah alat baris perintah untuk mendeteksi BPM dan memasukkannya ke dalam tag file FLAC:

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


Saya menggunakan skrip asli kolypto menggunakan bpmcount dan menulis ulang untuk bpm-tag (kegunaan bpm-tools ) yang saya lebih beruntung menginstalnya. Saya juga membuat beberapa perbaikan sendiri.

Anda dapat menemukannya di GitHub https://github.com/meridius/bpmwrap


Linux
  1. Distro Linux untuk seniman digital

  2. FreeCAD – Perangkat Lunak Pemodelan dan Desain 3D untuk Linux

  3. 11 Perangkat Lunak CAD Terbaik untuk Linux

  1. 10 Software Akuntansi Open Source Terbaik untuk Linux

  2. Perangkat Lunak Lukisan Terbaik untuk Linux

  3. Dapatkan Kode Sumber untuk Perintah Linux apa pun

  1. 5 Software Blogging Terbaik untuk Linux Desktop

  2. Perangkat lunak ekstraksi otomatis untuk Linux?

  3. Apakah ada perangkat lunak desktop jarak jauh yang dapat diakses melalui browser untuk linux?