APPLICATIONSCREATION MUSICAL ★ CPC lernt sprechen ★

SpeechSet (Computer Technik)Applications Creation Musical
★ Ce texte vous est présenté dans sa version originale ★ 
 ★ This text is presented to you in its original version ★ 
 ★ Este texto se presenta en su versión original ★ 
 ★ Dieser Text wird in seiner Originalfassung präsentiert ★ 

Digitale Tonaufzeichnung, -Speicherung und -Wiedergabe ohne Zusatzhardware

Digitale Tonaufzeichnung ist der HiFi-Renner der letzten Jahre. Die ‘Compact Discs' drängen inzwischen alle Analog-Konkurrenten ins verrauschte Abseits. Immerhin bedienen sich die Laser-Plattenspieler einer digitalen Auflösung von 16 Bit. Soll aber lediglich die Sprachausgabe verständlich sein, kommt man mit einer wesentlich kleineren Auflösung aus; es reicht sogar der Ein-Bit-A/D-Wandler der Kassettenschnittstelle der CPCs aus, um einige Sekunden Sprache abzutasten und dann über den Sound-Chip zwar etwas polternd, aber doch recht verständlich die Worte wieder erklingen zu lassen.

Das Prinzip einer digitalen Ton-aufzeichnung ist im Prinzip recht einfach: ein schneller Analog/Digitalwandler liefert in einem hohen Abtast-Rhythmus die der jeweiligen Eingangsspannung entsprechenden Binärzahlen. Diese werden gespeichert und beim Abspielen wieder in demselben Rhythmus an einen Digital/ Analogwandler ausgegeben.

Die Übertragungsqualität hängt dabei von der Abtastrate und der 'Quantelung', also der Auflösung der verwendeten Wandler ab.

Nach dem in der Nachrichtentheorie sehr bekannten ‘Shan-nonschen Abtasttheorem' benötigt man eine Abtastfrequenz, die doppelt so hoch sein muß wie die höchste zu übertragende Signalfrequenz, damit man aus den Abtastwerten das ursprüngliche Signal wieder originalgetreu zusammensetzen kann. Da sich aber die Abtastwerte nicht beliebig genau digitalisieren lassen. erhält man durch die verbleibende Ungenauigkeit einen Rauschanteil, das sogenannte â– Quantisierungsrauschen'. Bei
einer linearen Auflösung kann man mit etwa 6 dB Rauschabstand pro Bit Auflösung rechnen. also bei den 16 Bits der Compact Discs mit dem geradezu utopischen Wert von 96 dB. Mit 6 dB ist ein Verhältnis der Signalspannung zur Rauschspannung von 2:1 gekennzeichnet. Pro Bit Auflösung verdoppelt sich demnach dieses Verhältnis, so daß man bei 16 Bit 65536: 1. also lediglich 0,0015 % Rauschanteil erhält. Es gibt aber heutzutage kein einziges (analoges) Auf-nahme-Studio, das auch nur annähernd diese Rauscharmul bieten kann.

Nach dem Abtasttheorem muß man allerdings mit 40 kHz Abtastrate arbeiten, um bis zu 20 kHz (HiFi-Qualität) zu übertragen. Demnach fallen bei 16 Bit Auflösung pro Sekunde immerhin 80 KByte an, die abgespeichert werden wollen. Für die reine Sprachausgabe ist hingegen keine HiFi-Qualität erforderlich. so daß man mit einer wesentlich kleineren Auflösung auskommt.

Das hier vorgestellte Programm arbeitet maximal mit einer Abtastfrequenz von etwa 14 kHz. wobei die Auflösung aber nur ein Bit beträgt, also mit Rauschabstand von lediglich 6 dB versehen ist. Dennoch ist die wiedergegebene Sprache erstaunlich verständlich. Bei 14 kHz und ein Bit Auflösung sind pro Sekunde 14000 Bits, also etwa 1.75 KByte an Speicherplatz erforderlich. Mit 21 KByte lassen sich demnach rund 12 Sekunden abspeichern.

Die Abtastrate läßt sich auf Kosten der Bandbreite aber auch verkleinern (Zeitkonstante in Zeile 2870 des Assemblerprogramms), so daß man auch Platz für etwas längere Sätze bekommt.

Als Analog/Digitalwandler kommt beim CPC der Kassettenport zum Einsatz, der über den Ein-/Ausgabebaustein 8255 (Port &F500. Bit 7) eingelesen werden kann. Die Ausgabe erfolgt mit dem Baustein, mit dem man auch sonst ‘Krachmacht, also mit dem Sound-Chip AY-3-8912, der sogar 16 Lautstärkestufen (vier Bit Auflösung) kennt. Wenn man dabei das Tonperiodenregister, das für die Tonhöhe verantwortlich ist, auf Null setzt, kann man den Ausgangspegel des betreffenden Kanals durch das Lautstärkeregister steuern. Man erhält so einen einfachen 4-Bit-D/A-Wandler. Da aber der Kassettenport nur ein Bit liefert, wird auch der Sound-Chip so programmiert. daß er nur 'einbittig' arbeitet, also entweder Nullpegel oder vollen Pegel führt.

Stolpersteine

Leider gilt es noch einige Stolpersteine der CPC-Entwickler beiseite zu räumen. Der erste ist der Sound-Chip selber, der nur mit 1 MHz betrieben wird. Er ist daher nicht direkt am Prozessorbus angeschlossen, sondern läßt sich nur indirekt über den I/O-Baustein 8255 betreiben. Dieser Umstand macht eine relativ komplizierte Programmierung notwendig, da die Software auch das Übernahmesignal erzeugen muß.

Auch die Adressierung der einzelnen Register des Sound-Chips ist indirekt: zuerst erhält das Adreßregister die gewünschte Registernummer und dann erfolgt die Ausgabe des Datenwerts, den der Sound-Chip dann dem vorgewählten Register zuordnet.

Jedesmal müssen bei der Übergabe zwei Steuersignale über Extra-Leitungen (Bit 7 und 6 von Port C) des 8255 ausgegeben werden, die angeben, ob es sich um eine Adresse (11xxxxxx) oder einen Wert handelt (10xxxxxx für Schreiben und 01xxxxxx für Lesen). Zu dem Zeitpunkt, an dem beim Schreiben Bit 7 wieder auf Null geht, wird das in Port A stehende Byte übernommen (Strobe).

Da aber über Port C (Bit 5) auch die Steuerung des Kassettenmotors erfolgt, muß man darauf achten, daß dieses Bit jeweils den Erfordernissen entsprechend gesetzt wird, also bei der Aufnahme auf *1' und bei der Wiedergabe auf ‘0'.

Demnach sieht eine vollständige Schreibanweisung an den Sound-Chip folgendermaßen aus:

LD A,Registernummer (0-14)
LD B,Adresse des Sound-Chip
OUT (C),A
LD B,Adresse des 8255 für Strobe
OUT (C),Bit 7 = 1 (Schreiben), Bit 6 = 1 (Adresse). Recorderbit
OUT (C),Bit 7 = 0 (Strobe). Bit 6 = 1 (Adresse). Recorderbit
LD A,Datenwert
LD B.Adresse des Sound-Chip
OUT (C),A
LD B,Adresse des 8255 für Strobe
OUT (C),Bit 7 = 1 (Schreiben), Bit 6 = 0 (Wert), Recorderbit
OUT (C),Bit 7 = 0 (Strobe), Bit 6 = 0 (Wert), Recorderbit

Da während der Programmausführung die Interrupts verboten werden, lassen sich die gestrichenen CPU-Register mitverwenden, um diese komplizierte Prozedur etwas zu vereinfachen. Bei der eigentlichen Sprachausgabe kann man auf das ständige Neuladen des Adreßregisters verzichten, weil man dabei immer mit demselben Lautstärkeregister arbeitet.

Für die Ausgabe werden die einzelnen Bits mittels RLC (HL) ins Carry-Flag geschoben und dann ausgewertet. Nach acht solcher Rotationen ist der ursprüngliche Wert im Speicher wiederhergestellt (einmal 'rum), so daß man sinnvollerweise die Ausgabe beliebig oft wiederholen kann.

Als RSX

Das ganze Programm wird von BASIC aus über drei RSX-Befehle gesteuert:

|RECORD, Adresse , Länge
|PLAY,Adresse,Länge
|SPEED, Zeitkonstante

Der Befehl |SPEED setzt die schon erwähnte Verzögerungskonstante, die die Abtastrate bestimmt. Je größer die Konstante gewählt wird, um so mehr leidet darunter die Qualität der Aufnahme. Bei der Wiedergabe läßt sich damit die Stimmlage beeinflussen.

Bei |RECORD gibt man den zur Verfügung gestellten Speicherbereich an. Die Länge (in Bytes) bestimmt zusammen mit der Abtastrate die Dauer der Aufnahme: etwa 1.75 KByte Sekunde bei der Zeitkonstanten = 1 und etwa 1,25 K Byte / Sekunde bei einer Zeitkonstanten = 10.

Der |PLAY-Befehl gestattet es, mittels Startadresse und Länge einen Teil (eine Art Fenster) aus der gesamten Aufnahme her-auszuschneiden, beispielsweise um einzelne Worte oder Laute auszugeben.

Fürdie Aufnahme benötigt man einen normalen Recorder mit Mikrofon, mit dem man die Kassette bespielt. Dann spult man die Kassette zurück, so daß sie kurz vor dem Beginn der Aufnahme steht. Je nach CPC-Typ wird die Aufnahme nun entweder über den eingebauten CPC-Recorder oder den externen Recorderanschluß mit |RECORD eingelesen.

Das hier angegebene Demo-Programm vereinfacht den Umgang mit den RSX-Befehlen, indem es alle notwendigen Angaben abfragt. Es enthält auch den vollständigen BASIC-Lader ab Zeile 3000, der das Programm unterhalb von HIMEM 'relokalisiert' ansiedelt.

C'T 8603

★ PUBLISHER: Computer Technik (c't)
★ YEARE: 1985 , 1986
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ AUTHOR: Helge SCHULZ
 

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » LambdaSpeak Speech Synthesizer
» Applications » Speech for SymbOS
» Applications » Superior Software - Speech! ( Manual)
» Applications » Speech-RSX (CPC Amstrad International)
» Applications » RSX Speech System (Amstrad Action)
» Applications » DK'Tronics Speech Synthesizer Software
Je participe au site:

» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop
Page créée en 516 millisecondes et consultée 337 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.