KBS-SoSe25-Karaoke: Unterschied zwischen den Versionen

Aus Fachschaft Informatik
Zur Navigation springen Zur Suche springen
18bittner (Diskussion | Beiträge)
Die Seite wurde neu angelegt: „{{:KunterBuntesSeminar-SoSe25/Terminseiten-Header|1|16. April}} == TL;DR == Wir erstellen neue Einträge in der UltraStar-Karaoke-Datenbank. Das kann wahlweise die private oder die von Mafiasi sein. == Too Long Did Read == Dir macht das Karaoke auf den Partys Spaß, aber der perfekte Song fehlt noch? Du möchtest dir deine eigene UltraStar-Datenbank aufbauen? Du hast Spaß daran, deinen Lieblingssong stundenlang zu hören und die Tonhöhen und -länge…“
 
18bittner (Diskussion | Beiträge)
Skript hinzugefügt
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 1: Zeile 1:
{{:KunterBuntesSeminar-SoSe25/Terminseiten-Header|1|16. April}}
{{:KunterBuntesSeminar-SoSe25/Terminseiten-Header|1|16. April}}
Zusätzlich Stream über [https://bbb.informatik.uni-hamburg.de/b/3he-jjn-kcf-ehp BBB]


== TL;DR ==
== TL;DR ==
Zeile 24: Zeile 26:
* Toni [[Benutzer:18bittner|18bittner]]
* Toni [[Benutzer:18bittner|18bittner]]


== Folien ==
== Skript ==
 
<pre><nowiki>#! /usr/bin/env bash
OUTPUTPATH=${2:-"$(pwd)"}
 
Help()
{
echo "Automatically create a folder and files for UltraStar-Karaoke from an"
echo "animux USDB txt file."
echo "Usage: ./usdl FILENAME [ULTRASTAR SONGS PATH]"
}
 
if [[ $1 == "-h" || $1 == "--help" ]]; then
        Help
        exit;
fi
 
if [ -z ${1+x} ]; then
        echo "Please provide an Animux db file."
        echo "Usage: $0 FILENAME"
        exit;
fi
 
FILENAME=$1
 
ARTIST=$(sed -n 's/^#ARTIST://p' "${FILENAME}" | tr -d "\r")
SONGNAME=$(sed -n 's/^#TITLE://p' "${FILENAME}" | tr -d "\r")
 
YTLINK=$(cat "${FILENAME}" | grep -oP 'v=\K[^,]*' | tr -d "\r")
if [ -z "${YTLINK}" ] ; then
YTLINK=$(cat "${FILENAME}" | grep -oP 'a=\K[^,]*' | tr -d "\r")
if [ -z "${YTLINK}" ] ; then
echo "No YouTube link provided! Aborting now."
exit;
fi
fi
 
COLINK=$(cat "${FILENAME}" | grep -oP 'co=\K[^,]*' | tr -d "\r")
if [ -z "${COLINK}" ] ; then
echo "No cover link provided! Will continue without cover."
sed -i '/^#COVER:/d' "${FILENAME}"
else
COBASENAME=$(basename -- "$COLINK")
COFILETYPE="${COBASENAME##*.}"
COFILENAME="${ARTIST} - ${SONGNAME} [CO].${COFILETYPE}"
fi
 
BGLINK=$(cat "${FILENAME}" | grep -oP 'bg=\K[^,]*' | tr -d "\r")
if [ -z "${BGLINK}" ] ; then
echo "No background link provided! Will continue without background."
sed -i '/^#BACKGROUND:/d' "${FILENAME}"
else
BGBASENAME=$(basename -- "$BGLINK")
BGFILETYPE="${BGBASENAME##*.}"
BGFILENAME="${ARTIST} - ${SONGNAME} [BG].${BGFILETYPE}"
fi
 
# replace MP3 and VIDEO Variables
sed -i "/^#MP3:/{h;s/:.*/:${ARTIST} - ${SONGNAME}.mp3/};\${x;/^$/{s//#MP3:${ARTIST} - ${SONGNAME}.mp3/;H};x}" "${FILENAME}"
sed -i "/^#VIDEO:/{h;s/:.*/:${ARTIST} - ${SONGNAME}.mp4/};\${x;/^$/{s//#VIDEO:${ARTIST} - ${SONGNAME}.mp4/;H};x}" "${FILENAME}"
 
mkdir "${OUTPUTPATH}/${ARTIST} - ${SONGNAME}"
echo "Starting download ..."
 
./yt-dlp -o "${OUTPUTPATH}/${ARTIST} - ${SONGNAME}/${ARTIST} - ${SONGNAME}.mp4" -f 'bestvideo[height<=720]' "${YTLINK}"
./yt-dlp -o "${OUTPUTPATH}/${ARTIST} - ${SONGNAME}/${ARTIST} - ${SONGNAME}.mp3" -x --audio-format mp3 "${YTLINK}"
 
if ! [ -z "${COLINK}" ] ; then
sed -i "/^#COVER:/{h;s/:.*/:${COFILENAME}/};\${x;/^$/{s//#COVER:${COFILENAME}/;H};x}" "${FILENAME}"
curl -# -o "${OUTPUTPATH}/${ARTIST} - ${SONGNAME}/${COFILENAME}" "${COLINK}"
fi;
if ! [ -z "${BGLINK}" ] ; then
sed -i "/^#BACKGROUND:/{h;s/:.*/:${BGFILENAME}/};\${x;/^$/{s//#BACKGROUND:${BGFILENAME}/;H};x}" "${FILENAME}"
curl -# -o "${OUTPUTPATH}/${ARTIST} - ${SONGNAME}/${BGFILENAME}" "${BGLINK}"
fi;
 
mv "${FILENAME}" "${OUTPUTPATH}/${ARTIST} - ${SONGNAME}/${ARTIST} - ${SONGNAME}.txt"


* kommen hier vsl. nach dem KBS
printf "Song erfolgreich in ${OUTPUTPATH}/${ARTIST} - ${SONGNAME} erstellt!\n"
exit</nowiki></pre>


=== Links ===
== Links ==


* [https://usdx.eu UltraStar Website]
* [https://usdx.eu UltraStar Website]

Aktuelle Version vom 16. April 2025, 17:51 Uhr

Dies ist der 1. Termin vom KunterBuntenSeminar im SoSe 25.
Ort: G-021/22
Datum: 16. April
Zeit: 18:30 Uhr bis ca. 21:00 Uhr

Zusätzlich Stream über BBB

TL;DR

Wir erstellen neue Einträge in der UltraStar-Karaoke-Datenbank. Das kann wahlweise die private oder die von Mafiasi sein.

Too Long Did Read

Dir macht das Karaoke auf den Partys Spaß, aber der perfekte Song fehlt noch? Du möchtest dir deine eigene UltraStar-Datenbank aufbauen? Du hast Spaß daran, deinen Lieblingssong stundenlang zu hören und die Tonhöhen und -längen perfekt zu einzustellen?

Wenn nur eines dieser Kriterien auf dich zutrifft, bist du bei diesem KBS genau richtig! Wir schauen uns das Programm UltraStar Deluxe an und wie wir mithilfe frei verfügbarer Tools neue Songs zu einer UltraStar-Datenbank hinzufügen können. Das kann wahlweise mithilfe einer bereits vorhandenen Modellierung aus dem Netz sein oder from scratch gemacht werden.

Nach dem Hinzufügen der Songs zur Datenbank müssen wir diese selbstverständlich auch ausprobieren.

Das KBS wird voraussichtlich hybrid angeboten (Link folgt) und möglicherweise aufgezeichnet.

Was muss ich mitbringen?

  • wenn du nur zuschauen willst: nur dich
  • wenn du selbst einen oder mehrere Songs hinzufügen willst: einen Laptop mit Linux, Windows oder macOS und ein bisschen Speicherplatz für Musikvideos (pro Eintrag solltest du mit max. 150 MB rechnen)

Vortragende

Skript

#! /usr/bin/env bash
OUTPUTPATH=${2:-"$(pwd)"}

Help()
{
		echo "Automatically create a folder and files for UltraStar-Karaoke from an"
		echo "animux USDB txt file."
		echo "Usage: ./usdl FILENAME [ULTRASTAR SONGS PATH]"
}

if [[ $1 == "-h" || $1 == "--help" ]]; then
        Help
        exit;
fi

if [ -z ${1+x} ]; then
        echo "Please provide an Animux db file."
        echo "Usage: $0 FILENAME"
        exit;
fi

FILENAME=$1

ARTIST=$(sed -n 's/^#ARTIST://p' "${FILENAME}" | tr -d "\r")
SONGNAME=$(sed -n 's/^#TITLE://p' "${FILENAME}" | tr -d "\r")

YTLINK=$(cat "${FILENAME}" | grep -oP 'v=\K[^,]*' | tr -d "\r")
if [ -z "${YTLINK}" ] ; then
		YTLINK=$(cat "${FILENAME}" | grep -oP 'a=\K[^,]*' | tr -d "\r")
		if [ -z "${YTLINK}" ] ; then
				echo "No YouTube link provided! Aborting now."
				exit;
		fi
fi

COLINK=$(cat "${FILENAME}" | grep -oP 'co=\K[^,]*' | tr -d "\r")
if [ -z "${COLINK}" ] ; then
		echo "No cover link provided! Will continue without cover."
		sed -i '/^#COVER:/d' "${FILENAME}"
else
		COBASENAME=$(basename -- "$COLINK")
		COFILETYPE="${COBASENAME##*.}"
		COFILENAME="${ARTIST} - ${SONGNAME} [CO].${COFILETYPE}"
fi

BGLINK=$(cat "${FILENAME}" | grep -oP 'bg=\K[^,]*' | tr -d "\r")
if [ -z "${BGLINK}" ] ; then
		echo "No background link provided! Will continue without background."
		sed -i '/^#BACKGROUND:/d' "${FILENAME}"
else
		BGBASENAME=$(basename -- "$BGLINK")
		BGFILETYPE="${BGBASENAME##*.}"
		BGFILENAME="${ARTIST} - ${SONGNAME} [BG].${BGFILETYPE}"
fi

# replace MP3 and VIDEO Variables
sed -i "/^#MP3:/{h;s/:.*/:${ARTIST} - ${SONGNAME}.mp3/};\${x;/^$/{s//#MP3:${ARTIST} - ${SONGNAME}.mp3/;H};x}" "${FILENAME}"
sed -i "/^#VIDEO:/{h;s/:.*/:${ARTIST} - ${SONGNAME}.mp4/};\${x;/^$/{s//#VIDEO:${ARTIST} - ${SONGNAME}.mp4/;H};x}" "${FILENAME}"

mkdir "${OUTPUTPATH}/${ARTIST} - ${SONGNAME}"
echo "Starting download ..."

./yt-dlp -o "${OUTPUTPATH}/${ARTIST} - ${SONGNAME}/${ARTIST} - ${SONGNAME}.mp4" -f 'bestvideo[height<=720]' "${YTLINK}"
./yt-dlp -o "${OUTPUTPATH}/${ARTIST} - ${SONGNAME}/${ARTIST} - ${SONGNAME}.mp3" -x --audio-format mp3 "${YTLINK}"

if ! [ -z "${COLINK}" ] ; then
		sed -i "/^#COVER:/{h;s/:.*/:${COFILENAME}/};\${x;/^$/{s//#COVER:${COFILENAME}/;H};x}" "${FILENAME}"
		curl -# -o "${OUTPUTPATH}/${ARTIST} - ${SONGNAME}/${COFILENAME}" "${COLINK}"
fi;
if ! [ -z "${BGLINK}" ] ; then
		sed -i "/^#BACKGROUND:/{h;s/:.*/:${BGFILENAME}/};\${x;/^$/{s//#BACKGROUND:${BGFILENAME}/;H};x}" "${FILENAME}"
		curl -# -o "${OUTPUTPATH}/${ARTIST} - ${SONGNAME}/${BGFILENAME}" "${BGLINK}"
fi;

mv "${FILENAME}" "${OUTPUTPATH}/${ARTIST} - ${SONGNAME}/${ARTIST} - ${SONGNAME}.txt"

printf "Song erfolgreich in ${OUTPUTPATH}/${ARTIST} - ${SONGNAME} erstellt!\n"
exit