Speecoder

From Ninerpedia
Revision as of 20:00, 30 August 2016 by Mizapf (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Speecoder is a machine language program that can be used to analyze LPC speech from various sources.

Top level screen showing the LPC code of "A"

Speecoder is usually loaded from option 5 on the Editor/Assembler module screen. A typical workflow should look like this:

  • In the Decode part, specify a speech code location either in the vocabulary in the Speech Synthesizer, in a disk file, or at a cartridge location.
  • Decode the binary speech code into readable LPC code.
  • In the Encode part, modify the readable LPC code.
  • Listen to the modified code.
  • Save it to disk in one of several formats.

Navigating in the program is done by pressing S and D to highlight a menu option. Pressing ENTER selects this option. Pressing BACK (FCTN 9) returns to the previous level. Pressing QUIT (FCTN =) returns to the Master Title Screen.

Note that on loading, pressing SPACE right at program start skips the copyright screen which otherwise keeps displayed for about 45 seconds.

(Author's note: I implemented an integrity check that crashes the program when changes are made. I'll have to rebuild the program to remove that screen again, but this will require me to dig out those ancient sources.)

Download

Click here to download Speecoder as a disk image.

Decode

Decoder

Examine

Save

Printer

Vocabulary

Select a word or a phrase from the vocabulary of the Speech Synthesizer. Multi-word entries need not be prefixed with a number sign (#). If the word is found, it is spoken. This does not change the current buffers.

GROM

Enter a location in module address space. Usually, speech is contained in GROMs in games like Alpiner or Moon Mine.

The problem is that you usually have an Editor/Assembler cartridge in your console when starting Speecoder, and not a game cartridge. There are four ways to solve this:

  • While Speecoder is running, unplug the Editor/Assembler, and insert the other cartridge. You must put a piece of tape over the RESET line of the cartridge, or the console will reset. Keep fingers crossed that the noise on the memory buses will keep Speecoder running.
  • If you have a Navarone Cartridge Expander (Widget), plug Editor/Assembler and the other cartridge in two slots, and while Speecoder is running, move the switch to the new location. My advice is to use the cartridge in position 1 or 3 so that you can rapidly move the switch. If you put it in slot 2 you may run over that position, and this may cause a lot of noise, possibly crashing the console.
  • If you have a LOAD interrupt switch, pressing that switch will re-enter Speecoder. That is, after unplugging Editor/Assembler you can simply insert the other cartridge, which should cause a RESET. Then press the switch, and you should be back in Speecoder.
  • If you have a HSGPL card you can load Editor/Assembler and the other cartridge into two banks. Inside SPEECODER, the GROM address may be specified by 5 digits; the first one of five being the bank number. So when you enter >2A000, this will access a GROM at address A000 via port 9808.

Disk

Encode

Disk

Save

MERGE format: Note that in MERGE format, you are limited to 255 bytes. When the speech is longer you will get an error message. You can, however, split the phrase manually into two parts and save the first one as a MERGE file, then save the second one as another MERGE file.

Additional notes

Ripping cartridge speech inside MAME/MESS

In the TI emulation in MAME/MESS you can proceed as follows when you want to decode speech from a cartridge:

  • Start the emulation with a multi-cart expander:
mame ti99_4a -gromport multi -peb:slot2 32kmem -peb:slot5 speech -peb:slot8 hfdc -flop1 speecoder.dsk -cart1 editass -cart2 moonmine
  • Run Speecoder via option 5 in Editor/Assembler. Don't forget to hold down SPACE until you see the top level screen.
  • Go to Decode, GROM and type in the address in the second slot with a prefixed "1". Example for Moon Mine: 1A000
  • If you can hear the speech (otherwise you get an error message), select Decoder to decode the binary LPC.
  • Step back with BACK until you are at the top level
  • Step down into Encode
  • Go to LPC/Test. You should again hear the speech. Press N when asked to repeat. This step will re-encode the text LPC into binary LPC in memory.
  • Enter Disk, then Save
  • You can save the speech phrase as text LPC (Source), as BASIC lines for Extended Basic to be loaded by the MERGE command, and as Assembly language BYTE lines.