längenzusammenstellung per programm
#6
Es ist nachts und ich habe wohl einfach zu viel Langeweile. Hier meine erste Variante wie man sowas programmieren kann:

Code:
#!/bin/bash
tempfile="/tmp/bla"
tapelength=$(( $1 * 60 ))
param=$2

if test -f $tempfile; then
    rm $tempfile
fi

for i in *.opus; do
    echo "$(soxi -D ${i}):${i}" >> $tempfile
done

if test "${param}" = "-s" ; then
    sort -r -o $tempfile $tempfile
fi

curlength=0
tapedone=0
while read song ; do
    if test $tapedone -eq 0 ; then
        songlength=$(echo $song | cut -d ":" -f 1 | cut -d "." -f 1)
        songname=$(echo $song | cut -d ":" -f 2)
        if test $curlength -lt $tapelength ; then
            newlength=$(($curlength + $songlength))
            if test $newlength -lt $tapelength ; then
                echo $songname
                curlength=$newlength
            fi
        else
            tapedone=1
        fi
    fi
done < $tempfile
rm $tempfile

Zu beachten:
- Es werden nur .opus-Dateien berücksichtigt, das kann man in der Schleife anpassen
- Es wird nicht gerundet oder exakt gerechnet, sondern die Millisekunden von den Sekunden abgeschnitten. Sollte aber zu verschmerzen sein
- Bisher arbeitet das Script noch nicht rekursiv, das kann man zum Beispiel mittels find-Befehl nachrüsten
- Über den Parameter -s kann man die Lieder so sortieren, dass die ersten Lieder zuerst aufs Band kommen
- Das von Andreas erwähnte Paket sox wird benötigt

Das Script erwartet als ersten Parameter die Länge des Bands in Minuten. Mein Vorschlag ist, das Script nach /usr/local/bin oder einen anderen Pfad innerhalb des PATH zu packen, da man es dann von jedem Ordner aus aufrufen kann.

Ein Beispielaufruf wäre dieser hier. Angenommen, man möchte das Klaus Lage-Album "Heiße Spuren" mobil auf seinem Uher Report in 19 cm/s auf Langspielband hören. Dann wären Aufruf und Ausgabe:
Code:
$ musicselector.sh 30
01_Starke-Schlaege.opus
02_Out.opus
03_Stille-Wasser.opus
04_Vermisst.opus
05_Faust-auf-Faust-Schimanski.opus

Fügt man den Parameter -s hinzu, kommen dabei die längsten Titel des Albums zuerst. Das Script entscheidet sich nun auch für andere Titel, da es nicht mehr chronologisch, sondern rein nach Länge vorgeht:
Code:
$ musicselector.sh 24 -s
11_Weihnachtszeit.opus
05_Faust-auf-Faust-Schimanski.opus
08_Universum.opus
03_Stille-Wasser.opus
06_Taxi.opus

Ich hoffe das genügt als Basis. Geht sicher deutlich besser, aber angesichts der Uhrzeit bin ich froh, überhaupt etwas lauffähiges zusammengebastelt zu haben. Können wir hier im Forum sicher noch gemeinsam an einigen Stellen verbessern oder eventuell sogar komplett anders aufbauen, ist erstmal nur eine Grundidee.

Gute Nacht euch allen, ich bin mal gespannt, was aus diesem Script wird, irgendwer hat sicher Ideen wie man es verbessern kann.
Schnürsenkelband: Teac A3300SX-2T, Revox A77 MK3, Sony TC-366, Grundig TK 3200, Grundig TK 8, Simonetta TB 491
Kassette: Onkyo TA-2870, RFT SK 3000 Hifi
--
Lieblings-Bandsorten / Empfehlungen in zufälliger Reihenfolge:
Standardband: Orwo 104, Orwo 106, Orwo 103, Orwo 100, BASF/Agfa PER-528
Langspielband: BASF/Agfa PER-368, LPR-35, Agfa PE-31/PE-36/PE-39
Doppelspielband: Orwo 120, BASF LGS-26, Agfa PE-41/PE-46/PE-49
Dreifachspielband: Orwo 130
Zitieren


Nachrichten in diesem Thema
RE: längenzusammenstellung per programm - von eudatux23 - 24.10.2021, 02:25

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste