Hallo meine Lieben CPCler,
weiß jemand ob irgendwo das disassemblierte Sourcecode-Listing von der RSX-Erweiterung für den SSA1 Amstrad Sprach-Synthesizer liegt? Speziell würde mich der |SAY-Befehl interessieren. Der macht nämlich "Text 2 Speech" - Englisch nach SP0256-AL2 Allophone Codes für Sprachausgabe. Das könnte ich prima für dieses Projekt gebraucht, wo ich den LambdaSpeak 1.99 an den Microprofessor rangehängt habe. Leider habe ich natürlich nicht die RSX-Treibersoftware. Wäre toll wenn mir hier jemand helfen könnte!
[CPCEmulator]https://youtu.be/XMrv2D5dri0[/CPCEmulator]
Freut mich, dass Dein Kanal wieder belebt wird. :smiley027:
Dankeschön, aber der Kanal ist nach wie vor geschlossen. Da werden nur kleine Clips hochgeladen; richtige Videos mache ich nicht mehr. Das ist Vergangenheit.
VG,
Michael
Hi Lambda, ich zerlege gerade die SSA1.BIN von der demodisc vom SSA1,
Ist schon recht lustig, haben relocable gemacht, das hab ich soweit weg;) und dann arbeiten die noch mit tablen ;(
Super! Ja mit den Tabellen kann ich mir vorstellen; man macht da üblicherweise "Regeln" für die Verarbeitung. Die sind sicher in den Tabellen kodiert.
Relocatable war klar, da der Lader nach der Start-Addresse fragt.
die Alophones sollten doch die gleichen sein wie bei dem DK-Tronics oder irre ich micht da ?
Ja, genau. DK'tronics hatte ebenfalls text 2 speech. Das ROM wäre sonst auch ein Kandidate, wenn das mit SSA-1 zu schwierig ist.
ist funny wie die das gemacht haben, verschiedene zeichen werden nicht wiedergegeben gesprochen ;)
stand der. dinge schicke ich dir per pn wenn das geht
Gute Arbeit Jungs! Wenn es da ein kommentiertes Listing gibt, dann bitte auch hier einstellen. :smiley027:
Hier ein paar phonos
numbers_
label_9CB8 db &2B,&13,&0E,&35,&80 ; 0 Zero
label_9CBD db &2E,&0F,&8B ; 1 One
label_9CC0 db &0D,&9F ; 2 Two
label_9CC2 db &1D,&33,&93 ; 3 Three
label_9CC4 db &28,&BA ; 4 four
label_9CC7 db &28,&06,&A3 ; 5 five
label_9CCA db &37,&06,&2A,&B7 ; 6 Six
label_9CCE db &37,&06,&23,&33,&8B ; 7 seven
label_9CD3 db &14,&91 ; 8 eight
label_9CD5 db &0B,&06,&8B ; 9 nine
label_9CD8 db &0D,&07,&8B ; 10 ten
label_9CDB db &13,&2D,&07,&23,&07,&8B ; 11 eleven
label_9CE1 db &0D,&2E,&07,&2D,&A3 ; 12 twelve
label_9CE6 db &1D,&33,&11,&13,&8B ; 13 thirdteen
label_9CEB db &28,&3A,&11,&13,&8B ; 14 fourteen
label_9CF0 db &28,&0C,&28,&11,&13,&8B ; 15 fiveteen
label_9CF6 db &37,&0C,&2A,&37,&11,&13,&8B ; 16 sixteen
label_9CFD db &37,&07,&23,&07,&0B,&11,&13,&8B ; 17 seventeen
label_9D05 db &14,&11,&13,&8B ; 18 eighteen
label_9D09 db &0B,&06,&0B,&11,&13,&8B ; 19 nineteen
label_9D0F db &0D,&2E,&07,&0B,&11,&93 ; 2O twenty
label_9D15 db &1D,&34,&11,&93 ; 30 thirty
label_9D19 db &28,&28,&3A,&11,&93 ; 40 fourty
label_9D1E db &28,&28,&0C,&28,&11,&93 ; 50 fifty
label_9D24 db &37,&37,&0C,&2A,&37,&11,&93 ; 60 sixty
label_9D2B db &37,&37,&07,&23,&07,&0B,&11,&93 ; 70 seventy
label_9D33 db &14,&11,&93 ; 80 eighty
label_9D36 db &38,&06,&0B,&11,&93 ; 90 ninty
label_9D3B db &10,&0C,&2D,&13,&18,&8B ; millions
label_9D41 db &1D,&20,&2B,&1A,&0B,&95 ; tausend
label_9D47 db &1D,&0F,&0B,&21,&27,&07,&95 ; hundrets
;---------------------------------------------------------------------
; & % * /\ | @ ^ + - = < > # $
label_9D4E db &1A,&0B,&A1 ; (&) hexsymbol
label_9D51 db &09,&33,&37,&37,&06,&0B,&8D ; (%) Prozent
label_9D58 db &0D,&06,&10,&B7 ; (*) asterix
label_9D5C db &21,&0C,&23,&06,&15,&07,&15,&3F,&86 ; (/\) divider
label_9D65 db &3F,&BB ; (|) tile
label_9D67 db &1A,&8D ; (@) at
label_9D69 db &09,&20,&B3 ; (^) sqaure
label_9D6C db &09,&2D,&0F,&B7 ; (+) plus
label_9D70 db &10,&06,&0B,&0F,&B7 ; (-) minus
label_9D75 db &13,&07,&2D,&B7 ; (=) eval
label_9D79 db &2D,&07,&37,&37,&12,&1A,&8B ; (<) lesser
label_9D80 db &3D,&27,&14,&11,&33,&12,&1A,&8B ; (>) greater
label_9D88 db &21,&17,&3E,&3B,&B7 ; (space) not returned
label_9D8D db &09,&20,&0B,&15,&B7 ; (!) not returned
label_9D92 db &09,&17,&0C,&0B,&8D ; (") not returned
label_9D97 db &1B,&1A,&A5 ; (#) hash
label_9D9A db &37,&37,&0D,&27,&0C,&AC ; (§) String
kannst du auch mit basic ausgeben lassen
so als bespielt
10 mode 2
20 read 2
30 if a=&FF then end
40 out &FBEE,a: ' SSA1 oder &FBFE für dks
50 goto 20
60 data &3D,&26,&17,&11,&33,&12,&1A,&8B,&FF
arbeite grad an der routine um wörter wieder zu geben
Ja, genau. Die "festprogrammierten" Wörte sind relativ klar. Die findest Du auch im SP0256-AL2-Manual; evtl. einfach im ROM auf diese Weise zu finden.
Interessant sind die Regeln / der Algorithmus, der beliebigen englischen Text in Allophone umwandelt.
@TFM wenn wir den Code haben, können wir das ins LambdaSpeak ROM miteinbauen! |say für den SP0256-AL2 bzw. die SP0-Emu.
Quote from: LambdaMikel on 10. July 2025, 08:38:29Interessant sind die Regeln / der Algorithmus, der beliebigen englischen Text in Allophone umwandelt.
@TFM wenn wir den Code haben, können wir das ins LambdaSpeak ROM miteinbauen! |say für den SP0256-AL2 bzw. die SP0-Emu.
Ja, das mache ich gerne. Dann wäre es auch wünschenswert Deutsche Sprachausgabe zu haben :smiley027:
Ich schreib mal was, hehe,
im ssa1 rsx werden leider nicht alle symbole ausgegeben ;)
möglich chars ;check for & % * / | @ ^ + - = >
und checkt_table wenn du das schon bei der von mir drin hast ;)
ein grund dafür ist, das der say command verschieden chars zu kontrolle nutz, ein |say,"'1'2" gib one two zurück
if lenght = 1 load byte as single_phone else load byte as longphones;
on numbers and count numbers
if byte is &30 to &39 load numbers
load from table numbers
; if lower char
if byte > &61 or byte < &7B convert them to by and &DF to upper_chars &41 - &5B
erschwerend sind die verückten addressen, teilweise aussßerhalbe der alphone table ;(
BSP. &9250 für alphabet als würde da wa fehlen, fehlt aber nix , der berechnet nur dähmlich. Da gibts sogar &9244 im der laufzeit, debuggen macht ja so spass ;)
phonos
ssa1 der rsx teil
btw. im anhang die phonos soweit ich sie hab vom SSA1 RSX das ist
so crazy
Ab &A309 ist der rumtime varible block hab den zur Controlle auf defs gesetzt , geht damit
Zu |echo der ist ähnlich wie der von dk-tronics aber ein bissle buggy ;(
Quote from: TFM on 10. July 2025, 12:18:36Deutsche Sprachausgabe zu haben :smiley027:
Deutsche Sprachausgabe macht das aber nicht - nur English :) Falls Du Deutsch willst, kannst Du das BASIC-Programm das text 2 speech für Deutsch macht in Z80 übersetzen :D
Quote from: BadCPC on 10. July 2025, 13:48:26so crazy
super fortschritt, das wird schon! :jubelaola:
Quote from: LambdaMikel on 11. July 2025, 17:04:58Quote from: TFM on 10. July 2025, 12:18:36Deutsche Sprachausgabe zu haben :smiley027:
Deutsche Sprachausgabe macht das aber nicht - nur English :) Falls Du Deutsch willst, kannst Du das BASIC-Programm das text 2 speech für Deutsch macht in Z80 übersetzen :D
Dazu müsste man die alos im sp umschreiben ;)
Quote from: BadCPC on 11. July 2025, 17:17:07Quote from: LambdaMikel on 11. July 2025, 17:04:58Quote from: TFM on 10. July 2025, 12:18:36Deutsche Sprachausgabe zu haben :smiley027:
Deutsche Sprachausgabe macht das aber nicht - nur English :) Falls Du Deutsch willst, kannst Du das BASIC-Programm das text 2 speech für Deutsch macht in Z80 übersetzen :D
Dazu müsste man die alos im sp umschreiben ;)
Ja, aber noch mehr... den Regelbasierten Übersetzer ändern.
Mehr Infos hier:
[CPCEmulator]https://youtu.be/aTxufTKfrYk[/CPCEmulator]
"
Ich habe das Buch "BASIC Computer Spiele" (eine deutsche Version des Klassikers "Basic Computer Games") ca. 1985 aus der Bücherhalle in Hamburg-Niendorf in den Sommerferien ausgeliehen, in meinen CPC 464 eingetippt, und dabei für Locomotive BASIC angepasst und etwas erweitert (Sound-Effekte etc.) Zudem besaß ich den Sprachsynthesizer von DK'tronics (http://www.cpcwiki.eu/index.php/Dk%27...) seit April 1985, und die "CPC Schneider International"-Zeitschrift hatte in ihrer August 1985-Ausgabe eine Treibersoftware (ebenfalls in BASIC) für den DK'tronics abgedruckt: "Der CPC spricht deutsch". Was lag also näher, als dem abgetippten (deutschsprachigem) BASIC-Eliza eine Stimme zu geben? Ich kombinierte also die beiden BASIC-Programme, und das Ergebnis war.. nun ja... bescheiden. Ich erinnere mich noch, wie meine Freunde mich auslachten, da die Sprachsynthese auf dem Commodore 64 (via "SAM") so viel besser war! Aber immerhin, Eliza sprach nun Deutsch, und es war eines der wenigen Programme für den CPC, die den DK'tronics Sprachsynthesizer überhaupt nutzten. Und es war ein gutes DIY Sommer-Projekt!
Nun, 32 Jahr später, habe ich mit "LambdaSpeak" einen modernen "next generation" Sprach-Synthesizer für den CPC entwickelt, der zudem einen Kompatibilitäts-Modus hat; er emuliert in diesem Modus den Amstrad / Schneider SSA-1 Sprachsynthesizer (http://www.cpcwiki.eu/index.php/Amstr...) Obwohl DK'tronics und SSA-1 den gleichen Sprach-Chip SPO256 verwenden, gibt es doch kleinere Unterschiede (IO-Ports und Protokoll). Die Phoneme sind allerdings identisch, und das ist das Wichtigste. Mit 2 minimalen Änderungen an meinem alten Eliza-Programm wurden der DK'tronics-Treiber im Eliza dann SSA-1 kompatibel - und das Ergebnis ist durchaus verständliches Deutsch! Ich war überrascht. Sehr viel besser und klarer als mit dem DK'tronics.
Hier passiert also folgendes:
der DK'tronics-BASIC-Treiber im Eliza-Programm erzeugt "Phoneme" für Deutsch, die für den DK'tronics-Sprachsynthesizer (bzw. SPO256) gedacht sind. Diese sind identisch mit den SSA-1-Phonemen, da dieser ebenfalls den SPO256 verwendet.
LambdaSpeak hat einen SSA-1-Emulationsmodus, in dem die SPO256-Phoneme "in Echtzeit" über eine Lookup-Table in Emic 2 / DecTalk Phoneme umgewandet werden (der Emic 2-Sprachsynthesizer, auf dem LambdaSpeak basiert, ist DecTalk / Epson-basiert). Auch diese DecTalk-Phoneme sind eigentlich für Englisch gedacht!
Das Ergebnis kann sich hören lassen. Allerdings ist der "native mode" des LambdaSpeak doch wesentlich besser:
• LambdaSpeak meets BASIC Eliza on the CPC 464
Hier wird der Emic 2 direkt im "Epson-Modus" angesprochen.
Transcript
"
das liest sich ja klasse, aber ich denke es geht dir darum wie beim ssa1 der rsx say das macht, natürlich mit lookup tabellen ;) abhängig davon wo Vokale Selbstlaute stehen benutzt er verschiedene Phonos , kürze das gerne ab ;), ssa1 rsx benutzt dazu cpi an verschiedene adressen Lambda wird das schon gesehen haben ;) so mal weiter machen damit wir mal endlich source mit beschreibung bekommen ;)
Genau, ich wollte nur einen Hinweis auf das "Deutsch-nach-Phoneme"-Programm aus der CPC International von damals geben; das macht das für Deutsch. Ist also schon ein bißchen anders als einfach nur die Phoneme für deutsche Wörter zu ändern. Aussprache-Regeln und so...
Ich hänge es mal an... s. S. 56. Das wäre halt auch cool, wenn wir das mal als RSX in Assembler machen würden. Aber wie gesagt, ein größeres Projekt. Und zudem ist die Eignung für Deutsch trotzdem etwas eingeschränkt.