Speech

From Ninerpedia
Revision as of 17:10, 1 January 2015 by Stephen Shaw (talk | contribs) (→‎Third Party Speech Synthesiser Adaptors: add link to Triple Tech page)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Summary

The TI99/4 and /4a allowed the use of synthesized speech by means of a small add on which plugged into the right hand side of the console. This contained a pre specified vocabulary and the means for programs to create their own words. The original design included a flip up front to allow additional small modules to be fitted to expand the vocabulary but this was not followed through. The console and speech synthesiser alone could not speak, suitable software had to be added with an additional module.

Extended Basic allowed use of the built in vocabulary and a limited means of extending it.

Speech Synthesizer

The TI Speech Synthesizer was the only device that remained in side-car position and did not move into the Periperal Expansion Box (PEB). This allowed users who did not want to expand their system with a PEB to enjoy speech synthesis. Moreover, the synthesizer is comparatively small. The Speech Synthesizer always has to be the closest peripheral device to the console because it draws power through the computer's expansion port.

Synth attached.jpg

The synthesizer device provided a lid which could be opened. Earlier designs of the Speech Synthesizer included an extension port which allowed speech cartridges to be plugged into the device to extend the vocabulary, just like the cartridges for the console, but much smaller. The flip lid remained but there was no socket inside and no vocabulary modules produced.

Synth lid open.jpg

The option to extend the vocabulary by modules never materialized, as TI found an easier solution using the Speech Editor cartridge, the Terminal Emulator II cartridge, or the Text-to-Speech disk. All three of these methods allowed nearly unlimited vocabulary.

Synth board.jpg

Near the end of Texas Instruments' engagement in the Home computer market, the Speech Synthesizer was packed with cartridges making use of the synthesizer hardware, making it probably one of the most popular pieces of hardware. Many people rushed out to purchase as many modules they could while they still had the free speech synthesizer offer available.

Third Party Speech Synthesiser Adaptors

From third parties, speech synthesizer adaptor cards were offered which allowed users to move the synthesizer into the PEB, using, for example, a CorComp Triple-Tech card or a Rave Speech Adapter. This is also mandatory for Geneve or TI-99/4P users as they do not have any console to attach the Synthesizer to. The circuit board had to be removed from the chassis of the Synthesizer.

The Triple Tech, as the name implies, is a 3-in-1 card for the TI-99/4a. The card has a real time clock/calendar function that is accessible via BASIC or XB through file commands like Open, Print, etc. The card also has a 64k print buffer that helps in freeing up your computer faster. And finally it has a port, like the Rave99 Speech Adapter, that allows you to take the circuit board from your TI Speech Synthesiser and insert it onto the card and in the PEB.


Synth adapter.jpg

Extended BASIC Use of Speech

Also found in the Speech Editor module comes CALL SAY and CALL SPGET, which enable your Extended Basic program to use the speech synthesiser.Although TI provide a vocabulary list with the Extended Basic module, full instructions are not provided.

CALL SAY allows you to SAY a word from the vocabulary. Words NOT in the list will be spelt.

Saying the phrases

Some 'words' are really phrases, but if you use CALL SAY("READY TO START"), the computer will SPELL the words! This is because the space is treated as a word separator. For the computer to recognise that these three words are one unit in the vocabulary, you need to enclose them in hash marks: CALL SAY("#READY TO START#")

Length of pauses

The standard punctuation marks are also word separators and provide differing degrees of pause between words.

In order of length of pause, the separators are:  + (space) - , ; : . 

The + is zero pause and the full stop is a one second pause. The separators may be repeated to build up any pause,eg:

CALL SAY("I---KNOW") or CALL SAY("I-,,KNOW")

CALL SPGET

CALL SPGET is used to fill a string variable with the data used by the speech synthesiser. This can increase the speed of execution if you fill some string variables at the start of your program, and then use them when you wish to speak. It takes a little while to fill the variables, as each string is 255 characters long (many of them are nul or zero value).

eg CALL SPGET("WORKING",WK$) then

CALL SAY(,WK$) will say the word.

Note the comma in front of WK$. If two strings are used,in addition to the leading comma, they must be separated by TWO commas: CALL SAY(,A$,,B$)

In addition, you may use SEG$ to curtail the string you have returned. You can then separate the initial sounds of each word, and use these to create your own vocabulary. You are NOT limited to the preprogrammed list: you just have to work a little to expand it.

For example, having loaded WK$ as above, try:

WK$=SEG$(WK$,1,60)

CALL SAY(,WK$)

Notice any change? Try using different lengths in the SEG$ command. This is an area for experimentation.

Using CALL LOADs for SPEECH

Using either TI Basic with Mini Memory plugged in or using Extended Basic with Expansion Memory try:

S=-27648 :: CALL LOAD(S,70,"",S,65,"",S,72,"",S,70,"",S,64,"",S,80)

References: Editor Assembler Manual: pages 351. 355. 422 to 427 (Errata: The reference in para 1, page 355. should be to Section 22.1.4. not as printed in the manual)

Address -27648 is the SPEECH WRITE address. We keep on feeding it with bytes, and in due course the computer speaks!

The bytes to load to that address ara found out as follows:
First decide what you want to say from The standard vocabulary.
Than look in The table pp422-427 for the address of 
                                        that word or phrase.
"THAT IS INCORRECT" is given as 6816.
This is a hexadecimal number, not a decimal number!
The four numbers are reversed, and now become 6186.

Now we offset them by Hex 40 and feed than in. As we are dealing with decimal numbers with our Call Load, that means that we ADD decimal 64 to each digit in turns

        (64+6) (64+1) (64+8) (64+6)
           70      65    72     70
(If the numbers were hex A/F these have a decimal value as follows!
A-10    B-11    C=12    D=13    E=14   F=15   

Now we just indicate "end of word" by loading a zero, again offset, thus 64+0 = 64.

And finally, instruct The computer to speak by loading hex 50, decimal 80.

Thus we have loaded, in order, 70,65,72,70,64, and 80.

Note the way CALL LOAD has been used in a single command to load the same address with several different values.

Using Extended Basic and Text-to-Speech disk

The Text to Speech disk added to Extended Basic the means to say almost any work, first by loading a machine coade program and then passing the word or phrase to it with a CALL. The disadvantage to this approach was the need to have a disk drive and expanded memory. The form was (1 CALL INIT :: CALL TALKLOAD :: A$="PHRASE TO SAY" :: CALL TALK(A$) )

Using the Speech Editor Module

This allowed the use of the words built into the Speech Synthesiser by using CALL SAY("WORD"), a form that was also used in Extended Basic.

Using Terminal Emulator II module

This module allowed full Text to Speech by means of opening a file (OPEN #1:"SPEECH",OUTPUT) and then PRINTing to it eg (PRINT #1:A$). It was also possible to adjust the voice pitch by passing direct variables in the form (PRINT #1:"//50 40")