Jump to content
  • entries
  • comments
  • views

more voice tests



An empty buffer is filled with an 8 for the waveform data as using 0 causes a noticeable click between words. The Display Data after the sample buffer is filled with 0, so if the program went past the end of the buffer the waveform on the screen wouldn't show anything. On the chance that just the ARM code stopped working and the 6507 was using data from after the sample buffer, I added a bit to the 6507 code to toggle the background color based on the right difficulty switch. However, the problem on the Harmony went away after this change, so I don't know what caused it.


With the colored background I noticed the screen would jitter when the words were being changed. To fix that, I modified FillAudioBuffer() in the ARM code to EITHER blank out the buffer (prep for new sample) OR to copy the next word, but not both during the same call.


FillAudioBuffer() can be called twice per frame - once at the very end of Vertical Blank (which was causing the jitter) and again at the start of OverScan. I do this to increase the chance of detecting the "end-of-sample" signal , though for performance reasons I may change this to just once per frame - key to making that work is the longest word sample must be short enough that there's enough $F8's at the end of the sample buffer for the 6507 to detect "need to refill the buffer".



Agnes2000 = 7441 bytes

Agnes3000 = 11162 bytes

Agnes4000 = 14882 bytes


Alex2000 = 7575 bytes

Alex3000 = 11365 bytes

Alex4000 = 15153 bytes


Victoria2000 = 7537 bytes

Victoria3000 = 11304 bytes

Victoria4000 = 15072 byts


Berzerk2000 = 8743 bytes

Berzerk3000 = 13117 bytes


Trinoids2000 = 8745 bytes

Trinoids3000 = 13121 bytes


Zarvox2000 = 8745 bytes

Zarvox3000 = 13121 bytes


Edit: added simple phrase Alex4000

Alex4000_simple = 7973 bytes


Edit2: added revised simple phrase Alex4000 and robotic Alex

Alex4000_robotic = 7574 bytes


Edit3: added additional robotic alex tests

Alex4000_robot_3_4 = 5982 bytes (throws out every 4th sample)

Alex4000_robot_7_8 = 6980 bytes (throws out every 8th sample)


Edit4: added simple3 - expanded the range for the pitch variations (hold down fire-button to enable)


Edit5: simple4 - single sample for "get the" instead of 2 samples. Saves 494 bytes over the original simple.

Alex4000_simple4 = 7479 bytes




VoiceTests 3.zip










DigitalAudio 4.zip


Recommended Comments

Alex 4000 is very clear! Better than Victoria.


Zarvox still most cool but still not clear even in 3000 sadly :(


You know robot voice are created setting blank pieces between the wave, perhaps you can create a code to set "blank pieces" in a wave, optimizing the amount of data required for the voice, but this will sound like original berzerk voice.

Link to comment

Yeah, I think Alex 4000 is as good as it can get for an actual game. Of course, that's using up over half of DPC+'s ROM space (there's 24K for the ARM/6507 code banks + another 4K that's "hidden" behind the Display Data RAM - the other 4K in the 32K ROM is the DPC+ driver code). Until the rest of the game is in place I don't know how much space there will be for this - I only started experimenting with samples so early so that batari would have something to do his DPC+DA revision against.


Not sure I understand - something like every-other-sample in the buffer would be silence (a 7 or 8 since we're using unsigned waveforms with a range of 0-15 [4 bit])? If so we'd top out with the 1024 byte max samples from Alex2000 as when it's "expanded" with the silence it would max out the 2048 byte playback buffer.


One thing I'd like to try before finalizing the voice is to digitize the output from the AtariVox, but that's a ways off.

Link to comment

Agreed - Alex 4000 sounds the clearest.


The simple phrases work very well. :thumbsup: How about "Chicken Humanoid" instead of just "Chicken"?

Link to comment

"Chicken Humanoid" in alex4000_simple2 - doesn't sound quite right to me.


Also added alex4000_robotic based on LS_Dracon's idea. Nice space savings, but sounds worse than alex2000. The idea might be worth pursuing though - instead of dropping every other sample, perhaps every 4th.

Link to comment

Added additional alex robotic tests. They sound better than the original robotic test, but that's not saying much.

Link to comment

Instead of "Chicken"?


I plan to do an OS X AtariVox utility when I work on adding AtariVox support to Frantic. That'll be later when I have a functional game going - as mentioned above, I only started work on the samples because batari's started looking into DPC+DA.

Link to comment
instead of dropping every other sample, perhaps every 4th.

Yes, 25% of space saved then... I think Alex robotic 4000 is very close.


Another option is instead gaps, play again the last piece of sound but in lower volume, to create an echo.

Perhaps sounds better.

Link to comment

There's some distortion/background noise in the Alex robotic voices that I'm not keen on.


There's no volume control when playing back digital samples. Digital samples on the 2600 are done by outputting the waveform via the volume. In order to lower the volume, I'd have to manipulate the waveform on the fly, a rather CPU intensive proposition.

Link to comment

I notice the distorsion too...

It happens because the difference between last volume and the gap. Maybe setting the gap wit some volume on it, never gets 0 (mute)...


BTW try others voices such vitoria and bruce like you did with Alex4000_robot_7_8, I think it's almost there :)


Edit : Alex2000 uses 7575 bytes and Alex4000_robot_7_8, 6980 bytes...


Can you add these 595 saved bytes (or even more compared with others) to make the voice sounds slower?


Perhaps the problems is the speech velocity.

Link to comment

the gaps are set to 7.


I'll do some additional tests with other voices tomorrow, but then I plan to go back to work on the kernel.


Nope, can't add the "saved" bytes into the sample as when it's expanded it would exceed the 2048 byte playback buffer.

Link to comment
An empty buffer is filled with an 8 for the waveform data as using 0 causes a noticeable click between words.


Only now I read carefully the post, sorry.


Good luck with the kernel, do the game mechanics to work is the most fun part to code, at least for me!

Link to comment

I don't know if this was mentioned earlier, but since these samples only use the lower nybble, you could double-up the samples in ROM space and have two copy routines, one that does a right shift by 4.

Link to comment

I was originally using 8, but changed it to 7 as it sounded slightly better.


Man - I'd thought about packing 2 samples into 1 byte when I was brainstorming, but forgot about doing it when I made these tests. Thanks for the reminder - I'll do 1 additional voice test to get those in place before I risk forgetting about it again :D

Link to comment
Add a comment...

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

  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Create New...