Jump to content
patrick99e99

Trying to generate some TI99 speech

Recommended Posts

I don't know if it will help, but I have a TMS5220 Voice data manual from way back. Got it from somebody that worked at TI.

 

EDIT: After poking around a little on the web, I see that this is a fairly common manual.

 

 

Darryl

Edited by dphirschler

Share this post


Link to post
Share on other sites

I'm investigating doing some speech myself! But I've run into a problem...

 

I used QBox to convert some WAV files, and when I strung the data (657 bytes for one) together into multiple strings and tried to play them with CALL SAY, I just get a BAD VALUE error.

 

Is this particular technique only going to work in Assembly language? If so that's a bummer... That being the case, if someone can provide the source code for a simple speech player using the QBox output I'd appreciate it. :)

Share this post


Link to post
Share on other sites

Okay, so I got the speech play code out of the Editor Assembler Manual, and was successful! I converted a sample of my own voice and played it in Classic99!

 

Unfortunately, it didn't work on the actual hardware, at all. I just get silence. Has this been everyone's experience with the QBox software?

Share this post


Link to post
Share on other sites

Okay, so I got the speech play code out of the Editor Assembler Manual, and was successful! I converted a sample of my own voice and played it in Classic99!

 

Unfortunately, it didn't work on the actual hardware, at all. I just get silence. Has this been everyone's experience with the QBox software?

 

Did you place the delay code and whatnot in scratchpad ram? I would imagine most emulators are not emulating the blocking of the 8 bit bus while the status of the speech synth is being read.

Share this post


Link to post
Share on other sites

Ahh... I just tried it again. Unlike earlier I didn't have any outside noise distracting me. It DID play. Just very quietly... so much so I should figure out if I can boost volume. It's about half the strength of the normal ROM speech in attenuation.

 

That may be because I recorded it via a camera microphone on my laptop. Not exactly the highest quality equipment. :) But, it sounded loud enough in Classic99...

Edited by adamantyr

Share this post


Link to post
Share on other sites

Have a look here for some cool speech in assembly language. May not work in classic 99 because it relies on the speech synth halting the 9900. Can't remember if that's implemented in classic 99 or not. Works in Mess.

 

http://www.planet-99.net/wotw.htm

 

It's not, it probably will not work in Classic99. :)

Share this post


Link to post
Share on other sites

Thanks guys, I got it working with the sample code from the E/A manual. :)

 

I need to re-record and do better noise clean up through QBox. My first attempt sounded pretty good in Classic99 (my girlfriend was creeped out by the voice) but on the hardware it was extremery quiet.

 

Part of that was me using a laptop camera microphone and lousy recording software that wouldn't do mono, forcing me to use an online conversion tool.

 

I'm still pleased though. The LPC is such an infuriating black box of technology, it's great to utilize it!

Share this post


Link to post
Share on other sites

Ehm, guys, someone broke that program. I noticed that it does not terminate when run in MAME/MESS. In the source code shown at http://www.planet-99.net/wotw.htm, BLWP @VSBW is used. In the code on the DSK image, this was replaced by BL @someprg, without saving R11 before calling RT at the end.

 

Also, the voice does not sound really well under MAME/MESS; are these LPC data really created for the TMS5200? Or for the TMS5220? There are significant differences between both. This somewhat sounds to me like 5220 data played back on a 5200.

Edited by mizapf

Share this post


Link to post
Share on other sites

MAME contains emulations for the complete 52xx family. The TI emulation explicitly uses the 5200. We even introduced a new variant CD2501ECD for the TI-99/8 which is used only there. The designs for the 5200 were retrieved from the patent texts and uncapped circuits (but not by me).

 

So if Qbox only supports the 5220, you'll never get good speech in the MAME/MESS TI emulation.

Share this post


Link to post
Share on other sites

The sample I tried worked, the only thing it lacked was attenuation. It was so quiet it almost sounds like it's coming from under the monitor.

 

That's one reason I may not end up using speech; if that can't be corrected it's hardly worth the effort.

Edited by adamantyr

Share this post


Link to post
Share on other sites

Yeah, long ago we only had 5220 emulation (even in MESS), and that's the core that is still in Classic99. But MESS has managed to get many more since then, including the correct TI Speech Synth cores. :)

 

There was an attempt some time ago to get the correct coefficients into QBOX, but I don't know if it ever actually happened.

Share this post


Link to post
Share on other sites

Does anyone know approximately how often (in milliseconds) you have to send data to the speech synth? In other words, how long time does it take to consume the 16 byte buffer?

Share this post


Link to post
Share on other sites

It actually varies, the cost of a frame is anywhere from 4 bits to 50 bits. Each frame plays for 25ms, so in theory, anywhere from 64ms to 800ms. That's why you need to check the buffer status bits. :)

Share this post


Link to post
Share on other sites

It actually varies, the cost of a frame is anywhere from 4 bits to 50 bits. Each frame plays for 25ms, so in theory, anywhere from 64ms to 800ms. That's why you need to check the buffer status bits. :)

 

Thanks, so those numbers suggest that it should be enough to update the speech at 60Hz (in the ISR, for instance), but when I tried that the synth was running out of data?

Share this post


Link to post
Share on other sites

Thanks, so those numbers suggest that it should be enough to update the speech at 60Hz (in the ISR, for instance), but when I tried that the synth was running out of data?

 

I don't know whether this would help, but STRSPK (ported from @Willsy's TurboForth code) in the attached ALC for fbForth 2.0:8 is invoked by the fbForth 2.0:8 ISR to service streamed speech at each interrupt. If the SS is busy, it exits; if not, it sends up to 16 bytes to the SS.

 

fbForth205_Speech&Sound.a99

 

...lee

Share this post


Link to post
Share on other sites

I noticed that the QBOX output produced some undefined output at the end when run in MESS, hence I asked whether this was created for a 5220. The difference between the 5220 and the 5200 (the latter one being used in the Speech Synthesizer) is that the 5220 has a rate control setting. I'm not sure (since I don't have a real 5220 to test), but this could mean that both chips consume the frames at different rates.

Share this post


Link to post
Share on other sites

 

I don't know whether this would help, but STRSPK (ported from @Willsy's TurboForth code) in the attached ALC for fbForth 2.0:8 is invoked by the fbForth 2.0:8 ISR to service streamed speech at each interrupt. If the SS is busy, it exits; if not, it sends up to 16 bytes to the SS.

 

attachicon.giffbForth205_Speech&Sound.a99

 

...lee

 

Thanks, this supports Tursi's numbers, so my attempt was probably failing for another reason than running out of data.

Share this post


Link to post
Share on other sites

Yeah, that's how Parsec and Alpiner work, too. Once upon a time I extracted the Parsec speech code and documented it, but it's lost. It wasn't any different than you've seen. :)

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...