Variation of the Viturbi Crystal clear sample playing

Probably the most technical forum around. It does not have to be coding related, or assembly code only. Just talk about how you can use the AY chip to do cool sounding things :)
User avatar
Twilighte
Game master
Posts: 819
Joined: Sat Jan 07, 2006 12:07 am
Location: Luton, UK
Contact:

Variation of the Viturbi Crystal clear sample playing

Post by Twilighte »

I was experimenting with 8 bit samples on the Oric yesterday when I noticed an article in wikipedia.

http://en.wikipedia.org/wiki/General_In ... _AY-3-8910

That talked about some MSX guys who wrote a very special player using Viturbi search engine in order to achieve an extremely smooth transition between sample entries and therefore produce crystal clear samples.

http://en.wikipedia.org/wiki/Viterbi_algorithm

This Viturbi search is way beyond my capabilities and i suspect the capabilities of the Oric.

However i then thought up a variation of the Viturbi technique..
I (atleast) find this stuff very difficult to explain, but here goes..

If you start with 3 channels of volume(3x4=12Bit) all set to Zero.
Then you take the first 8 bit signed sample entry which might be +63.
If we assign this to a single 4 bit volume register approximating that it might be 10.
Now the three volume registers have 10,0,0 in them.
We wait for the next sample entry time and examine this value which might be +21.
Now instead of approximating the 4 bit value and storing the result in Channel A which currently has the 10 in it, we potentially have the flexibility of being able to choose any of the other channels.
This means we are likely to find a much more accurate representation of +21 by writing one value to either channel A or B. C is zero so theoretically whether we write to B or C is immaterial.

Now all this is relatively elementary because there is no way (as far as i want to delve into) that the Oric could cope with making these individual register adjustments in realtime.

So i then thought if we got a PC to do all the hard work above, the output could be stored in a file. Each byte entry would contain a combination of Volume(4 Bit) and Volume Register selection (2 Bit).

When we played the sample, we simple extract the register and value from the single entry and send in one Sample time. 8)

The major advantage on the oric is that we are using all 3 channels to achieve a smoother sample but only using one register at every sample write time. :)

The actual generation of the sample (The PC bit) is the interesting bit. It requires very large lookup tables to locate the most appropriate 4 bit value and register based on the current 3 register values.
Not worked this out yet, and would be great if someone else could help too. :P

I guess the ultimate application of this (based on the limited memory of the Oric) would be to stream the data from Disc.