German Wie baue ich mir einen eBook Reader mit TTS?

wbauer

Member
Licensed User
Longtime User
Ich will mir einen eigenen eBook Reader mit TTS bauen, weil ich bisher noch keinen sinnvollen Reader gefunden habe, der TTS unterstützt.

Die Applikation soll ganz einfach sein:

1. Ich erstelle mir eine ScrollView -> im Panel lege ich ein Label an, in das der Text geladen wird. So kann ich dann den Text rauf/runter scrollen.

2. Dieser Text soll mit TTS vorgelesen werden.

Nun zu den Feinheiten, wo ich derzeit anstehe:

1. Der zu ladende Text ist unterschiedlich lange. Wie setzte ich die InnerHight der Scrollview bzw die Height des Label korrekt, dass der Text korrekt anzeigt wird? (derzeit habe ich harccoded 10000 eingetragen - ist natürlich nicht so schön, dass am Ende des Textes dann noch ewig gescrollt werden kann)

2. Der TTS-Funktion würde ich immer einen Satz aus dem Text im Label übergeben. Kann ich irgendwie erkennen, wann der vorige Satz zu Ende gesprochen wurde? Ich weiss, dass ich mittels "TTS1.Speak (sSatz,FALSE)" mehrere Sätze "gepuffert" übergeben kann. Was mir vorschwebt ist aber, dass ich jeweils einen Satz nach dem anderen aus dem Label auslese und dem TTS übergebe. Gleichzeitig merke ich mir, welcher Satz gerade vorgelesen wird.

Wenn ich dann die TTS Funktion in einem Satz (z.B Nr. 5) abbrechen würde, so soll mein Programm erkennen, dass der Satz 5 noch nicht vollständig vorgelesen würde. Beim nächsten Programmaufruf könnte ich also bei Satz 5 weitermachen und von hier gleich zu lesen beginnen.

3. Wenn ich nun Satz für Satz auslese, so kommt es natürlich vor, dass der aktuelle Satz nicht mehr im sichtbaren Bereich ist. Kann ich das aus dem Label oder der Scrollview herauslesen, dass ich nun einen Textbereich erreicht habe, der nicht mehr sichtbar ist?

Oder anders herum, wenn ich auf die Scrollview verzichte und nur einen fixen Label mache -> kann ich von dem herausbekommen, wie viel (oder welcher) Text in dem sichtbaren Bereich steht und welcher schon nach unten verschwunden ist?

Wäre toll, wenn mir hier wer helfen könnte.

LG
Wolfgang
 
Last edited:

klaus

Expert
Licensed User
Longtime User
Für den Punkt 1), für lange Texte kannst Du in diese Programme reinschauen:
- HelpScrollView
- LongTexts

Für Punkt 2) könnte die RegEx.Split Funktion hilfreich sein um den Text in Sätze zu zerlegen.

Für Punkt 3), das TTS Objekt enthält ein Ready Event, Ich habe keine Erfahrung mit diesem Objekt, aber Ich nehme an dass diese Event ausgelöst wird wenn der zu sprechende Text fertig ist. Es ist bestimmt ein Paar Versuche wert.

Beste Grüsse.
 
Last edited:

wbauer

Member
Licensed User
Longtime User
Hallo Klaus.

Danke für die Inputs - das werde ich gleich mal testen.

Zu 2. Wann erkenne ich, dass der Reader den übergebenen Text fertig gelesen hat - da habe ich in der englischen Doku ein Beispiel von Erel entdeckt.

Man muss die Phone library einbinden. Dann kann man die PhoneEvents verwenden - und dort gibt es ein TextToSpeechFinish Event, das zuschlägt, wenn der Reader den Text vollständig vorgelesen hat.

Das kann ich hier gut verwenden. Text der ersten Seite an Reader übergeben, warten bis TextToSpeechFinish Event eintritt, dann Text für Seite 2 laden und an Reader übergeben, warten ...

Das Ready Event der TTS Library selbst wird nur ausgelöst, wenn der TTS Reader erfolgtreich initialisiert wurde. D.h. das verwende ich, um dann das Vorlesen des Textes zu starten.

Wenns was mit meinem Reader wird, dann poste ich den Sourcecode für alle, die Interesse haben.
 
Top