[Tiptoi] Umgang mit Registern

Renė Reichardt hp.reichardt at gmail.com
Di Nov 20 13:27:25 CET 2018


Hallo Marcus,

Ich bin begeistert! Das ist genau das, was ich gesucht habe. Ich habe es erst mal mit deiner Version und OIDs, dich irgendwo noch ausgedruckt rumliegen hatte, probiert.
Du schreibst, dass nach zehn Wochen Schluss ist. Heißt das, dass man nicht mehr als zehn Worte benutzen kann? Oder aufgrund der einzelnen Funktionen pro Wort diese Begrenzung aufgehoben ist?

Ich arbeite mit Lernbeeinträchtigten Menschen (autisten, die nicht sprechen und anderen geistigen Behinderungen) und würde diese Methode auch gern für die Arbeit nutzen wollen, da es eine günstige Alternative zu einem Torgau ist.
Aber ich schätze mal, dass Ravensburger da nicht mitmachen wird.🤨

Ich spiele gerade ein bisschen mit der von dir erstellten Version herum und versuche über Piktogramme eine Grammatik einzubauen. Ich werde dem Kleinen das dann mal vorsetzen und berichten.

Vielen vielen Dank!

Liebe Grüße, René

Outlook für iOS<https://aka.ms/o0ukef> beziehen

________________________________
Von: tiptoi <tiptoi-bounces at lists.nomeata.de> im Auftrag von "Markus Heiße" <markus-heisse at gmx.de>
Gesendet: Montag, November 19, 2018 10:49 AM
An: tiptoi at lists.nomeata.de
Betreff: Re: [Tiptoi] Umgang mit Registern

Guten Tag,

ich habe meinen Ansatz umgesetzt (wollte selber wissen, ob das so gehen würde). Das ganze basiert auf einer Exceldatei, in der welcher man in den Spalten A:C die Kernelemente (Produkt anmelden; Auswahl vorlesen lassen; Auswahl löschen; ...) untereinander auflisten kann und den Spalten E:G in welchen man eine Bezeichnung (Mama, Papa, etc), den Code (für die OID) sowie eine Audio-Datei (diese muss dann später im "Audio" Ordner hinterlegt werden) eintragen kann. Das ganze beliebig erweiterbar nach unten. In meinem Beispiel habe ich 15 Wörter verwendet. Die Anzahl der Wörter wird ausgelesen und die Sätze können dementsprechend lang werden.

Im Spiel selber gibt es 3 Wesentliche Variablen (bzw. Register nennt ihr das?)
$GesamtAnzahlWorte  --> Legt fest, wieviel Worte maximal verwendet werden können
$AktWort --> Fortlaufende Zahl, die die Reihenfolge der Wörter definiert (dynamisch)
$WorteGenutzt --> Fortlaufende Zahl, die die Anzahl der angetippten Wörter definiert (statisch)

Zusätzlich werden je nach Anzahl der Worte (n) weitere Variablen und Funktionen (vom Excel-Code VBA) definiert
$Wort1 : $Wort(n)
Vorlesen1 : Vorlesen(n)

Ursprünglich wollte ich alle Abfragen, die definieren was vorgelesen werden soll, in eine Funktion packen (Vorlesen). Nach ca. 100 Zeilen (10 Wörtern) blieb der Stift aber stumm. Deswegen gibt es jetzt so viele einzelne Funktionen, wie es Wörter gibt.

Vom Prinzip her wird bei jedem angetippten Wort geprüft, ob die maximale Anzahl bereits erreicht ist. Wenn nicht, wird geprüft, welchen Wert $AktWort hat und die entsprechende Variable $Wort(n) mit dem Wert (OID) des angetippten Wortes befüllt und $AktWort und $WorteGenutzt wird um eins erhöht. Wenn man nun an die Grenze kommt oder auf "Vorlesen" tippt, wird das $AktWort auf 1 gesetzt ($WorteGenutzt bleibt unverändert). Die Funktion ruft dann anhand vom Wert $AktWort die unterfunktion Vorlesen($AktWort) auf. Hier wird geprüft, welche OID dem $Wort($AktWort) entspricht und der Ton wird ausgegeben. $AktWort wird um eins erhöht und die "Vorlesen"-Funktion wird erneut aufgerufen. Das ganze eben so lange, bis $AktWort wieder den Wert von $WorteGenutzt hat. Dann werden die Wörter der Reihe nach wieder auf 0 gesetzt und die Variablen in ihren Ursprungszustand auf 1.

Das ganze Spiel wird per VBA dynamisch generiert. Man kann also die Worte beliebig erweitern/verändern. Bei 15 Wörtern sind es 556 Zeilen Code in der yaml. Geht eigentlich, hätte ich mehr erwartet. Ich habe euch im Anhang das ganze mal als Zip gepackt. Wundert euch 1. nicht über die gewählten Wörter und 2. auch bitte nicht über die Sounds. Beides habe ich zu diesen Demozwecken aus einem anderen Projekt genommen.

Den Code der Exceldatei müsst ihr anpassen. Dazu ALT+F11 (Entwicklungsumgebung) und dann doppelklick auf "Modul1" (wenn nicht schon aktiv). Im Oberen Bereich müsst ihr den Spielnamen und den Speicherort anpassen. Die Produkt-Id, Begrüßungston sowie die ganzen OIDs dann im Tabellenblatt "Wörter" selber. Ausführen könnt ihr den Code, wenn ihr auf dem Tabellenblatt seid mit ALT+F8. Das ganze funktioniert natürlich nur mit aktivierten Makros.

AN DIESER STELLE GANZ WICHTIG: Ich übernehme keine Haftung für irgendwelche Schäden/Probleme, die mit meinem Programm zusammen hängen. Die Nutzung geschieht auf eigene Gefahr!

Für alle die bis hierhin durchgehalten haben: danke fürs lesen! :) Für diejenigen, die keine fremden Makro-Dateien öffnen wollen hier der VBA Code:

Sub Spielgenerierung()
    Dim vwks As Worksheet
    Dim Spielname As String
    Dim Speicherpfad As String
    Dim AnzWorte As Integer
    Dim Produkt_ID As Integer

    'Wo befinden sich die Wörter?
    Set vwks = ThisWorkbook.Sheets("Wörter")
    With vwks

        'Wie soll das Spiel heißen?
        Spielname = "Sprachhilfe.yaml"
        'Wohin soll das Spiel gespeichert werden?
        Speicherpfad = "G:\tttool\"
        'bestimmt die Anzahl der Worte, indem die letzte beschrieben Zelle gefunden wird minus 1 (weil es ja auch eine Überschrift gibt)
        AnzWorte = .Range("E" & .Rows.Count).End(xlUp).Row - 1
        'Welche ID hat das Spiel?
        Produkt_ID = .Range("B2").Value

        '#### Spieldatei speichern
        Open Speicherpfad & Spielname For Output As #1
            '###### Spielkopf beschreiben
            Print #1, "welcome: " & .Range("C2").Value
            Print #1, "product-id: " & Produkt_ID
            Print #1, "media-path: " & """" & "Audio/%s" & """"
            Print #1, "language:  de"
            Print #1, "init: $GesamtAnzahlWorte:=" & AnzWorte & " $AktWort:=1 $WorteGenutzt:=1"
            '###### Spielkopf ende
            '###### Scripts beschreiben
            Print #1, ""
            Print #1, "scripts:"
            '### Löschfunktion der einzelnen Wörter, nachdem alles vorgelesen wurde
            Print #1, "  Loeschen:"
            For i = 1 To AnzWorte
                Print #1, "  - $Wort" & i & "!=0? $Wort" & i & ":=0 $AktWort:=1 $WorteGenutzt:=1 J(Loeschen)"
            Next
            '### Löschfunktion ende
            '### Vorlesen
            Print #1, "  Vorlesen:"
            Print #1, "  - $AktWort:=1 J(VorlesenAktion)"

            'Einzelne Prozeduren
            Print #1, "  VorlesenAktion:"
            Print #1, "  - $AktWort==$WorteGenutzt? $AktWort:=1 $WorteGenutzt:=1 J(Loeschen)"
            For i = 2 To AnzWorte + 1
                'For j = 2 To AnzWorte + 1
                    Print #1, "  - $AktWort==" & i - 1 & "? J(Vorlesen" & i - 1 & ") "
                'Next
            Next
            For i = 2 To AnzWorte + 1
            Print #1, "  Vorlesen" & i - 1 & ":"
                For j = 2 To AnzWorte + 1
                    Print #1, "  - $Wort" & i - 1 & "==" & .Range("F" & j).Value & "? $AktWort+=1 J(VorlesenAktion) P(" & .Range("G" & j).Value & ")"
                Next
            Next
            '########## Ende mit einzelner Prozedur

            'Einzelne Worte antippen, Aktuelles Wort mit Wert des gedrückten füllen
            For i = 2 To AnzWorte + 1
                Print #1, "  " & .Range("E" & i).Value & ":"
                Print #1, "  - $AktWort>$GesamtAnzahlWorte? $AktWort:=1 J(Vorlesen)"
                For j = 2 To AnzWorte + 1
                    Print #1, "  - $AktWort==" & j - 1 & "? $Wort" & j - 1 & ":=" & .Range("F" & i).Value & " $AktWort+=1 $WorteGenutzt+=1 P(bing)"
                Next
            Next
            '##### Scripts ende

            '##### Scriptcodes beschreiben
            Print #1, ""
            Print #1, "scriptcodes:"
            For i = 3 To .Range("A" & .Rows.Count).End(xlUp).Row
                Print #1, "  " & .Range("A" & i).Value & ": " & .Range("B" & i).Value
            Next
            For i = 2 To .Range("E" & .Rows.Count).End(xlUp).Row
                Print #1, "  " & .Range("E" & i).Value & ": " & .Range("F" & i).Value
            Next
        '##### Scriptcodes ende
        Close #1
    End With
    Set vwks = Nothing
End Sub

So, das wars erst mal. Bin gespannt ob sich das jemand genauer ansieht. Ansonsten war es eine schöne Lehrstunde für mich und ein toller Monolog! :-D

lg Markus
Gesendet: Sonntag, 18. November 2018 um 20:55 Uhr
Von: "Renė Reichardt" <hp.reichardt at gmail.com>
An: "Die Mailingliste für Tiptoi-Bastler" <tiptoi at lists.nomeata.de>, "tiptoi at lists.nomeata.de" <tiptoi at lists.nomeata.de>
Betreff: Re: [Tiptoi] Umgang mit Registern
Hallo Markus,

Ich nehme die Töne selbst auf, vielleicht mit mehreren Personen (die ihren Namen selbst sorgen), ggf. Tätigkeiten aufnehmen (Eisenbahndampfen etc. ).
Ich habe einen TipToi mit Hörbuchfunktion und einem aus der ersten Generation.
Grüße

Outlook für iOS<https://aka.ms/o0ukef> beziehen
________________________________
From: tiptoi <tiptoi-bounces at lists.nomeata.de> on behalf of "Markus Heiße" <Markus-Heisse at gmx.de>
Sent: Sunday, November 18, 2018 7:24:01 PM
To: tiptoi at lists.nomeata.de
Subject: Re: [Tiptoi] Umgang mit Registern

Hallo René,
ich drück dir die Daumen. Mein Angebot der Unterstützung steht. Willst du die Töne alle selber aufnehmen bzw. von Ihm aufnehmen lassen? Welche Stift-version benutzt du?
lg Markus

Gesendet: Sonntag, 18. November 2018 um 16:46 Uhr
Von: "Renė Reichardt" <hp.reichardt at gmail.com>
An: "Die Mailingliste für Tiptoi-Bastler" <tiptoi at lists.nomeata.de>, "tiptoi at lists.nomeata.de" <tiptoi at lists.nomeata.de>
Betreff: Re: [Tiptoi] Umgang mit Registern
Hallo!
wow. Das sieht vielversprechend aus. Das werde ich auf jeden Fall probieren. Hoffentlich schaffe ich das noch vor Weihnachten. Das wäre dann ein Highlight.

Das Kind - mein Sohn in dem Fall - hat eine genetische Lernbehinderung. Aufgrund dieser und einer zusätzlichen angeborenen Gaumenspalte hat er einerseits Probleme Worte zu artikulieren, als au Probleme, komplexere Sprechinhalte zu verstehen.

Ich melde mich, wenn ich es probiert habe.

Liebe Grüße,

René

Outlook für iOS<https://aka.ms/o0ukef> beziehen
________________________________
From: tiptoi <tiptoi-bounces at lists.nomeata.de> on behalf of "Markus Heiße" <Markus-Heisse at gmx.de>
Sent: Saturday, November 17, 2018 8:58:49 AM
To: tiptoi at lists.nomeata.de
Subject: Re: [Tiptoi] Umgang mit Registern

Hatte unten noch einen offensichtlichen Fehler bei der Anzahl drin. Die Wörter würde ich doch anders löschen, damit es problemlos dynamisch erweiterbar ist
Ungleich-Prüfung im ttool war (!=) oder (<>)? Ich würde die "Funktion Woerterloeschen" so oft aufrufen, bis alle Wörter wieder auf 0 sind

Woerterloeschen:
-$Wort1!=0? $Wort1:=0 $Bereitsabgespielt:=1 J(Woerterloeschen)
-$Wort2!=0? $Wort2:=0 $Bereitsabgespielt:=1 J(Woerterloeschen)
-...
-$Wort100!=0? $Wort100:=0 $Bereitsabgespielt:=1 J(Woerterloeschen)


Gesendet: Samstag, 17. November 2018 um 08:45 Uhr
Von: "Markus Heiße" <Markus-Heisse at gmx.de>
An: tiptoi at lists.nomeata.de
Betreff: Re: [Tiptoi] Umgang mit Registern
Hallo in die Runde,

ich finde es auch ein tolles Projekt und würde gern meine Unterstützung anbieten. Darf man fragen um welche Art Behinderung es sich handelt und/oder wie alt das Kind ist?
Da ich gerade unterwegs bin, kann ich erst einmal nur grob skizzieren wie ich es umsetzen würde. Je nach dem Alter des Kindes wäre mir der Ansatz von André zu statisch.

Folgende Register würde man zusätzlich zu allen Wörtern die es geben soll brauchen
$Anzahl (wird mit jedem neuen Wort um eins erhöht und bei Sprachausgabe wieder zurückgesetzt)
$Bereitsabgespielt
$Wort1 bis $Wort5 (theoretisch erweiterbar, je nachdem wie lang die Sätze werden sollen dürfen).

Das Kind kann dann selber bestimmen, in welcher Reihenfolge welche Wörter kommen.

Bei jedem Wort was man antippt (Mama, Papa, Spielen, Hunger etc) wird zuerst die $Anzahl geprüft, und dann $Wort($Anzahl) mit dem Wert des Wortes gesetzt. Da ttool keine dynamischen Codes kann, muss man jede Eventualität abfragen. Man benötigt dann zwar sehr viele Zeilen Code, welche ich über ein Script (VBA) automatisiert erstellen lassen würde. Kein korrekter Syntax aber Abfrage wäre dann circa so

Personpapa (entspricht 100):
-$Anzahl>6? J(Abspielen)
-$Anzahl==1? $Anzahl:=$Anzahl+1 $Wort1:=100
-$Anzahl==2? $Anzahl:=$Anzahl+1 $Wort2:=100
-$Anzahl==3? $Anzahl:=$Anzahl+1 $Wort3:=100
- ...

Personmama (entspricht 101):
-$Anzahl>6? J(Abspielen)
-$Anzahl==1? $Anzahl:=$Anzahl+1 $Wort1:=101
-$Anzahl==2? $Anzahl:=$Anzahl+1 $Wort2:=101
-$Anzahl==3? $Anzahl:=$Anzahl+1 $Wort3:=101
- ...

Abspielen:
-$Bereitsabgespielt>$Anzahl? J(Woerterloeschen)
-$Wort1==100? $Bereitsabgespielt:=$Bereitsabgespielt+1 J(Abspielen) P(sound_papa)
-$Wort1==101? $Bereitsabgespielt:=$Bereitsabgespielt+1 J(Abspielen) P(sound_mama)
-..
-$Wort2==100? $Bereitsabgespielt:=$Bereitsabgespielt+1 J(Abspielen) P(sound_papa)
-$Wort2==101? $Bereitsabgespielt:=$Bereitsabgespielt+1 J(Abspielen) P(sound_mama)
-..

Woerterloeschen:
-$Bereitsabgespielt:=1 $Anzahl:=1 $Wort1:=0 $Wort2:=0  $Wort3:=0 $Wort4:=0 $Wort5:=0

Wenn man dann einen "Wortschatz" von 100 Wörtern macht wird die Liste natürlich sehr (sehr) lang. Wie gesagt würde ich eine Übersicht in Excel erstellen und die ttool-Datei dann dynamisch mit VBA schreiben lassen. Mit der Methode sollten aber Sachen möglich sein wie "Lieber Papa spiel mit mir". Wenn ich keinen großen Denkschnitzer habe, sollte es so ungefährt gehen. :)

lg aus Dresden
Markus
Gesendet: Freitag, 16. November 2018 um 22:46 Uhr
Von: "André Schmid" <andre at christina-und-band.de>
An: "'Die Mailingliste für Tiptoi-Bastler'" <tiptoi at lists.nomeata.de>
Betreff: Re: [Tiptoi] Umgang mit Registern
Hi René,

n sehr tolles Projekt wie ich finde….

Mein Vorschlag so schnell aus dem Bauch heraus:
(Ohne getestet zu haben)
#########################################
PERSONPAPA:
  - $elementeins:=1 P(blob)

PERSONMAMA:
  - $elementeins:=2 P(blob)

TAETIGKEITESSEN:
  - $elementzwei:=1 P(blob)

TAETIGKEITSPIELEN:
  - $elementzwei:=2 P(blob)

ABSPIELENEINS:
  - $elementeins==1? J(ABSPIELENZWEI) P(sound_papa)
  - $elementeins==2? J(ABSPIELENZWEI) P(sound_mama)
  - J(ABSPIELENZWEI)

ABSPIELENZWEI:
  - $elementzwei==1? J(LOESCHEN) P(sound_essen)
  - $elementzwei==2? J(LOESCHEN) P(sound_spielen)
  - J(LOESCHEN)

LOESCHEN:
  - $elementeins:=0 $elementzwei:=0?
#########################################

Erklärung:
Sammle mit dem Stift die Informationen. Also jedes/jeder Wort/Satzteil hat eine Registernummer. Blob sollte abgespielt werden, damit man die Bestätigung hat, das es im Stift gespeichert ist.
Dann wenn das Abspielen-Symbol getippt wird startet ABSPIELENEINS. Hier wird je nach register der Sound mama oder papa abgespielt.
Danach springt der Stift automatisch auf ABSPIELENZWEI, in dem der zweite Satzteil gespielt wird.
Wenn der Satzteil nichts hat wird einfach weiter gesprungen.

Das erweiterst du beliebig lange.

Ganz am Ende werden alle Elemente wieder auf 0 gesetzt. (Sollte beim initialisieren auch geschehen)

Warum ich Jump VOR Play mache?!
Es hat sich herausgestellt, dass dies die bessere Methode ist.
Wenn der Stift (Mit Player) etwas abspielt und danach erst JUMP macht, ist ne seltsame Pause zwischen den Sounds.
Wenn erst gesprungen wird, spielt der den Sound ab, rechnet aber den nächsten Satz bereits und reagiert somit schneller

Ich hoffe ich konnte dir helfen.

Sag mir wie es geworden ist und ob es geht…
Feedback ist immer toll 😊

Grüße
André



Von: tiptoi <tiptoi-bounces at lists.nomeata.de> Im Auftrag von René Reichardt
Gesendet: Freitag, 16. November 2018 18:13
An: tiptoi at lists.nomeata.de
Betreff: [Tiptoi] Umgang mit Registern

Hallo an alle Tüftler,

ich habe schon ein paar Projekte mit dem TipToi umgesetzt und bin ganz zufrieden. An dieser Stelle nochmal vielen Dank an das Projekt TTTool!

Mein Anliegen:
Ich möchte eine Kommunikationshilfe für ein Kind, welches nicht sprechen kann basteln.
Funktionieren soll das wie folgt:

  *   Es gibt drei Felder
     *   Person
     *   Tätigkeit
     *   Wunsch/andere beteiligte Person
  *   Dazu gibt es die passenden Karten (Mama, Papa, ich, will spielen, will etwas essen etc.)
  *   Der TipToi Stift soll die Bilder „einscannen“ und auf eine OID „Abspiel OID“einen Satz oder eine Frage mit den zuvor „gespeicherten“ Karten
  *   ausgeben:
     *   – Ich – will spielen
     *   Willst du – mit mir – spielen

Ich habe dabei an Register gedacht, die hoch gesetzt werden:


  *   Scanne die Person --> $Papa:=1
  *   Scanne die Tätigkeit --> $spielen:=1
  *   Scanne zweite Person --> $Kind:=1
  *   Ausgabe: „Papa möchtest du - mit Kind - spielen“ #Die Ausgabe ist natürlich aufgenommenes Tonmaterial.
Die Frage ist jetzt:

Kann ich die Register, die ich hochsetze in irgendeiner Weise IN EINER FESTEN REIHENFOLGE abspielen lassen bzw. diesen „Speicher“ abrufen, um das umzusetzen?

Liebe Grüße,

René
-- tiptoi mailing list tiptoi at lists.nomeata.de https://lists.nomeata.de/mailman/listinfo/tiptoi
-- tiptoi mailing list tiptoi at lists.nomeata.de https://lists.nomeata.de/mailman/listinfo/tiptoi
-- tiptoi mailing list tiptoi at lists.nomeata.de https://lists.nomeata.de/mailman/listinfo/tiptoi
-- tiptoi mailing list tiptoi at lists.nomeata.de https://lists.nomeata.de/mailman/listinfo/tiptoi
-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <https://lists.nomeata.de/pipermail/tiptoi/attachments/20181120/71934d0e/attachment.htm>


Mehr Informationen über die Mailingliste tiptoi