Idee für neuen Modus: Interaktives Hörbuch?

Interaktive Hörbücher funktionieren ja so: Es wird eine Geschichte erzählt und an bestimmten Stellen kann der Zuhörer zwischen mehreren Optionen entscheiden, wie die Geschichte weitergeht. Vor Jahrzehnten waren einige der ersten Computerspiele (Text-Adventures) genauso aufgebaut, nur dass man selber lesen musste.

Es gab sogar mal interaktive Hörbücher als CD, bei denen einem nach jedem Track dann gesagt wurde, bei welchen möglichen Tracks die Geschichte weitergehen kann, aber das war so schwierig zu bedienen, dass sie sich nicht durchgesetzt hatten.

Neuerdings gibt es teilweise sehr erfolgreich interaktive Hörspiele als Skills für Amazon Alexa, z.B. kostenlos in Deutsch von ear-reality - sowohl dür Erwachsene, als auch für Kinder.

Eigentlich müsste das doch auch ganz gut mit einem TonUINO umsetzbar sein! Es müsste lediglich ein Modus implementiert werden, bei dem man zu jedem Track mehr als nur einen Nachfolge-Track definieren kann. Nach jedem Track kann man dann (ähnlich wie bei dem Abspielmodus TonUINO Quiz) eine von mehreren Optionen wählen, wie die Geschichte weitergeht und entsprechend setzt der TonUINO bei einem anderen Track die Geschichte fort.

Ich frage mich aber, wie und wo man am besten speichert, welche Tracks auf einen gegebenen Track folgen können. Ich sehe da folgende Möglichkeiten:

  1. Speichern der Folgetrack-Nummern auf der RFID-Karte
    Die normalen Mifare-Karten haben 1KB Speicherplatz, von denen derzeit fast nichts verwendet wird. Wenn man nun zu jedem der bis zu 255 Tracks jeweils zwei mögliche Folgetracks einträgt, passt das gut in den Speicher. Möchte man eine solche Karte aber mit dem TonUINO konfigurieren (beim erstmaligen Einrichten der Karte), hat man sehr viel zu tun. Bequem ist anders. Schöner wäre hier z.B. eine auf einem NFC-fähigen Handy laufende App, die ein komfortableres Einrichten ermöglicht. Aber so eine App müsste auch erst geschrieben werden…
  2. Binärer Entscheidungsbaum
    Wenn man nach jedem Track die Möglichkeit hat, zwischen genau zwei Folgetracks zu wählen, kann die ganze Ablauflogik auch ohne Speichern zusätzlicher Daten erfolgen: Die möglichen Folgetracks zu einem Track mit der Nummer N (beginnend bei 1) haben einfach die Nummern 2N und 2N+1. Das garantiert, dass keine zwei Pfade zusammenlaufen (Das kann man gerne ausprobieren - es geht tatsächlich!). Nur ist es so nicht möglich, eine Geschichte mit sich kreuzenden und wieder zusammenlaufenden Handlungssträngen zu implementieren.
  3. Manuelles Programmieren des Arduino
    Natürlich kann man einen Spezialmodus programmieren, der einen ganz bestimmten Ablaufgraph umsetzt. So hat man bezüglich der Funktionen größtmögliche Flexibilität (Verwendung von Zufallsentscheidungen, Abhängigkeit der Wahlmöglichkeiten von bisherigen zurückliegenden Entscheidungen, etc.), aber ist auf der anderen Seite maximal unflexibel wenn es darum geht, verschiedene interaktive Hörbücher umzusetzen. Jedes müsste direkt im Code ergänzt werden.
  4. Speichern der Wahlmöglichkeiten im Dateinamen eines jeden Tracks.
    Man könnte z.B. Dateinamen der Art „001-0A1F.mp3“ vergeben und den Dateinamen im Arduino parsen. Dabei wären 0A und 1F die Folgetracknummern in hexadezimal (um mit 8-Zeichen-Dateinamen auszukommen). Diese Option gäbe es nur bei Verwendung eines alternativen MP3-Moduls - mit dem DFPlayer Mini ist das nicht möglich. Wohl aber mit dem BY8001, das habe ich aber mangels BY8001 nicht getestet. Mit dem ESP32+VS1053 ginge es wohl auch…

Die optimale Lösung ist irgendwie nicht dabei. Was meint Ihr? Ich fände die Möglichkeit, interaktive Hörbücher mit dem TonUINO zu unterstützen, echt super!

2 „Gefällt mir“

Ich finde die Idee klasse!

Die Programmierung über eine APP oder über den PC ließe sich relativ einfach integrieren, ich habe die Programmierung der Karten über den PC in meiner Firmware bereits implementiert.
Man könnte auch noch zusätzlichen Speicher integrieren, z.B. SD-Karte per SPI anschließen und darauf Die Zusatzlogik/Konfiguration speichern. Jedoch wird das wohl kaum auf den Arduino Nano passen :wink:
Außer wir lagern auch noch weitere Funktionalitäten aus.

Mit sehr geringem Aufwand könnte der binäre Entscheidungsbaum integriert werden, das würde ich als erstes Probieren. Für den Rest müsste man ja schon fast auf ESP32 mit VS1053 umsteigen.

1 „Gefällt mir“

@pit: Du hast eine PC-Software zum Bespielen der Karten geschrieben? Nutzt die einen beliebigen separaten RFID-Reader/Writer? Kannst Du die Software hier allen zur Verfügung stellen?

Es ist hier im Forum bereits eine Android-App verlinkt, um komfortabler Karten zu beschreiben, die ich aber nicht testen konnte (wg. altem Handy mit Android 6).

Zusätzlicher Speicher per SPI wäre wohl etwas Overkill. Natürlich ginge ESP32-VS1053, aber ich denke, wenn man das Programmieren der Karten über PC oder APP machen kann, ist das Ganze auch mit normaler TonUINO-Hardware gut machbar.

Der Code für den neuen Mode wäre meines Erachtens wohl überschaubar und sprengt die Kapazität des Arduino Nano wohl kaum. Man müsste im Wesentlichen ja nur die Funktionen nextTrack() und previousTrack() um den neuen Modus erweitern. Am Ende eines jeden Tracks müsste dann (direkt in der MP3-Datei) nur angesagt werden, welche Handlungsoption mit der linken und welche mit der rechten Taste gewählt wird. Neben der Standardfunktion, einen von zwei möglichen Folgetracks auszuwählen, könnte man auch leicht ein paar Sonderfunktionen integrieren:

Angenommen, für jeden der bis zu 255 Tracks N werden auf der Karte zwei Nachfolger N1, N2 eingetragen. Das benötigt dann 2*255 = 510 Bytes auf der RFID-Karte, was ja bei den Mifare Classic 1k noch verfügbar ist. Da die Nachfolger zu einem Track N nie 0 (denn den Track gibt es nicht) und nie der Track N selber sein werden, kann man dies nun für Sonderfunktionen nutzen. Mein Vorschlag:

  • N1 = N2 = N:
    Das Hörspiel ist zuende. Es gibt keinen Folgetrack.
  • 0 < N1 != N, 0 < N2 != N:
    Standardfall: Es gibt zwei mögliche Folgetracks N1 und N2, die mit den Tasten Previous und Next angewählt werden können. Wenn N1 = N2, gibt es nur einen Nachfolgetrack, der durch beliebigen Tastendruck startet.
  • 0 < N1 != N, N2 = N:
    Es gibt nur einen Nachfolgetrack, nämlich N1. Dieser wird automatisch ohne Tastendruck gestartet.
  • N1 = N, 0 < N2 != N:
    Zunächst wird nach Track N auch Track (N+1) abgespielt (ohne nötigen Tastendruck). Danach gibt es nicht die Auswahl zwischen zwei, sondern zwischen drei Nachfolgetracks (nämlich N2 und die für (N+1) definierten Nachfolger). Dazu wird auch die Play/Pause-Taste abgefragt.
  • N1 = N2 = 0:
    Als nächster Track wird (ohne separaten Tastendruck) per Zufall Track (N+1) oder Track (N+2) gewählt.
  • N1 = 0, N2 > 0:
    Eine Ablauf-Bitvariable (die beim Start des Hörspiels auf 0 gesetzt wird) wird mit den in N2 gesetzten Masken-Bits per XOR verknüpft. Damit lassen sich Variablen setzen, die später über den weiteren Ablauf entscheiden. Beispielsweise können im Laufe der Geschichte bei bestimmten Verläufen eingesammelte (oder später auch wieder verlorene) Items den weiteren Ablauf beeinflussen. Als nächster Track wird (ohne separaten Tastendruck) Track (N+1) abgespielt.
  • N1 > 0, N2 = 0:
    Die in N1 gesetzten Bits der Ablauf-Bitvariable werden genommen und entsprechend wird einer der auf N folgenden Tracks (N+1), (N+2), … als Folgetrack ausgewählt (z.B: bei zwei gesetzten Bits in N1 wird entsprechend der Werte an diesen Positionen von der Ablauf-Bitvariablen eines der Tracks (N+1),…,(N+4) angewählt. Damit lassen sich vom bisherigen Ablauf abhängige Wege umsetzen.

Damit kann man mit vergleichsweise wenig Code sehr komplexe Handlungsabläufe definieren, deutlich mehr als bei Verwendung eines binären Entscheidungsbaumes. Die ganze Komplexität des Handlungsablaufes liegt dann ja in den 510 Byte auf der RFID-Karte.

Edit: Das Ganze würde genauso natürlich auch bei der oben genannten Option 4 (Speichern im Dateinamen) und dem BY8001 funktionieren, nur eben mit Hexadezimalcodierung. Dann würde man sich das komplizierte Programmieren der RFID-Karte sparen, da alles über die Dateinamen des Hörspiels definiert wäre.

Die Software ist allerdings nicht sehr komfortabel, besteht im Prinzip nur aus Text-Inputs ohne Fehlerbehandlung. Ich wollte nur für meine TonUINOs (musste da über 100 Karten beschreiben) nicht alles manuell machen.

Ich habe hierfür im Admin-Menü einfach eine neue Funktion integriert, sprich es wird über den Reader der Box programmiert. Man könnte aber auch einfach einen weiteren Arduino Nano mit MFRC 522 als dediziertes Lese-/Schreibgerät verwenden.

Ich kann mal versuchen die entsprechenden Code-Teile aus meiner Firmware herauszulösen und in den aktuellen DEV zu integrieren. Leider habe ich den ganzen Code zu sehr an meine Bedürfnisse und meinen Geschmack angepasst :wink:

Das mit den Daten auf die Karte schreiben geht natürlich auch, hier muss jedoch darauf geachtet werden das die Karte zuvor reaktiviert wird. Ich habe dies bei mir bereits umgesetzt, da ich den „Spezial Hörbuch Modus“ haben wollte. Ich speichere die Werte „Von-Bis“ sowie „aktueller Track“ auf der Karte und nicht im EEPROM.

Ich schaue mal, ob ich mir ein kleines Dev-System aufsetze um an dieser Idee mit wirken zu können.

1 „Gefällt mir“

Ui, das erinnert mich an meine alten Wähle-dein-Abenteuer Bücher! Wusste gar nicht dass es sowas inzwischen als Hörbuch gibt. Coole Sache
Dann tüftelt mal schön weiter!

Ja! Durch eine dieser Spielbuch-Reihen hatte ich auch die Idee zum interaktiven Hörbuch-Modus: Sagaland (90er) bzw. die Neuauflage Fabled Lands - Die Legenden von Harkuna (seit 2017). Die sind gerade bei meinen großen Kindern beliebt, haben aber noch weitere Komplexität durch Kämpfe, Würfeln, etc. und gehen damit schon fast in Richtung Pen&Paper-Rollenspiel.

@Peer
Wie versprochen, habe ich den „PC-Programmiermodus“ in die DEV-Version zurück portiert.
Das ganze ist unter https://github.com/pit-nrw/TonUINO/tree/pit-pc-mode verfügbar. Das PC Tool liegt im Ordner /tools/PC Card-Writer Software/.
Zur Verwendung wird .NET 4.6.1 benötigt.

Wie gesagt, ist nur rudimentär war aber auch nicht zur Veröffentlich vorgesehen :wink:

1 „Gefällt mir“

Danke! Schau ich mir an. Liegt die Writer-Software da auch als Sourcecode?

1 „Gefällt mir“

Den Source habe ich als eigenständiges Repo angelegt https://github.com/pit-nrw/TonUINO-PC-Card-Writer/tree/master

1 „Gefällt mir“

Also die Idee dafür steckt auch schon lange in unseren Köpfen. Tatsächlich ist die Content Frage fast schwerer als dann die Programmierung.

1 „Gefällt mir“

Von den drei ??? gibt es ja auch interaktive Hörspiele als CD zu kaufen, z.B. hier:

Die könnte man dann ja auf den TonUINO übertragen…

1 „Gefällt mir“

Ansonsten kann man auch auf hoer-talk.de stöbern; habe ich soeben in der Hörspiel-Linksammlung hinzugefügt:

1 „Gefällt mir“

Datsächlich habe ich genau das schonmal als digitale MP3s gekauft… genau dafür!
Es gibt jedoch dort das Problem mit den Ansagen finde ich.

Ich habe das Hörspiel nicht selbst. Wie lauten denn die Ansagen? Ich vermute, es werden die Nummern der nächsten Tracks genannt?

Dann könnte man zur Not das so machen, dass der TonUINO anschließend etwas sagt, wie: „blaue Taste für Track 13, rote Taste für Track 17“, wobei ja nur das MP3-Schnippsel „Blaue Taste für Track“ hinzugefügt werden müsste. Wenn die Tracknummern beim TonUINO identisch sind, sind die ja bekannt und könnten automatisch angesagt werden.

Gibt es immer nur zwei Auswahlmöglichkeiten? Und wird der CD-Wechsel auch angesagt?

Es gibt Neuigkeiten zum Thema interaktie Hörspiele:

Ich habe mit den Machern von EarReality gesprochen, und die wollen uns unterstützen! Sie wollen uns ihr interaktives Hörbuch „Der Zauberwald“ kostenlos für die private Verwendung auf den TonUINOs zur Verfügung stellen. Bedingung ist, dass das Hörspiel nicht irgendwoanders im Netz, als App oder als Alexa-Skill wieder auftaucht. Ich habe bereits die Quellen zur Anpassung bekommen und bin gerde am Sichten, welche Funktionen dieses Hörspiel benötigt, um die Anpassung der Dateien und die Programmierung
der TonUINO-Unterstützung von interaktiven Hörbüchern zu planen.

Das bedeutet, ich werde das mit der Software-Unterstützung von interaktiven Hörspielen nun tatsächlich angehen und freue mich über Unterstützung.

Die oben von mir vorgeschlagene Struktur mit binären Variablen reicht für dieses Hörspiel übrigens nicht aus und ist insgesamt zu unflexibel und unübersichtlich. Daher habe ich mir etwas anderes überlegt, was auch noch genügens Kapazitäten für weitere zukünftige interaktive Hörbuchfunktionen hat, an die derzeit noch niemand von uns denkt:

Wie bisher vorgeschlagen, werden zu jedem der bis zu 255 Tracks auf der RFID-Karte zwei Bytes gespeichert, die festlegen, wie die Folgetracks zu ermitteln sind. Das ist meines Erachtens der beste Weg bei der vorhandenen Hardware. Anders als bisher ist nun aber das erste Byte immer ein Befehl und das zweite ein Operand. So lassen sich viel mehr Funktionen deutlich verständlicher implementieren.

Der aktuelle Track sei im Folgenden N:

  • 0,X: Wahl zwischen 2 Optionen: Button PREVIOUS: Gehe zu Track X, Button NEXT: Gehe zu Track N+1.
  • 0,0: Sonderfall: Ende des Hörspiels. Es gibt keine Folgetracks.
  • 1,X: Wahl zwischen 2 Optionen: Button PREVIOUS: Gehe zu Track N+1, Button NEXT: Gehe zu Track X.
  • 1,0: Sonderfall: Ende des Hörspiels. Es gibt keine Folgetracks.
  • 2,X: Button PREVIOUS oder NEXT: Gehe zu Track X.
  • 3,X: Gehe direkt zu Track X, ohne einen Tastendruck abzuwarten.
  • 4,X: Gehe je nach Taste (PREVIOUS, PAUSE, NEXT) zu Track N+1,N+2,N+3.
  • 5,X: Auswahl zwischen X verschiedenen Folgeoptionen. Durch Drücken von PREVIOUS und NEXT kann man zwischen den in den Tracks N+1…N+X+1 als MP3 abgelegten X Optionen wählen (wie bei den sonstigen Sprach-Menüs) und mit Drücken auf PAUSE auswählen. Der Folgetrack ist dann einer der Tracks N+X+2…N+2*X+2.
  • 6,X: Setze das Bitmuster X in der Bitvariable. Nächster Track ist ohne Tastendruck N+1.
  • 7,X: Lösche das Bitmuster X in der Bitvariable. Nächster Track ist ohne Tastendruck N+1.
  • 8,X: Invertiere das Bitmuster X in der Bitvariable. Nächster Track ist ohne Tastendruck N+1.
  • 9,X: Je nach Wert der auf die Bismaske X beschränkten Bitvariable wird als Folgetrack X+1,… ausgewählt.
  • 10,X … 19,X: Erhöhe 8Bit-Integer-Variable I0…I9 um X (Subtraktion über Komplementbildung, d.h. minus 1 entspricht plus 255). Nächster Track ist ohne Tastendruck N+1.
  • 20,X … 29,X: Wenn Variable I0…I9>X, wähle N+1 als Nachfolger, sonst N+2.
  • 30,X: Wähle zufällig einen der Tracks N+1…N+X+1 als Nachfolgetrack.
  • 128,X … 255,X: Genauso wie 0,X … 127,X, nur dass Track N selbst nicht abgespielt wird (der Track dient rein der Navigation).

Damit können alle mir derzeit bekannten interaktiven Hörspiele abgebildet werden und es besteht noch genügend Freiraum (Befehle 31-127) für weitere Funktionen.

7 „Gefällt mir“

Ich habe mal eine Frage und zwar spielt mein Tonuino im hörspielmodus wo er auch denn Fortschritt speichert bis zum Ende und fängt nicht von vorne an. Gibt es da ein einen abspielmodus für oder wie ist es?

@Merk Ich habe, ehrlich gesagt, deine Frage nicht verstanden.

Vielleicht hilft dieses. Hier gibt es eine Übersicht über die einzelnen Abspielmodi.

Im HörBUCH Modus wird der ganze Ordner von 001 beginnend gespielt und der Fortschritt gespeichert.

Im HörSPIEL Modus wird ein zufälliger Track aus dem Ordner gespielt. Für einen weiteren muss man die Karte erneut auflegen. Das ist hut wenn die einzelnen Folgen/Tracks keine Inhaltliche Reihenfolge haben (z.B. Benjamin Blümchen, Bibbi Blocksberg,…)

Hallo @Peer,
gibt es denn in dieser Sache was neues? Kann man dich unterstützen?

Viele Grüße,
Matthias

1 „Gefällt mir“