Jump to content
pixelpedant

TI 99/4A Speech Synth Browser/Editor Thingy

Recommended Posts

Hey folks. I've been toying around with TI 99/4A speech synth lately, and decided it would be fun to write a TI LPC speech pattern exploration and editing app in the spirit of the venerable Speecoder, but for use on modern PC, and with some more comprehensive and user friendly spreadsheet-style editing options. At this point, I figure it's worth sharing, in case anyone else wants to poke around a few speech patterns, or mess around with modifying/editing/combining them, using this tool. It's a quick way to, e.g., get your TI 99/4A talking like Max Headroom, if you feel like it. Or to subsample a pattern to make new words. Or to combine portions of two patterns. You can see what the app looks like here:

 

FVl3tbN.png

 

The app is a Windows executable and comes packaged with the standard speech synth vocabulary listed in the Extended BASIC manual (consisting of 370 words, it appears to me). Use on Linux will be achievable via included source on your Python installation of choice, provided necessary module dependencies.

 

Included patterns were fetched via XB CALL SPGET on real iron, and transferred via Ti99Hdx. As a consequence, they're in individual V9T9 format files, and the program will save in this format as well. Sound patterns are saved in 255 byte fixed length records. This does impose a (255 byte) limitation on output. However, no built-in vocabulary (not even "THAT IS INCORRECT") exceeds this limit, as the pattern duration itself must be recorded as a one byte value. So this is in keeping with normal (and unavoidable) parameters.

 

The program does not in all respects enforce the entry of, or modifications resulting in, valid pattern data. Warnings are provided for values which are out of bounds for a field (e.g., "16" would be an invalid value for a frame's "Energy" nibble), but the user is not, for example, prevented from failing to terminate a pattern with the value '15' (i.e., 1111) as will be found in all provided patterns.
Note that simple Copy/Paste functionality is implemented using the clipboard, so patterns can be copied and pasted between two separate instances of the program, when combining patterns (or within a single instance, of course). This is particularly important when creating new sounds from phonetic components.
BE ADVISED: Results when feeding these patterns to emulators are likely to be inconsistent. But you should have good luck (as I have) on real iron.
UPDATES:
06/24/2018 - Many bugfixes, cleaned up source somewhat, added source to package,
07/02/2018 - More bugfixes, overhaul of decoding process and cleanup of source.
07/05/2018 - Ported to QT5. Packaging moved to cx_Freeze. High-DPI scaling implemented.
TO DO:
- GUI pitch adjustment control for selected ranges?
- GUI energy adjustment control for selected ranges?
The app may be found here:
Current Version: v1.3:
Previous Version: v1.2:
Previous Version: v1.1:

Edited by pixelpedant
  • Like 8

Share this post


Link to post
Share on other sites

Yeah, I would have included the code, but it's still a complete bloody mess as a result of the project just kind of having begun as "hey, I bet it'd be fun to decode a speech pattern" and grown willy-nilly from there in all sorts of random directions until it ended up as this. Now that all the basic problems are solved, I'll likely clean it up - maybe do a full rewrite - and release the code once there's something sufficiently readable that it might be of use to someone.

Share this post


Link to post
Share on other sites

Can your software find where (what addresses) exactly in a module the individual words or phrases are located. Do you know a simple method to accomplish this?

 

Nah, but you could certainly do a probabilistic analysis which returns likely candidates I figure, based on the fairly consistent structure of the speech samples. Always must begin with "01100000 00000000 ????????? ???0????" for example (where the first unknown byte is pattern length, and in the next byte, energy is unknown, but the repeat bit must be zero).

  • Like 1

Share this post


Link to post
Share on other sites

Only other improvement i would like to see is a open-source linux version.

Thanks for this pixelpedant!

Or at least a Java version, so it runs across platforms (as I did for TIImageTool).

  • Like 1

Share this post


Link to post
Share on other sites

UPDATES:

 

The package linked in the initial post has now been updated to include source. Source has been cleaned up somewhat. A lot of bugfixes have been implemented.

 

If anyone would like to see an example of what custom speech made by phonetic recombination and pitch/energy editing using this tool looks like, you can see an example in this video here.

 

If you'd prefer not to watch the whole video, a demo of the TI speaking an invented phrase with custom intonation created using the tool ("Hehehehe...wipeout!") can be seen precisely here.

Edited by pixelpedant
  • Like 4

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...