Jump to content
IGNORED

Emulating the AtariVox


Urchlay

Recommended Posts

4th option:

 

Speak the word after every pause command or end of phrase. The pause character is sent quite often in normal speech and might be a good enough break in the flow of speech so nobody would notice, and the delay would be shorter.

 

Yah, that should work. It's like my option #2, only better.

 

Last night, I got things working with #2 (speak only when there hasn't been any data for a full frame)... it's still not ready for prime-time, of course.

 

Actually, 2 days ago, I was doing the "speak when there's a pause" thing, and ripped it out because it couldn't detect end-of-phrase (since there's no pause at the end of most phrases). Can just uncomment that bit of code again and it ought to work like your option #4.

Link to comment
Share on other sites

5th option: Have one or more "fake" I/O addresses that are supported within the emulator for purposes of speech output.

 

Hm, that'd require modifying the ROMs though, unless I'm missing something...

 

I thought of trying to do a clever hack, like having the 6502 emulator remember the load address of the last "LDA (indirect),y", then when data gets written to the joystick port, just grab all the bytes from the ROM, starting from that address and ending with the first $FF.

 

It'd work, but only for ROMs written with the standard speech macros that come with the AtarVox (or for ROMs that use some other code that uses (indir),y addressing)... though realistically, that might be enough.

 

Hm, but if the ROM wants to change its mind in mid-phrase.... imagine something like a phrase that says "Game Over. Your rank is..." (followed by "Private", "Sergeant", etc). It'd be possible for the game author to write code that changes the data pointer in mid-phrase (though if he's using the standard macros, it'd be much easier to just consider them different phrases).

 

Hmmm....

Link to comment
Share on other sites

Do you still have the codes you sent to the chip to make it say all that? Would be very educational for me to see them...

I didn't do them, they're samples from PhraseALator (just click on the view codes button).

 

BTW I've shipped your Avox, but was thinking you might also need a PC interface to play around with speech etc. I have built a USB one which works directly with PhraseAlator. I did have to modify the software to work correctly at 19200 baud (it was missing the odd phoneme) + while I was in there I also took out some of the unneeded stuff. It's here if you want it (ignore the memory utility, it doesn't work with the USB interface).

 

I'll ship it out to you this week.

Link to comment
Share on other sites

I got a good bit of work done on this over the weekend... The emulation now supports

setting the speed and pitch, though I don't yet know whether the speeds and pitches I use

are anywhere near what the real thing uses (will know when it arrives).

 

Just wanted to let everyone know what's up, since I haven't been very talkative lately...

Link to comment
Share on other sites

  • 2 weeks later...

Finally received the AtariVox yesterday, got it hooked up and talking last night. My emulation (incomplete though it is) actually doesn't sound that far off, or at least it's not as wrong as I expected.

 

A question about pitch bend, now that I can hear its effect: It sounds to me like the pitch bend is just a bandpass filter, whose center frequency is controlled by the bend parameter... have I got that right?

 

Another possibly stupid question: If I were going to make samples of the SpeakJet's non-phoneme sounds (the siren, pistol shot, etc), is there a better way to do it than to just hook up the AtariVox audio output to my sound card's line in? Should I be worried about impedance matching, or capacitative coupling, or anything beyond using well-shielded audio cables? (The software side I've got covered, I've just never used it with anything but a $5 crappy microphone before)

Link to comment
Share on other sites

A question about pitch bend, now that I can hear its effect: It sounds to me like the pitch bend is just a bandpass filter, whose center frequency is controlled by the bend parameter... have I got that right?

 

Yes, I think that must be it - it definitely sounds like a filter of some sort.

 

BTW are you planning on emulating this ?

 

 

Another possibly stupid question: If I were going to make samples of the SpeakJet's non-phoneme sounds (the siren, pistol shot, etc), is there a better way to do it than to just hook up the AtariVox audio output to my sound card's line in? Should I be worried about impedance matching, or capacitative coupling, or anything beyond using well-shielded audio cables? (The software side I've got covered, I've just never used it with anything but a $5 crappy microphone before)

 

Should be OK. My card is not sophisticated and I ended up using a USB sound recorder (Griffin iMic) to avoid interference being generated by the PC.

Link to comment
Share on other sites

Yes, I think that must be it - it definitely sounds like a filter of some sort.

 

BTW are you planning on emulating this ?

 

Yep. It'll only be as accurate as my ears, though (so nowhere near perfect...)

 

Should be OK. My card is not sophisticated and I ended up using a USB sound recorder (Griffin iMic) to avoid interference being generated by the PC.

 

My card probably doesn't count as "sophisticated" any more (it's a 5+ year old SB Live), but it should do the trick.

Link to comment
Share on other sites

  • 2 weeks later...

Update...

 

Now that I've got a real SpeakJet (thanks, Richard!), I'm finding out there's no way to make the flite library sound anything like the real thing (also, using flite increases the Stella executable size by 6 megs)... so I'm looking into using samples again.

 

I sampled all the phonemes at the default pitch and speed... I can stitch the samples together to make words that sound almost perfect (my sample for "t" is a bit off). Apparently the SJ's "Mathematical Sound Architecture" isn't what I thought it was. What I'm working on now is some code to change the pitch and/or speed of the samples on the fly (I now know what an FFT is for, anyway).

 

Also, to make life easier, I wrote a little DASM header file that gives symbolic names to the SJ phonemes, so you can write something like this:

 

myspeech:
byte RESET
byte SPEED, 110
byte PITCH, 60
byte HE, EHLL, LO, OWWW
byte EOP

 

(edit: with new and improved formatting...)

 

Here it is, if anyone might find it useful.

 

jetphones.zip

Edited by Urchlay
Link to comment
Share on other sites

  • 2 years later...
Did atarivox emulation ever make it into Stella? How do you set it up?

Here's the current status of AtariVox in Stella:

 

1) Stella supports 'talking' to a real AVox device through a serial port. It can send sound commands to the device, which will actually generate real sound. To activate this, you simply point Stella to the serial port to which the AVox is connected.

 

2) The EEPROM on the AVox is not used; access is emulated through a 32K file that Stella generates (and reads/writes) as required.

 

That's about it. Emulation for the sound portion itself (the SpeakJet) will probably never be done at this point, as there were several fundamental issues that were never resolved, and the person working on that part of the code is no longer available to do it. I've recently deactivated and removed that part of the code from the codebase, as it wasn't touched in almost 3 years. But if someone comes along and is interested in taking it on (and can solve the problems we had), then I have no problem with adding it back in again.

Link to comment
Share on other sites

The EEPROM on the AVox is not used; access is emulated through a 32K file that Stella generates (and reads/writes) as required.

FYI it's emulated because the EEPROM's life would be shortened with the multiple writes during dev work.

Unless you make serious programming mistakes, I doubt one would ever get even close to the limit, no?

Link to comment
Share on other sites

The EEPROM on the AVox is not used; access is emulated through a 32K file that Stella generates (and reads/writes) as required.

FYI it's emulated because the EEPROM's life would be shortened with the multiple writes during dev work.

Unless you make serious programming mistakes, I doubt one would ever get even close to the limit, no?

While this is true, the actual reason for not implementing real EEPROM support is that it requires third-party drivers/libraries that aren't under the GPL, and hence can't be linked to Stella. So support for this will probably never be added. As you say, it would only wear out the device anyway, for no good reason.

Link to comment
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.
Note: Your post will require moderator approval before it will be visible.

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