S.O.S.!
Speech synthesizer
(C) (r) Wlodek Black
Hello all!
The letter which I received on November 12, the eve of World Day
Blind (symbolic or accidentally?), is addressed not only to me
but and anyone who can help. Please read the letter, and you
all will become clear.
=== Cut: ===
Hi, Vladimir. Andrew wrote to you from the city. Member of the
Iron Falcons. I am a musician, programmer of the group. I
already wrote to you. It was so nice to read a letter from you.
Also, I am pleased for invitation to the festival. Volodya, I
wrote to you that I probably can not come because I have my own
problems. Firstly, the road, and then - the hotel, that is
permanent clogged, and to the same summer. Yes, and I do not
know whether I wrote to you, or No, I have vision problems.
That is, do not see. Work on the Speccy helps me a speech
synthesizer, which I read the text. True, it is made correctly,
and the functions it little, but still enough to work, though
there are a lot of inconvenience. I finish him nobody, as the
man who started do, dumped at IBM, but I will remain faithful
to my Speccy. Vladimir, I am sending you a file with a
synthesis, he wrote under is_dos, there are a couple versions,
as well as the source for them. Older versions made without the
bloat, that is, do not read the numbers or, more precisely,
there is a old version that can not read the numbers. Starting
from the second version, the synthesis of reading numbers.
There have tried to add a little functions - such as fast
forward and rewind. But the new version not normally work, that
is stuck. Write how to start synthesis. First you have to
surpass is_dos, and then rename that it has the extension. com.
After that, move the cursor to text file, which must be read,
and the monitor command line call-to-speech without any
parameters, because no parameters to it there. After vyzovesh
synthesis Speech from the command line it will read the text.
The new versions operate the buttons. Ones - Fast-forward one
sector. Deuce - rewind to the sector. Troika - remember
location, and the Quartet to return to where remembered.
Volodya, as these versions do not work, I thought, do not
declare whether the contest for the best speech synthesis, as
this thing desired. Well enter himself in my position. Read
something new always desirable, but not always someone to read,
and constantly be dependent on someone to feel like. I would
like to programm somehow tells you where you are, when stopped,
as Text files can be large, but always read from the beginning
uncomfortable, because you want to call from wherever
stopped. Also, to rewind were made literate. AND
everything to work correctly. I guess you could say: "Why
this for me to contact? Why do people syntheses, no it would be
better make a cool demo. "But believe me, it is necessary.
Volodya, you have addresses in different magazines, so I ask
you, if you can, then write to them and give such a proposition
- to make the competition for the best speech synthesis. Can
send them to these versions, I'm sending you. You'll be
thankful.
On this I will finish. Goodbye. Regards ANDREW.
P.S. The fact that I can not come to FunTop98, does not mean
that Nobody in our group would not come. Guys may come. I
do not know yet. I should know - I'll write.
While I will leave, and even so much written. I hope you
do not get tired of reading about my problems.
Sorry for the typos.
NDREW
=== Cut ^ ===.
[End of Andrew's letter].
Mesh source texts. Please try to bring
Andrew's request to all coders, especially owning
programming under the IS-DOS (alas, the latter powerless
myself). Although, you can probably make a version and a
TR-DOS. As far as I understand in the original version to bind
to IS-DOS has only loader text files, and actually
zvukosintezator works against itself, and it can be from any
otassemblirovat address. Perhaps someone has already worked a
similar problem, and if not impossible, it's easier and better
to re-write subj. Only one requirement is clear is clear: the
program must controlled by the same keys must be listed
Andrei functions, should provide the sound quality is not worse
than was.
Request to the editors of local publications Spectrum:
Please note, reprint, vzlohmatte your
encoders.
Help man!
Write to Andrew at:
felcons@litech.lviv.ua
^ No mistake!
If you need to archive "sintez", signalte on ZXNet. At
Falcons-s, likely, and so cares enough ...
Forvardte further.
=== Cut: ===
4-th version of the synthesizer
ORG 31000
BEG_OP LD C, # 8A
RST # 10
LD (F_NUMB), A
LD C, # 1926
OR A
RET Z
RST # 10
RET C
EXX
LD BC, # 000E
ADD HL, BC
LD E, (HL)
INC HL
LD D, (HL)
LD (F_LENG), DE
LD A, E
LD (OSTAT), A
INC D
LD A, D
LD (NUM_BL), A
EXX
;
PROG
LD (SP_), SP
CALL READ
RET C
LD HL, NUM_BL
LD A, (TEBLOK)
CP (HL)
JR Z, LAST_B
CALL SET
CALL $ SAY
JR PROG
LAST_B CALL SET; can make a small loop
CALL $ SAY
EXIT RET
;
READ LD HL, IN_BUF
LD DE, IN_BUF +1
LD BC, # 00FF
LD (HL), 32
LDIR
LD A, (TEBLOK)
LD E, A
LD D, # 00
LD HL, IN_BUF
XOR A
LD C, # 3D
RST # 10
INC E
LD A, E
LD (TEBLOK), A
RET C
RET
SKIP_B LD A, (TEBLOK)
INC A
LD (TEBLOK), A
RET
;----------------------$ R_KEY LD C, 9
LD A, 247, 4 SEMIROW
IN A, (# FE)
BIT 0, A; "1"
JP Z, FAST
BIT 1, A; "2"
JP Z, HALT
BIT 2, A
JP Z, SAVE
BIT 3, A
JP Z, LOAD
JP RTN
FAST LD HL, TEBLOK
LD A, (NUM_BL)
CP (HL)
RET Z
LD SP, (SP_)
JP PROG
RTN LD HL, # 0400
LD ($ SPEED), HL
RT RET
SAVE LD A, (TEBLOK)
DEC A
LD (TEBL2), A
RET
LOAD LD A, (TEBL2)
LD (TEBLOK), A
LD SP, (SP_)
JP PROG
BEEP LD HL, 400
LD DE, 261
CALL # 03B5
RET
HALT
LD A, (TEBLOK)
CP 2
RET C
DEC A
DEC A
LD (TEBLOK), A
LD SP, (SP_)
JP PROG
TEBL2 DEFB # 00
SP_ DEFW # 0000
F_LENG DEFW # 0000
F_NUMB DEFB # 00
TEBLOK DEFB # 00
IN_BUF DEFS 256
$ T_ADR DEFS 1024
NUM_BL DEFB # 00
OSTAT DEFB # 00
SET LD BC, 256
LD HL, IN_BUF
LD DE, $ T_ADR
GET LD A, (HL)
JR ANALIZ
ONECH LD (DE), A
INC DE
INC HL
DEC BC
PROWER LD A, C
OR B
RET Z
JR GET
ANALIZ CP # F6; I ua
JP Z, MIN173
CP # F7; i ua
JP Z, MIN174
CP "p"; E0
JP NC, RUSL2
CP "and"; A0
JP NC, RUSL1; RUS UP CASE
CP "a"; 61
JP NC, LATL; LAT UP CASE
CP # 20
JP C, PRB
CP "0"
JP Z, NIL
CP "1"
JP Z, ONE
CP "2"
JP Z, TWO
CP "3"
JP Z, TRE
CP "4"
JP Z, FOR
CP "5"
JP Z, FIV
CP "6"
JP Z, SIX
CP "7"
JP Z, SEV
CP "8"
JP Z, EIT
CP "9"
JP Z, NIN
JP ONECH
NIL LD A, "N"
LD (DE), A
INC DE
LD A, "O"
LD (DE), A
INC DE
LD A, "L"
LD (DE), A
INC DE
LD A, "I"
LD (DE), A
INC HL
INC DE
DEC BC
JP PROWER
ONE LD A, "O"
LD (DE), A
INC DE
LD A, "D"
LD (DE), A
INC DE
LD A, "I"
LD (DE), A
INC DE
LD A, "N"
LD (DE), A
INC HL
INC DE
DEC BC
JP PROWER
TWO LD A, "D"
LD (DE), A
INC DE
LD A, "V"
LD (DE), A
INC DE
LD A, "A"
LD (DE), A
INC HL
INC DE
DEC BC
JP PROWER
TRE LD A, "T"
LD (DE), A
INC DE
LD A, "R"
LD (DE), A
INC DE
LD A, "I"
LD (DE), A
INC HL
INC DE
DEC BC
JP PROWER
FOR LD A, "C"
LD (DE), A
INC DE
LD A, "H"
LD (DE), A
INC DE
LD A, "O"
LD (DE), A
INC DE
LD A, "T"
LD (DE), A
INC DE
LD A, "Y"
LD (DE), A
INC DE
LD A, "R"
LD (DE), A
INC DE
LD A, "Y"
LD (DE), A
INC HL
INC DE
DEC BC
JP PROWER
FIV LD A, "P"
LD (DE), A
INC DE
LD A, "Y"
LD (DE), A
INC DE
LD A, "A"
LD (DE), A
INC DE
LD A, "T"
LD (DE), A
INC DE
LD A, "'"
LD (DE), A
INC HL
INC DE
DEC BC
JP PROWER
SIX LD A, "C"
LD (DE), A
INC DE
LD A, "H"
LD (DE), A
INC DE
LD A, "I"
LD (DE), A
INC DE
LD A, "S"
LD (DE), A
INC DE
LD A, "T"
LD (DE), A
INC DE
LD A, "'"
LD (DE), A
INC HL
INC DE
DEC BC
JP PROWER
SEV LD A, "S"
LD (DE), A
INC DE
LD A, "I"
LD (DE), A
INC DE
LD A, "M"
LD (DE), A
INC HL
INC DE
DEC BC
JP PROWER
EIT LD A, "V"
LD (DE), A
INC DE
LD A, "I"
LD (DE), A
INC DE
LD A, "S"
LD (DE), A
INC DE
LD A, "I"
LD (DE), A
INC DE
LD A, "M"
LD (DE), A
INC HL
INC DE
DEC BC
JP PROWER
NIN LD A, "D"
LD (DE), A
INC DE
LD A, "E"
LD (DE), A
INC DE
LD A, "V"
LD (DE), A
INC DE
LD A, "I"
LD (DE), A
INC DE
LD A, "A"
LD (DE), A
INC DE
LD A, "T"
LD (DE), A
INC DE
LD A, "'"
LD (DE), A
INC HL
INC DE
DEC BC
JP PROWER
AFT1 CP "A"
JP Z, MIN63
CP "B"
JP Z, MIN63
CP "AND"
JP NC, GREATI
JP NO_I_U
GREATI CP "P"
JP NC, GREATR
JP MIN63
GREATR CP "F"
JP NC, NO_I_U
JP MIN62
NO_I_U CP "B"
JP Z, MIN44
CP "F"
JP Z, MIN60
CP "D"
JP Z, MIN64
CP "Z"
JP Z, MIN45
CP "F"
JP Z, MIN78
CP "X"
JP Z, MIN77
CP "C"
JP Z, MIN83
CP "Y"
JP Z, MIN66
CP "L"
JP Z, MIN60
CP "E"
JP Z, MIN88
CP "E"
JP Z, YE
CP "F"
JP Z, ZH
CP "H"
JP Z, CZ
CP "R"
JP Z, CH
CP "u"
JP Z, CHE
CP "U"
JP Z, YU
CP "H"
JP Z, YA
CP "E"
JP Z, YO
CP "e"
JP Z, YO
CP "Ji"
JP Z, YE
CP "Ji"
JP Z, YE
CP "°"
JP Z, YI
CP "∙"
JP Z, YI
PRB CP # 00
JR Z, N0
LD A, # 20
N0 JP ONECH
RUSL2 CP "E"; F0
JP NC, AFT1
SUB # 50
JP AFT1
RUSL1 CP ""; B0
JP NC, AFT1
SUB # 20
JP AFT1
LATL CP "{"; 7B
JP NC, AFT1
SUB # 20
JR N0
MIN174 SUB 1
MIN173 SUB 85
MIN88 SUB 5
MIN83 SUB 5
MIN78 SUB 1
MIN77 SUB 11
MIN66 SUB 2
MIN64 SUB 1
MIN63 SUB 1
MIN62 SUB 2
MIN60 SUB 15
MIN45 SUB 1
MIN44 SUB 44
JP ONECH
YE LD A, "Y"
LD (DE), A
INC DE
LD A, "E"
JP KONEC
YU LD A, "Y"
LD (DE), A
INC DE
LD A, "U"
JP KONEC
YA LD A, "Y"
LD (DE), A
INC DE
LD A, "A"
JP KONEC
YO LD A, "Y"
LD (DE), A
INC DE
LD A, "O"
JP KONEC
YI LD A, "Y"
LD (DE), A
INC DE
LD A, "I"
JP KONEC
ZH LD A, "Z"
LD (DE), A
INC DE
LD A, "H"
JP KONEC
CZ LD A, "C"
LD (DE), A
INC DE
LD A, "Z"
JP KONEC
CH LD A, "S"
LD (DE), A
INC DE
LD A, "Z"
JP KONEC
CHE LD A, "S"
LD (DE), A
INC DE
LD A, "Z"
LD (DE), A
INC DE
LD A, "'"
KONEC LD (DE), A
INC HL
INC DE
DEC BC
JP PROWER
; Module sound generation
$ SAY LD HL, $ T_ADR
DI
CALL LEA69
EI
RET
LEA69 LD B, # BB
LEA6B PUSH BC
PUSH HL
PUSH DE
CALL $ R_KEY
POP DE
POP HL
POP BC
LD A, B
LD C, B
LD B, (HL)
OR A
RET Z
LD A, C
CP # 41
JP M, LEA9B
CP # 5B
JP P, LEA9B
CP # 43
LD A, B
JP NZ, LEA86
CP # 48
JP Z, LEA8C
LEA86 CP # 27
LD A, C
JP NZ, LEA90
LEA8C ADD A, # 1A
LD B, # BB
LEA90 PUSH BC
PUSH HL
CALL LEAC3
POP HL
POP BC
LEA97 INC HL
JP LEA6B
LEA9B LD DE, # 0000
CP # 2E
JP Z, LEAB3
LD DE, # 8000
CP # 2C
JP Z, LEAB3
LD DE, # 4000
CP # 20
JP NZ, LEAB9
LEAB3 CALL LEABC
JP LEA97
LEAB9 JP LEA97
LEABC DEC DE
LD A, D
OR E
JP NZ, LEABC
RET
LEAC3 LD BC, LEAF7
LD L, A
LD H, # 2000
ADD HL, BC
LD BC, LEB6C
LD L, (HL)
LD H, # 2000
ADD HL, BC
LEAD1 LD A, (HL)
AND # 0F
LD C, A
INC HL
LD A, (HL)
AND # 80
OR C
LD C, A
DEC HL
LEADC LD A, (HL)
RLCA
RLCA
RLCA
AND # 07
PUSH HL
JP Z, LEB1B
LD DE, LED35
LD L, A
LD H, # 2000
ADD HL, DE
LD B, (HL)
POP HL
INC HL
LD A, (HL)
DEC HL
PUSH HL
RLA
LD DE, LEC2E
LEAF7 LD L, A
LD H, # 2000
ADD HL, DE
LD A, # 80
LEAFD PUSH AF
AND (HL)
JP Z, LEB04
LD A, # 10
LEB04 OUT (# FE), A
LD A, (LEB33)
LEB09 DEC A
JP NZ, LEB09
POP AF
DEC B
JP Z, LEB1B
OR A
RRCA
JP NC, LEAFD
INC HL
JP LEAFD
LEB1B LD HL, ($ SPEED)
EX DE, HL
XOR A
CALL LEABC
DEC C
LD A, C
AND # 0F
POP HL
JP NZ, LEADC
LD A, C
RLA
RET C
INC HL
INC HL
JP LEAD1
LEB33 DEFB # 1C
$ SPEED DEFB # 00, # 04
LEB36 DEFB ":",# ED, # 00
DEFB # 02, # 06, # 0A
DEFB # 0E, # 10, # 12
DEFB # 16, # 1A, # 1C
DEFB ""","'","*"
DEFB "."," 2 "," 4 "
DEFB "8", "B", "H"
DEFB "J", "N", "P"
DEFB "P", "V", # 1A
DEFB "", "d", "f"
DEFB "p", "t", "z"
DEFB "|",# C2, # 84
DEFB # 86, # C2, # C2
DEFB # C2, # 88, # 8C
DEFB # 92, # 94, # C2
DEFB # 9E, # A6, # A8
DEFB # AE, # B0, # C2
DEFB # C2, # 86, # BC
LEB6C DEFB "6", # 81, "4"
DEFB # 19, "1", # AB
DEFB # 18, # 19, # 91
DEFB # C3, "4", # 19
DEFB "1", # E0, "6"
DEFB # 84, # 92, # E3
DEFB "5", # 19, "Q"
DEFB # 9C, "1", "1"
DEFB "4", # 96, "6"
DEFB # 87, "3 ",":"
DEFB "2 ","="," 2"
DEFB # C0, # 18, # 19
DEFB "Q", # 9C, "3"
DEFB """," 1 ", # B1
DEFB "1", "1", "6"
DEFB # A5, "1", "1"
DEFB "6", # A8, "6"
DEFB # 8A, # 18, # 19
DEFB "1", # AB, # 18
DEFB # 19, "Q", # 1C
DEFB "4", "1", "2"
DEFB "4", "2", # B7
DEFB """,# 10, # 13
DEFB # 19 ,"!",# AE
DEFB # 92, # C3, # 18
DEFB # 19, "1", # E0
DEFB "6", # 8D, "4"
DEFB "1", "2", "4"
DEFB "2", # B7, # 18
DEFB # 19, "q", # 1C
DEFB # 92, # C3, "2"
DEFB "1", "2", "C"
DEFB "2", "D", "2"
DEFB # C5 ,"?",# 81
DEFB "4", # 19, "1"
DEFB "+"," 3 ",":"
DEFB "2 ","="," 2"
DEFB # C0, # 18, # 19
DEFB # 91, # D3, "3"
DEFB # 19, "q", "m"
DEFB "2", # 93, ">"
DEFB # 84, # 92, "c"
DEFB "3 ",":"," 2"
DEFB "="," 2 ", # C0
DEFB # 92, # F3, ">"
DEFB # 87, "1", "1"
DEFB "6 ","%"," 1
DEFB "1", "5 ","%"
DEFB "2", # 93, ">"
DEFB # 8A, # 18, # 19
DEFB "a ","+"," 3"
DEFB ":"," 2 ","="
DEFB "2", # C0, # 13
DEFB # 19, "2 ","`"
DEFB # 13, # 19, "q"
DEFB # DD, # 92, # D3
DEFB # 18, # 19, "q"
DEFB "m", "2", # 93
DEFB ">",# 8D, "4"
DEFB "1", "2", "4"
DEFB "2", "7", "3"
DEFB ":"," 2 ","="
DEFB "2", # C0, "2"
DEFB "S", "2", "T"
DEFB "2", # D5
LEC2E DEFB # 1A, # 99, # E1
DEFB # C3, # E1, # C7
DEFB # 8F, # 0F, # F8
DEFB # 03, # 0F, # 07
DEFB # C1, # E3, # FF
DEFB "@",# 17, # FF
DEFB # 00, # 03, # F8
DEFB "|",# C1, # F1
DEFB # F8, # 03, # FE
DEFB # 00, "", # FC
DEFB # 00, # 03, # F8
DEFB # 0F, # 09, # F1
DEFB # FE, # 03, # EF
DEFB "@",# 17, # FF
DEFB # 00, # 03, # E1
DEFB "", "5", # C5
DEFB # AA, "5" # 00
DEFB # 00, # 00, # 00
DEFB # 00, # 00, ">"
DEFB # 8E, "8", "s"
DEFB # CF, # F8, "x"
DEFB # C3, # DF, # 1C
DEFB # F1, # C7, # FE
DEFB # 03, # C0, # FF
DEFB # 00, # 00, # FF
DEFB # F8, # 00, ""
DEFB # F8, # 03, # FF
DEFB # F0, # 01, # FF
DEFB # E0, # 03, # AA
DEFB # CA, "Z", # D5
DEFB "!","=",# FE
DEFB # 1F, # F8, # 00
DEFB # 00, # 1F, # FF
DEFB # FC, "", # 00
DEFB # 00, # 03, # FF
DEFB # FF, # 08, "y"
DEFB # 00, # 02, # FF
DEFB # E1, # C7, # 1F
DEFB # E0, # 03, # FF
DEFB # D0, # 01, # FF
DEFB # F0, # 03, ""
DEFB # 01, # FA, "_"
DEFB # C0, # 07, # F8
DEFB # 0F, # C0, # FF
DEFB # 00, "B", # AA
DEFB # A5, "U", "Z"
DEFB # AA, # AA, "Z"
DEFB # A5, "Z", # AA
DEFB "U", "U", # AA
DEFB # AA, # A5, "U"
DEFB # AA, "Z", # AA
DEFB # A5, "U", # AA
DEFB # AA, # A5, "U"
DEFB # AA, # AA, "U"
DEFB # A5, # A5, # AA
DEFB # A5, # B7, "f"
DEFB "l", # D8, # F9
DEFB # B3, "l", # AD
DEFB "7", "7", "f"
DEFB # FC, # 9B, # 87
DEFB # F6, # C0, # D3
DEFB # B6 ,"`",# F7
DEFB # F7 ,">"," M "
DEFB # FB, # FE, "]"
DEFB # B7, # DE, "F"
DEFB # F6, # 96, # B4
DEFB "O", # AA, # A9
DEFB "U", # AA, # AA
DEFB # A5, "i", "Y"
DEFB # 9A, "j", # 95
DEFB "U", # 95, "U"
DEFB "j", # A5, "U"
DEFB # A9, "M", "f"
DEFB "j", # 92, # EC
DEFB # A5, "U", # D2
DEFB # 96, "U", # A2
DEFB # BA, # CD, # 00
DEFB "f", # 99, # CC
DEFB "g", "1", # 8E
DEFB "f", "9", # A6
DEFB "k", # 19, "f"
DEFB "Y", # C6, "q"
DEFB # 09, "g", # 19
DEFB # CB, # 01, "q"
DEFB # CC, "s", # 19
DEFB # 99, # CC, # C6
DEFB "g", # 19, # 9A
DEFB # C6, "Y"
LED35 DEFB # 00 ,"."," Z "
; The end of the source.
=== Cut ^ ===.
P.S. I did not stay on the sidelines and try to understand
with these sources, though not in the Is-Dos-e.
Yours -
Vladimir Wlodek Black.