24.10.2021, 02:25
Es ist nachts und ich habe wohl einfach zu viel Langeweile. Hier meine erste Variante wie man sowas programmieren kann:
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:
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:
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.
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
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