===== Spaß mit dem Ravensburger Tiptoi® Stift ===== ==== Quellen ==== * Homepage von [[http://tttool.entropia.de/|''tttool'']] * [[https://github.com/entropia/tip-toi-reveng#installation|Installation]] von ''tttool'' ==== Tiptoi® als MP3 Player ==== Leider kann der Ravensburger TipToi® Stift keine MP3 Dateien wie ein klassischer MP3-Player abspielen. Ravensbrger begründet das in seinen [[https://www.tiptoi.com/de/tiptoi-service/fragen-und-antworten/fragen-zum-tiptoi-stift-mit-player/index.html|FAQ]] wie folgt:\\ Zitat:\\ //Frage: Kann ich auch Audioinhalte von anderen Abspielgeräten auf den tiptoi® Stift mit Player ziehen?\\ Antwort: Um eine verlässliche Qualität der Audioinhalte zu gewährleisten, haben wir uns für ein geschlossenes System mit eigenem Dateiformat entschieden. Dies hat den Vorteil, dass keine von Eltern ungewünschten Inhalte auf den Stift gelangen. Daher ist es nicht möglich, eigene Hörbücher und Lieder auf dem tiptoi® Stift zu speichern.\\// \\ Schade - aber nicht zu ändern.\\ Zum Glück gibt es Joachim “nomeata” Breitner der die Software [[http://tttool.entropia.de/|''tttool'']] erstellt hat. Mit Hilfe dieser Software ist es möglich, eigene Audiodateien z.B. Hörbücher o.ä. auf den TipToi® Stift zu bringen. Mehr dazu auf seiner [[http://tttool.entropia.de/|Webseite]]. === Installation von ''tttool'' === Die Installation von ''tttool'' wird u.a. [[https://github.com/entropia/tip-toi-reveng#installation|hier]] verständlich erklärt. Daher gehe ich hier nicht näher darauf ein.\\ Im Folgenden sind lediglich meine Installationsschritte aufgeführt. Ich arbeite ausschließlich auf einem Ubuntu 16.04 LTS 64bit ;-) git clone https://github.com/entropia/tip-toi-reveng.git ~/bin/tttool_src cd ~/bin/tttool_src # falls noch nicht installiert: apt-get install haskell-platform libncurses5-dev cabal update cabal install --only-dependencies cabal install --bindir=. cd ~/bin ln -s tttool_src/tttool tttool ==== Ein Shell Script das ALLES macht ==== === Voraussetzungen === Folgende Programmen müssen zur erfolgreichen Abarbeitung des folgenden Skriptes installiert sein: * ''tttool'' ist installiert und im Suchpfad (z.B. ''/bin'') enthalten * Das Grafikmanipulationspaket ''ImageMagick'' ist min. in Version 7.x installiert. Bis Version 6.8.9.x gibt es leider einen Bug im Tool ''convert'' welches für die Erzeugung verschiedener Grafikelemente verwendet wird. Der Bug führt zu einer fehlerhaften Grafik. * Das Programm ''oggenc'' zum kodieren vom Wave- ins Ogg-Format * ''rec'', ein Kommandozeilen-Tool zum erstellen einer "Stille"-Datei Einzig folgende Dateien müssen vom Benutzer bereit gestellt werden: * die Quelldateien (*.wav) z.B. eines Hörspieles * eine Bilddatei, z.B. das passende CD Cover (meistens leicht per Google zu finden) * eine Begrüßungsdatei im Wave- oder Ogg-Format Die Begrüßungsdatei sollte möglichst nicht länger als ein paar Sekunden. Diese Datei wird beim Aktivieren des Hörbuches, also beim "berühren" des entsprechenden ''Start''-Symbols abgespielt - quasi als akustisches Feedback für Kinder. Damit sie wissen was sie ausgewählt haben.\\ Ich erstelle diese Begrüßungsdatei höufig aus den ersten Sekunden eines Titelliedes oder dem ersten Track einer Hörbuch-CD.\\ [{{ projekte:printable_image.png?500|Automatisch generierte Grafik}}] === Skriptaufruf === Gestartet wird das Skript z.B. wie folgt: ./gen_gme.sh -w ../tiptoi_test -c "Kokosnuss - Expedition auf dem Nil" -pid 713 -d 2 Die Parameter im einzelnen: * -c: "Comment" - also ein Kommentar für die YAML-Datei, wird auch als Dateiname für die GME-Datei verwendet. Bei Verwendung von Leerzeichen bitte den Kommentar in Anführungszeichen setzten * -w: "Working Directory" oder "Arbeitsverzeichnis", hier liegt der Ordner ''WAV'' mit den Quelldateien z.B. eines Hörspieles. Auch hier gilt: bei Verwendung von Leerzeichen bitte den Verzeichnispfad in Anführungszeichen setzten * -pid: "Product ID" - eindeutige ID des eingenen/neuen Produktes. Wird benötigt zur eindeutigen Zuordnung der GME-Datei. Die Product-ID darf noch nicht von einem Produkt das sich bereits auf dem TipToi Stift befindet verwendet werden. Anderenfalls gibt es durch die Doppeldeutigkeit Probleme bei der Produktauswahl und bei der Steuerung. * -d: "Debug Level" - wenn mal was nicht klappt kann mit diesem Parameter evtl. hilfreiche DEbug-Ausgaben erzeugt werden === Ausgaben des Skriptes === * Eine GME-Datei - sie muss ins Wurzelverzeichnis des TipToi® Stiftes kopiert werden * Eine *.png Datei - eine Grafikdatei zur "Steuerung" des TipToi® Stiftes, sie ist mit einer Auflösung von **600 dpi** erstellt und **muss unbedingt in dieser Auflösung gedruckt werden** (z.B. mit Hilfe von [[https://www.gimp.org/|GIMP]]). Anderenfalls kann der TipToi® Stifte die Punktmuster der OIDs nicht fehlerfrei lesen. * Die *.yaml Datei welche für die Erstellung der *.gme Datei verwendet wurde === Quellcode === #!/bin/bash # # Input files, supplied by user: COVER="cover.jpg" OPENING_SOUND="Titel" NULLSOUND="silence" SHEETSIZE="7016x4960" BUTTON_H_POSITION=4015 BUTTON_V_POSITION=600 BUTTON_H_OFFSET=0 BUTTON_V_OFFSET=170 OID_H_POSITION=4015 OID_V_POSITION=600 OID_H_OFFSET=0 OID_V_OFFSET=170 TEXT_H_POSITION=4250 TEXT_V_POSITION=700 TEXT_H_OFFSET=0 TEXT_V_OFFSET=170 PRODUCT_ID_H_POS=5100 PRODUCT_ID_V_POS=4800 COPYRIGHT_H_POSITION=6000 COPYRIGHT_V_POSITION=4800 COVER_MAX_WIDTH=3300 COVER_MAX_HEIGHT=3300 COVER_SIZE="${COVER_MAX_WIDTH}x${COVER_MAX_HEIGHT}" TRACKBUTTON_WIDTH=189 TRACKBUTTON_HEIGHT=142 TRACKBUTTONSIZE="${TRACKBUTTON_WIDTH}x${TRACKBUTTON_HEIGHT}" CONTROLBUTTON_WIDTH=600 CONTROLBUTTON_HEIGHT=600 CONTROLBUTTONSIZE="${CONTROLBUTTON_WIDTH}x${CONTROLBUTTON_HEIGHT}" BUTTON_STROKEWIDTH=12 BUTTON_FONT_SIZE=120 TEXT_FONT_SIZE=$BUTTON_FONT_SIZE PRODUCT_ID="" STARTSCRIPTCODE=7000 COMMENT="" TRACKS=0 COUNTER=0 DEBUG_MAX_LEVEL=3 DEBUG_LEVEL=0 WORKFOLDER="" MESSAGE_METHOD="" TRACKLIST="tracklist.txt" # special folders to use: #TEMPLATES="templates" OIDS="oids" OGGS="ogg" WAVES="WAV" # Output file for printing OUTPUT="" # tttool config file to generate: YAML_FILE="" # Functions needed to do all jobs ;-) check_tools () { command -v $1 >/dev/null 2>&1 || { echo "The required tool $1 is not installed. Aborting." >&2; exit 1; } } debug () # Print debug output if needed { MESSAGE=$1 DEBUG_MESSAGE_LEVEL=$2 LINEFEED=$3 if [ $DEBUG_LEVEL -le -1 ] || [ $DEBUG_LEVEL -gt $DEBUG_MAX_LEVEL ] ; then echo "Error - wrong debug level selected - EXIT!" exit 1 else if [ $((DEBUG_MESSAGE_LEVEL)) -le $((DEBUG_LEVEL)) ]; then echo $LINEFEED "$MESSAGE" fi fi } desktop_message () { MESSAGE=$1 if [ ! -z `command -v notify-send` ]; then notify-send "$MESSAGE" else if [ ! -z `command -v zenity` ]; then zenity --notification --text "$MESSAGE" else echo "$MESSAGE" fi fi } cleanup () # Clean up all temporarily generated files { debug "Cleaning up $1 ... " 1 -n case $1 in output) if [ -f $WORKFOLDER/$OUTPUT ]; then debug " - \"$WORKFOLDER/$OUTPUT\" - " 2 -n rm $WORKFOLDER/$OUTPUT rm $WORKFOLDER/$YAML_FILE rm $WORKFOLDER/*.gme else debug " - no \"$WORKFOLDER/$OUTPUT\" file found - " 2 -n fi ;; tracklist) if [ -e $WORKFOLDER/$TRACKLIST ]; then debug " - \"$WORKFOLDER/$TRACKLIST\" - " 2 -n rm $WORKFOLDER/$TRACKLIST else debug " - no \"$WORKFOLDER/$TRACKLIST\" file found - " 2 -n fi ;; cover) if [ -e $WORKFOLDER/cover_resized.jpg ]; then debug " - \"$WORKFOLDER/cover_resized.jpg\" - " 2 -n rm $WORKFOLDER/cover_resized.jpg else debug " - no \"$WORKFOLDER/cover_resized.jpg\" file found - " 2 -n fi ;; ogg) if [ -d $WORKFOLDER/$OGGS ]; then debug " - \"$WORKFOLDER/$OGGS\" folder - " 2 -n rm $WORKFOLDER/$OGGS/*.ogg rmdir $WORKFOLDER/$OGGS else debug " - no \"$WORKFOLDER/$OGGS\" folder found - " 2 -n fi ;; oids) if [ -d $WORKFOLDER/$OIDS ]; then debug " - \"$WORKFOLDER/$OIDS\" folder - " 2 -n rm $WORKFOLDER/$OIDS/*.png rmdir $WORKFOLDER/$OIDS else debug " - no \"$WORKFOLDER/$OIDS\" folder found - " 2 -n fi ;; *) ;; esac debug " done" 1 } mk_ogg_files() { if [ $DEBUG_LEVEL -le 1 ]; then debug "Makeing *.ogg files ..." 1 -n else debug "Makeing *.ogg files ..." 1 fi if [ ! -d "$WORKFOLDER/$OGGS" ]; then mkdir -p $WORKFOLDER/$OGGS fi if [ -d "$WORKFOLDER/$WAVES" ]; then for wavefile in $WORKFOLDER/$WAVES/*.wav do COUNTER=$((COUNTER+1)) debug "File to prepare: $wavefile ... " 2 -n basename "$wavefile" | cut -f2 -d'/' | cut -f1 -d'.' | sed -e 's/_/ /g' >> $WORKFOLDER/$TRACKLIST oggenc -Q -b 128 "${wavefile}" -o $WORKFOLDER/$WAVES/$(printf "Track_%02d.ogg" $COUNTER) mv "$WORKFOLDER/$WAVES/$(printf "Track_%02d.ogg" $COUNTER)" $WORKFOLDER/$OGGS/ debug " done" 2 done else echo "Source folder \"$WORKFOLDER/$WAVES\" for wave files not found -> EXIT!" exit 1 fi # save number of tracks TRACKS=$COUNTER if [ ! -f $WORKFOLDER/${NULLSOUND}.ogg ]; then debug "File \"$WORKFOLDER/${NULLSOUND}.ogg\" not found - generating it" 2 rec $WORKFOLDER/${NULLSOUND}.wav trim 0 0.1 2> /dev/null oggenc -Q -b 128 $WORKFOLDER/${NULLSOUND}.wav > /dev/null rm $WORKFOLDER/${NULLSOUND}.wav fi if [ -f $WORKFOLDER/$OGGS/${NULLSOUND}.ogg ]; then rm $WORKFOLDER/$OGGS/${NULLSOUND}.ogg fi cp $WORKFOLDER/${NULLSOUND}.ogg $WORKFOLDER/$OGGS/${NULLSOUND}.ogg if [ ! -f $WORKFOLDER/${OPENING_SOUND}.wav ] && [ ! -f $WORKFOLDER/${OPENING_SOUND}.ogg ] ; then echo "Error: Opening sound \"${OPENING_SOUND}.wav\" or \"${OPENING_SOUND}.ogg\" in \"$WORKFOLDER\" not found -> EXIT!" exit 1 else if [ -f $WORKFOLDER/${OPENING_SOUND}.wav ] && [ ! -f $WORKFOLDER/${OPENING_SOUND}.ogg ]; then debug "Encoding \"${OPENING_SOUND}.wav\" ... " 2 -n oggenc -Q -b 128 $WORKFOLDER/${OPENING_SOUND}.wav > /dev/null debug " done" 2 fi fi cp $WORKFOLDER/${OPENING_SOUND}.ogg $WORKFOLDER/$OGGS debug " done" 1 } mk_yaml_file() { if [ $DEBUG_LEVEL -le 1 ]; then debug "Generating \"$WORKFOLDER/$YAML_FILE\" ... " 1 -n else debug "Generating \"$WORKFOLDER/$YAML_FILE\" ... " 1 fi if [ -f $WORKFOLDER/$YAML_FILE ]; then rm $WORKFOLDER/$YAML_FILE fi echo "product-id: $PRODUCT_ID" >> $WORKFOLDER/$YAML_FILE echo "media-path: ${OGGS}/%s" >> $WORKFOLDER/$YAML_FILE echo comment: $COMMENT >> $WORKFOLDER/$YAML_FILE echo "init: \$track := 0" >> $WORKFOLDER/$YAML_FILE echo "welcome: `eval basename $WORKFOLDER/$OPENING_SOUND | cut -f1 -d'.'`" >> $WORKFOLDER/$YAML_FILE echo "scripts:" >> $WORKFOLDER/$YAML_FILE echo " play:" >> $WORKFOLDER/$YAML_FILE COUNTER=0 echo " - \$track == $COUNTER? \$track := $((COUNTER+1)) J(play)" >> $WORKFOLDER/$YAML_FILE COUNTER=$((COUNTER+1)) while [ $COUNTER -le $TRACKS ]; do echo " - \$track == $COUNTER? P($(printf "Track_%02d" $COUNTER)) \$track := $((COUNTER+1)) J(play)" >> $WORKFOLDER/$YAML_FILE COUNTER=$((COUNTER+1)) done echo " - \$track == $COUNTER? P(`eval basename $WORKFOLDER/$NULLSOUND | cut -f1 -d'.'`) \$track := 0 J(play)" >> $WORKFOLDER/$YAML_FILE echo " previous:" >> $WORKFOLDER/$YAML_FILE echo " - \$track > 2? P(`eval basename $WORKFOLDER/$NULLSOUND | cut -f1 -d'.'`) \$track -= 2 J(play)" >> $WORKFOLDER/$YAML_FILE echo " next:" >> $WORKFOLDER/$YAML_FILE echo " - P(`eval basename $WORKFOLDER/$NULLSOUND | cut -f1 -d'.'`) J(play)" >> $WORKFOLDER/$YAML_FILE echo " stop:" >> $WORKFOLDER/$YAML_FILE echo " - P(`eval basename $WORKFOLDER/$NULLSOUND | cut -f1 -d'.'`) \$track := 0" >> $WORKFOLDER/$YAML_FILE COUNTER=1 while [ $COUNTER -le $TRACKS ]; do echo " $(printf "track_%02d" $COUNTER):" >> $WORKFOLDER/$YAML_FILE echo " - P(`eval basename $WORKFOLDER/$NULLSOUND | cut -f1 -d'.'`) \$track := $COUNTER J(play)" >> $WORKFOLDER/$YAML_FILE COUNTER=$((COUNTER+1)) done echo "scriptcodes:" >> $WORKFOLDER/$YAML_FILE echo " play: $((STARTSCRIPTCODE+1))" >> $WORKFOLDER/$YAML_FILE echo " previous: $((STARTSCRIPTCODE+2))" >> $WORKFOLDER/$YAML_FILE echo " next: $((STARTSCRIPTCODE+3))" >> $WORKFOLDER/$YAML_FILE echo " stop: $((STARTSCRIPTCODE+4))" >> $WORKFOLDER/$YAML_FILE COUNTER=1 while [ $COUNTER -le $TRACKS ]; do echo " $(printf "track_%02d" $COUNTER): $((STARTSCRIPTCODE+4+$COUNTER))" >> $WORKFOLDER/$YAML_FILE COUNTER=$((COUNTER+1)) done debug " done" 1 } mk_oids() { if [ $DEBUG_LEVEL -le 1 ]; then debug "Generating OIDs ..." 1 -n else debug "Generating OIDs ..." 1 fi if [ ! -d $WORKFOLDER/$OIDS ]; then mkdir -p $WORKFOLDER/$OIDS fi debug "Using YAML-File: $WORKFOLDER/$YAML_FILE" 2 if [ $DEBUG_LEVEL -le 1 ]; then tttool --dpi 600 --code-dim 8x6 oid-codes $WORKFOLDER/$YAML_FILE > /dev/null else tttool --dpi 600 --code-dim 8x6 oid-codes $WORKFOLDER/$YAML_FILE fi mv *track*.png $WORKFOLDER/$OIDS if [ $DEBUG_LEVEL -le 1 ]; then tttool --dpi 600 --code-dim 25x25 oid-codes $WORKFOLDER/$YAML_FILE > /dev/null else tttool --dpi 600 --code-dim 25x25 oid-codes $WORKFOLDER/$YAML_FILE fi rm *track*.png mv *.png $WORKFOLDER/$OIDS debug " done" 1 } mk_gme() { debug "Generate GME-file ... " 1 -n tttool assemble $WORKFOLDER/$YAML_FILE debug " done" 1 } mk_base_image() { debug "Generate printable image ..." 1 -n convert $WORKFOLDER/$COVER -resize $COVER_SIZE\! $WORKFOLDER/cover_resized.jpg convert -size $SHEETSIZE xc:white $WORKFOLDER/$OUTPUT convert -size $CONTROLBUTTONSIZE xc:white -fill white -stroke black -strokewidth 30 -draw "roundrectangle 15,15 585,585 30,30\ stroke-linecap round line 150,150 450,300\ stroke-linecap round line 450,300 150,450\ stroke-linecap round line 150,450 150,150" $WORKFOLDER/play.png convert -size $CONTROLBUTTONSIZE xc:white -fill white -stroke black -strokewidth 30 -draw "roundrectangle 15,15 585,585 30,30\ stroke-linecap round line 150,150 450,150\ stroke-linecap round line 450,150 450,450\ stroke-linecap round line 450,450 150,450\ stroke-linecap round line 150,450 150,150" $WORKFOLDER/stop.png convert -size $CONTROLBUTTONSIZE xc:white -fill white -stroke black -strokewidth 30 -draw "roundrectangle 15,15 585,585 30,30\ stroke-linecap round line 150,150 200,150\ stroke-linecap round line 200,150 200,300\ stroke-linecap round line 200,300 450,150\ stroke-linecap round line 450,150 450,450\ stroke-linecap round line 450,450 200,300\ stroke-linecap round line 200,300 200,450\ stroke-linecap round line 200,450 150,450\ stroke-linecap round line 150,450 150,150" $WORKFOLDER/previous.png convert -size $CONTROLBUTTONSIZE xc:white -fill white -stroke black -strokewidth 30 -draw "roundrectangle 15,15 585,585 30,30\ stroke-linecap round line 150,150 400,300\ stroke-linecap round line 400,300 400,150\ stroke-linecap round line 400,150 450,150\ stroke-linecap round line 450,150 450,450\ stroke-linecap round line 450,450 400,450\ stroke-linecap round line 400,450 400,300\ stroke-linecap round line 400,300 150,450\ stroke-linecap round line 150,450 150,150" $WORKFOLDER/next.png convert -size $CONTROLBUTTONSIZE xc:white -fill white -stroke black -strokewidth 30 -draw "roundrectangle 15,15 585,585 30,30"\ -stroke black -strokewidth 50 -draw "stroke-linecap round ellipse 300,300 200,200 305,235"\ -stroke black -strokewidth 50 -draw "stroke-linecap round line 300,65 300,180" $WORKFOLDER/on.png composite -geometry +600+1200 $WORKFOLDER/cover_resized.jpg $WORKFOLDER/$OUTPUT $WORKFOLDER/$OUTPUT composite -geometry +600+600 $WORKFOLDER/on.png $WORKFOLDER/$OUTPUT $WORKFOLDER/$OUTPUT rm $WORKFOLDER/on.png composite -geometry +600+600 $WORKFOLDER/$OIDS/oid-${PRODUCT_ID}-START.png $WORKFOLDER/$OUTPUT $WORKFOLDER/$OUTPUT composite -geometry +1275+600 $WORKFOLDER/play.png $WORKFOLDER/$OUTPUT $WORKFOLDER/$OUTPUT rm $WORKFOLDER/play.png composite -geometry +1275+600 $WORKFOLDER/$OIDS/oid-${PRODUCT_ID}-play.png $WORKFOLDER/$OUTPUT $WORKFOLDER/$OUTPUT composite -geometry +1950+600 $WORKFOLDER/stop.png $WORKFOLDER/$OUTPUT $WORKFOLDER/$OUTPUT rm $WORKFOLDER/stop.png composite -geometry +1950+600 $WORKFOLDER/$OIDS/oid-${PRODUCT_ID}-stop.png $WORKFOLDER/$OUTPUT $WORKFOLDER/$OUTPUT composite -geometry +2625+600 $WORKFOLDER/previous.png $WORKFOLDER/$OUTPUT $WORKFOLDER/$OUTPUT rm $WORKFOLDER/previous.png composite -geometry +2625+600 $WORKFOLDER/$OIDS/oid-${PRODUCT_ID}-previous.png $WORKFOLDER/$OUTPUT $WORKFOLDER/$OUTPUT composite -geometry +3300+600 $WORKFOLDER/next.png $WORKFOLDER/$OUTPUT $WORKFOLDER/$OUTPUT rm $WORKFOLDER/next.png composite -geometry +3300+600 $WORKFOLDER/$OIDS/oid-${PRODUCT_ID}-next.png $WORKFOLDER/$OUTPUT $WORKFOLDER/$OUTPUT convert $WORKFOLDER/$OUTPUT -font Times-Roman -pointsize $TEXT_FONT_SIZE -draw "fill black text +$PRODUCT_ID_H_POS+$PRODUCT_ID_V_POS 'Product ID: $PRODUCT_ID" $WORKFOLDER/$OUTPUT convert $WORKFOLDER/$OUTPUT -font Times-Roman -pointsize $TEXT_FONT_SIZE -draw "fill black text +$COPYRIGHT_H_POSITION+$COPYRIGHT_V_POSITION 'Created by ChrvTh" $WORKFOLDER/$OUTPUT debug " done" 1 } mk_trackbuttons() { COUNTER=1 debug "Generating track buttons and adding them to printable image ..." 1 -n while [ $COUNTER -le $TRACKS ]; do debug "COUNTER: $COUNTER" 3 debug "TRACKS: $TRACKS" 3 debug "BUTTON H: $BUTTON_H_POSITION" 3 debug "BUTTON V: $BUTTON_V_POSITION" 3 convert -size $TRACKBUTTONSIZE xc:white -fill white -stroke black -strokewidth $BUTTON_STROKEWIDTH -draw "roundrectangle 0,0 $TRACKBUTTON_WIDTH,$TRACKBUTTON_HEIGHT 30,30" $WORKFOLDER/$(printf "track_%02d" $COUNTER)_button.png convert $WORKFOLDER/$(printf "track_%02d" $COUNTER)_button.png -font Arial -pointsize $BUTTON_FONT_SIZE -draw "fill black text +30+115 '$(printf "%02d" $COUNTER)" $WORKFOLDER/$(printf "track_%02d" $COUNTER)_button.png composite -geometry +$BUTTON_H_POSITION+$BUTTON_V_POSITION $WORKFOLDER/$(printf "track_%02d" $COUNTER)_button.png $WORKFOLDER/$OUTPUT $WORKFOLDER/$OUTPUT rm $WORKFOLDER/$(printf "track_%02d" $COUNTER)_button.png composite -geometry +$OID_H_POSITION+$OID_V_POSITION $WORKFOLDER/$OIDS/oid-$PRODUCT_ID-$(printf "track_%02d" $COUNTER).png $WORKFOLDER/$OUTPUT $WORKFOLDER/$OUTPUT rm $WORKFOLDER/$OIDS/oid-$PRODUCT_ID-$(printf "track_%02d" $COUNTER).png convert $WORKFOLDER/$OUTPUT -font Times-Roman -pointsize $TEXT_FONT_SIZE -draw "fill black text +$TEXT_H_POSITION+$TEXT_V_POSITION '`eval sed '$COUNTER!d' $WORKFOLDER/$TRACKLIST`'" $WORKFOLDER/$OUTPUT COUNTER=$((COUNTER+1)) BUTTON_H_POSITION=$((BUTTON_H_POSITION+$BUTTON_H_OFFSET)) BUTTON_V_POSITION=$((BUTTON_V_POSITION+$BUTTON_V_OFFSET)) OID_H_POSITION=$((OID_H_POSITION+$OID_H_OFFSET)) OID_V_POSITION=$((OID_V_POSITION+$OID_V_OFFSET)) TEXT_H_POSITION=$((TEXT_H_POSITION+$TEXT_H_OFFSET)) TEXT_V_POSITION=$((TEXT_V_POSITION+$TEXT_V_OFFSET)) done debug " done" 1 } ## Main while [ $# -ne 0 ]; do case $1 in -c) shift if [ ! "$1" ]; then echo "No comment given -> EXIT!" exit 1 else case "$1" in *\ * ) COMMENT=`eval echo "$1" | sed -e 's/ /_/g'` YAML_FILE=${COMMENT}.yaml OUTPUT="${COMMENT}.png" ;; *) COMMENT="$1" YAML_FILE="$1.yaml" OUTPUT="$1.png" ;; esac fi shift ;; -d) shift if [ "$1" -eq "$1" ] 2>/dev/null ; then DEBUG_LEVEL=$1 else echo "No debug level given! -> EXIT!" exit 1 fi shift ;; -h) echo "usage: $0 [ARGUMENTS] " echo "-c [TEXT]: Comment which is used in gme-file" echo "-d [n]: Debug output with level n (0...3)" echo "-h - this help ;-)" echo "-pid [nnn] - Product ID to use e.g. 701 " echo "-w [path to working folder] - Working folder. All operations will be performed in this folder. The source folder for wave files will be expected here." echo "" echo "" echo "" echo "" exit 0 ;; -pid) shift if [ -n "$1" ]; then if [ "$1" -eq "$1" ] 2>/dev/null ; then PRODUCT_ID="$1" else echo "Error - no product ID given -> EXIT!" exit 1 fi else echo "Error - no product ID given -> EXIT!" exit 1 fi shift ;; -w) shift if [ -e "$1" ] || [ ! "$1" ] ; then WORKFOLDER=$1 shift else echo "Given work folder does not exist or is not accessible -> EXIT!" exit 1 fi ;; *) echo "Parameter \"$1\" unkown -> exit!" shift exit 1 ;; esac done if [ $DEBUG_LEVEL -le 1 ]; then echo -n "Generating $COMMENT.gme ... " else echo "Generating $COMMENT.gme ... " fi if [ -z $PRODUCT_ID ]; then echo "Error - no product ID given -> EXIT!" exit 1 else debug "Product-ID: $PRODUCT_ID" 1 fi if [ -z $COMMENT ]; then echo "Error - no comment given -> EXIT!" exit 1 else debug "Comment: $COMMENT" 1 debug "Output: $OUTPUT" 1 debug "YAML: $YAML_FILE" 1 fi check_tools tttool check_tools oggenc check_tools composite check_tools convert check_tools rec check_tools notify-send check_tools zenity cleanup cover cleanup tracklist cleanup output cleanup ogg cleanup oids mk_ogg_files mk_yaml_file mk_oids mk_gme mk_base_image mk_trackbuttons desktop_message "GME file generated" cleanup cover cleanup tracklist cleanup templates cleanup ogg cleanup oids echo "done!" echo "" echo "GME file generated - please copy ${COMMENT}.gme to your TipToi device and print out $OUTPUT by using 600 dpi printing resolution!" echo "" Nicht vergessen ''gen_gme.sh'' mit ''chmod +x gen_gme.sh'' auch ausführbar zu machen ;-)