UNITALK
Die universelle Sprachausgabe
Stand  8.Oktober 2006

Nachdem die Suche nach einem bereits existierenden einfachen Sprachausgabesystem zu keinem befriedigenden Ergebnis führte, entstand UNITALK . Dabei wurde besonderer Wert darauf gelegt, daß die ausgegebene Sprache besonders auch für "deutschsprachige Ohren" leicht verständlich sein sollte. Auf alle mir bekannten und für den anglikanischen Sprachraum produzierten  Sprachsynthesizer trifft das nicht zu.
Basis des Systems sind vom Anwender selbst besprechbare Voice-Chips des Herstellers WINBOND. Die verwendete Typenreihe ISD25xx ist dabei für Gesamtspeicherzeiten von 60, 90 und 120 Sekunden erhältlich, aber ansonsten identisch zu handhaben.
Neben der Speicherung nur einer Gesamtsprachdatei kann der zur Verfügung stehende Speicherbereich auch auf mehrere separat nutzbare Teildateien aufgeteilt werden. Sie können über  herausgeführte Adresseingänge selektiert werden. Dieses Verfahren hat jedoch den Nachteil, daß sich für die einzelnen Sprachsegmente eine feststehende zeitliche Länge ergibt. Wesentlich besser wird der zur Verfügung stehende Speicherbereich dagegen bei Verwendung des sog. CUEING-Verfahrens genutzt. Hierbei werden die später benötigten Sprachsegmente ganz einfach und ohne Rücksicht auf ihre Länge ( aber natürlich begrenzt durch die Gesamtspeicherkapazität des Chips ) einzeln nacheinander über ein Mikrofon aufgesprochen und im Speicher des Bausteins abgelegt. Mithilfe einer kleinen Routine kann jedes einzelne Sprachsegment dann später wieder gezielt angewählt und ausgelesen werden.
Dieses Verfahren wurde bereits in einem Datenbuch der Firma ISD ( jetzt: WINBOND ) aus dem Jahre 1997 beschrieben. Seinerzeit gestattete es mir die Erstellung einer Software zur Sprachumsetzung der von GPS-Empfängern stammenden und in Standard-NMEA-Protokollen enthaltenen Navigationsdaten. Dabei wurden Microcontroller-Bausteine des Typs AT89C2051 aus der 8051-Familie verwendet.
Eine Musteransage kann hier abgehört* werden.

* Die zwischen den Zeichenausgaben hörbaren Restgeräusche sind systembedingt und entstehen bei der Sprachsegmentanwahl im CUEING-Mode.


Abb.1

Auf der Suche nach einem universellen Sprachausgabesystem erinnerte ich mich des damaligen Projektes. Zur Steuerung des Voicechips wurde auch hier wieder ein AT89C2051 benutzt ( Abb.1 ). So entstand eine Version, mit der sich bis zu 100 Sprachsegmente durch Decodierung seriell übertragener asynchroner Datenprotokolle gezielt ansprechen lassen. Die zur Übertragung wählbaren Datenraten sind 19200bps ( "S1"="offen" ) und 9600bps ( "S1"="geschlossen").


Abb.2  Musteraufbau der Anordnung gem. Abb1 ( allerdings ohne zusätzlichen NF-Verstärker )

Das benutzte Protokoll ist sehr einfach aufgebaut und setzt sich nur aus dem Header "$VOI," und zwei folgenden ASCII-Ziffern zusammen. Bei den beiden Ziffern handelt es sich um Dezimalwerte für die Zehner und Einer des anzusprechenden Sprachsegments. Ein Protokoll zum Aufruf von Sprachsegment 13 sieht beispielsweise folgendermaßen aus:
 
     $VOI,13

Zum Aufruf eines bestimmten, in einem Chip der Serie ISD25xx abgelegten Sprachsegments, muss der steuernde Prozessor somit nur ein derartiges serielles Kurzprotokoll generieren. Dabei sind Typ und Familie dieses Prozessors, sowie die hierbei benutzte Programmiersprache ohne Belang. Bei Verwendung von z.B. ATMEGA's kann die Datenaussendung dabei nicht nur über den Ausgang eines Hardware-UART's, sondern auch über fast jeden anderen als sog. Soft-UART festgelegten Port erfolgen.
Sollen mehrere Sprachsegmente ( z.B. Ziffernfolgen ) mit möglichst geringem zeitlichen Abstand nacheinander übertragen werden, so ist es wichtig, daß der Hauptprozessor auch das jeweilige zeitliche Ende der einzelnen Sprachsegmentausgaben signalisiert bekommt. Dazu dient der Ausgang "EOM" ( end of memory ) bzw. "A", an dem nach Segmentende jeweils ein negativer Puls von etwa 10mS Dauer ( TTL-Pegel ) ausgegeben wird.
Der Decoder besitzt die seriellen Dateneingänge "E" und "C". Ersterer kann Signale mit RS-232-Pegel verarbeiten und ermöglicht auf diese Weise ein einfaches Testen des Decoders z.B. nach Verbindung mit dem COM-Port eines PC's und Aktivierung eines Terminalprogrammes wie "HyperTerminal", wobei die Brücke "D-C" geschlossen sein muss. Bei Direktsteuerung des Decoders durch einen Microcontroller wird man dagegen üblicherweise den seriellen TTL-Eingang "C" verwenden ( Brücke "D-C" muss dabei aufgetrennt sein ).  
Wie schon oben erwähnt, ist über Schalter "S1" eine Anwahl der Eingangs-Datenraten 19200bps und 9600bps möglich. Die Schalterkontakte "S2" bis "S4" sind zur Zeit noch ohne Funktion und für mögliche Erweiterungen vorgesehen. 
Da die niederfrequente Ausgangsleistung des Sprachspeicherchips nicht allzu hoch ist, wurde ein LM386 als NF-Zusatzverstärker vorgesehen. Bei der Versorgungsspannung von 5V liefert er ca. 300mW-Sprechleistung an einem 8-Ohm-Lautsprecher. Wem das noch zu wenig ist ( z.B. für KFZ- oder Bootsnutzung ) der kann hier auch einen leistungsfähigeren Typ oder eine fertig erhältliche Aktivbox anschliessen.

Die Spracheingabe

Eine berechtigte Frage ist: "Und wie kommen nun meine Sprachsegmente in den Chip?"
Grundsätzlich war zuerst einmal die Überlegung anzustellen, ob sich auch die NUR zur Spracheingabe erforderlichen Bauteile mit auf der Ausgabeplatine befinden sollten oder nicht. Für beide Varianten gibt es PRO- und CONTRA-Argumente. Dabei habe ich mich zur Verwendung einer separaten Eingabeeinheit entschlossen. Nicht zuletzt führt das zu einem sehr übersichtlichen und einfach zu realisierenden Decoderkonzept. Die Eingabe der Sprachsegmente und ihre anschliessende Kontrolle erfolgt dagegen völlig separat und benötigt auch keinerlei PC oder Microcontrollersteuerung. Aus Abb.3 geht die dafür benutzte Schaltungsanordnung hervor.


Abb.3  Anm.: verfügbare Typen inzwischen: ISD 2560/ 90/ 120
( zur Darstellung in Originalgröße auf Abbildungen klicken )


R1 1k C1 0.1uF
R2 10k C2 0.1uF
R3 10k C3 Elko 220uF/16V
R4 5K1 C4 0.1uF
R5 470k C5 Elko 4u7/16V
R6 1k C6 1nF
R7 100k C7 0.1uF
R8 100k C8 Elko 10uF/16V
R9 100k C9 Elko 10uF/16V
R9 100k C10 0.1uF
P1 470 Ohm
Taster für "ACTION"
D1 1N4148 o.ä.
Taster für "RESET"

 LED
Schalter für "PLAY/REC"

78L05 ( 5V-Spannungsregler)
IC-Fassung  28pol. DIL
Bauteileliste für Programmer
  zuzüglich Electr.-Mikrofon ( -kapsel )  und Lautsprecher bzw. Ohrhörer

Abb.3 zeigt das Schaltbild der separaten Einheit zum Aufsprechen auf die Sprachspeicherchips und zum Kontrollieren ihrer Inhalte. Zu Beginn sollte sich der Schalter PLAY/REC in der PLAY-Stellung befinden ( also geöffnet sein ). Wenn man daraufhin kurz nacheinander die Tasten "RESET" und "ACTION" betätigt, sollte bei einem vorher noch nicht besprochenen Chip im Lautsprecher schon einmal ein Grundrauschen hörbar werden. Ist das der Fall, dann kann mit dem Besprechen der einzelnen Segmente begonnen werden. Dazu schliesst man den PLAY/REC-Schalter, drückt kurz die RESET-Taste und spricht das erste Segment, indem man die Taste ACTION während des Sprechens gedrückt hält. Ihr Loslassen beendet die erste Segmenteingabe. Durch mehrmaliges Drücken der gleichen Taste können anschliessend auch noch alleweiteren benötigten Segmente gespeichert werden. Werden die Sprachsegmente für die Ziffern 0-9 benötigt, so dürfte es Sinn machen, sie in der gleichen Folge auch den Sprachsegmenten zuzuordnen. 
Nachdem der Eingabevorgang beendet ist, wird PLAY/REC wieder geöffnet und die RESET-Taste wieder einmal kurz gedrückt. Anschliessend können alle gespeicherten Sprachsegmente nacheinander jeweils durch einen kurzen Druck auf die Taste ACTION wiedergegeben und damit auch kontrolliert werden. Stellt man dabei noch Fehler fest, so kann die gesamte Aufsprechprozedur ( fast ) beliebig oft wiederholt werden.
Nach ein wenig Übung wird man feststellen, daß das Ganze kinderleicht vonstatten geht. Nach einigen praktischen Versuchen wird man auch gelernt haben, wie man bei der Spracheingabe mit der ACTION-Taste umgehen muss, damit die einzelnen Sprachsegmente ohne viel zeitlichen Überhang gespeichert werden.

Noch ein Tipp:
  Zur Unterdrückung hässlicher Zischlaute hilft es oft, wenn ein Taschentuch während der Aufnahmen um das Mikrofon gewickelt wird.


DOWNLOADS
Hier können die AT89C2051-HEX-Codes für den beschriebenen UNITALK-Decoder und auch für eine Version zur Sprachausgabe von GPS-Daten heruntergeladen werden.
Interessenten für bereits programmierte Prozessoren sollten sich bei mir per E-Mail melden.


PLATINENLAYOUTS
Andree aus Bremen hat sich schon einmal mit dem ISD-Programmer beschäftigt:

      
Abb.4a-4b Programmer für ISD2560/90/120
( zur Darstellung in Originalgröße auf Abbildungen klicken )

ALTERNATIVLÖSUNGEN
Die Firma  http://www.shop.robotikhardware.de bietet eine ähnliche Sprachausgabelösung unter dem Namen "RN-SPEAK" an. Dabei können auf elegante Weise bis zu drei Sprachchips des Typs ISD25xx mit insgesamt bis zu 6 Minuten Sprechzeit programmiert und gesteuert werden. Für meine Anwendung schien mir dieses Konzept zwar etwas überdimensioniert zu sein, aber nachdem es den dort zur Steuerung benutzten ATMEGA-8 Microcontroller auch einzeln gibt, habe ich ein Schaltbild erstellt ( Abb.5 ), das eine auf den Betrieb mit nur EINEM Sprachspeicherchip abgespeckte Version zeigt. Durch Trennung des steuernden Prozessors vom Sprachbord und separater Anordnung der nur zum Aufsprechen benötigten Bauteile, ergeben sich hierbei die unterschiedlichsten Konfigurationsmöglichkeiten. Bei der gewählten Anordnung können neue Sprachsegmente entweder mit Unterstützung der RN-Speak-Firmware, mit einem eigenen Programm oder auch nur mithilfe des alternativ nutzbaren einfachen REC/PLAY-Adapters eingelesen und kontrolliert werden. Dazu ist auch der z.B. über eine Leiste ansteckbare RECORD-Adapter erforderlich.
Der Wiedergabebetrieb  kann wiederum über die RN-SPEAK-Firmware und die von ihr bereitgestellten Steuerbefehle erfolgen. Hierfür stehen eine serielle und eine I2C-Schnittstelle bereit. Mit einer geeigneten, in das jeweilige Ausführungsprogramm eingebauten Routine ist jedoch auch eine direkte Steuerung des Sprachchips durch einen entsprechend programmierten Prozessor beliebigen Typs möglich. Solange Sprache nur wiedergegeben werden soll, wird der RECORD-Adapter nicht benötigt und kann entfernt werden. 


Abb.5   An den seriellen TTL-Ein/Ausgängen kann bei Bedarf  noch ein Pegelwandler MAX232 o.ä. angeschlossen werden
( Version vom 4.10.2006  ohne Gewähr )

Bereits im Jahre 2002 hatte ich auch ein Projekt namens VOLTTALK realisiert. Es dient der Sprachausgabe von Spannungswerten und kann z.B. im Modellbau verwendet werden. Als Sprachspeicher wurde mit dem 20-Sekundenchip ISD1420 dabei ein gegenüber den Chips aus der ISD25xx-Serie kleinerer ( und preiswerterer ) Bruder eingesetzt.
http://www.kh-gps.de/volttalk.htm