Re: looking for some info on Magic Voice

From: Grósz Attila <>
Date: Sun, 30 May 2010 21:29:43 +0200
Message-ID: <>
OK I am back from holiday.

Groepaz wrote:
> mmmh so you are saying that its indeed simply about taking the bytes written 
> to the 8706 data register, eventually swapping nibble- and bit-order, and then 
> reading variable number of bits from the resulting bit stream? uhmz. i spent 
> some hours the other day doing exactly that on paper, and couldnt really see 
> how that should work. i can see the first "0x0a" of the data, and then the 
> next value is wrong already, no matter how i swap and shuffle bits around. 
> *shrug* :)
You do not want to swap nibbles or so. Since the T6721 operates with 
variable parameter bit lengths and just one data in pin,
you can never judge parameter data by looking at the byte dumps. You 
need to dump bits and figure out the patterns from them.

Least significant bit is sent first by the MOS8706. The bit lengths are 
the ones on
Stefan's site here (though I never checked whether he uploaded them 

Anyway I used the following crappy matrix (zero means unused):

const unsigned int bitLength[4][12] = {
    { 8, 8,  8,  8, 8, 8, 8, 8, 8, 8, 8, 8 }, // idle
    { 7, 7,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0 }, // busy
    { 7, 7, 10, 10, 10, 8, 8, 8, 7, 7, 7, 7 }, // voiced/silent
    { 7, 7, 10, 10, 10, 8, 0, 0, 0, 0, 0, 0 } // unvoiced

I think this info should suffice... if not, just ask!

> yeah, we have the actual parcor synthesis running (more or less, needs 
> refinement).
great! where can one have a peek?
>> I can forward a brief summary I mailed to one of the MESS developers a few
>>  months ago, once I am back from holiday.
> that would be great
Here is what I wrote to Jonathan:

Naturally, I used the T6721 datasheet:

As I recall I used this patent for implementing the lattice filter: US 
patent no. 4209844.
Basically identical to the T6721.

I also made a (badly) commented disassembly of the C364 Speech ROM:

I reverse engineered and documented the various bit sequences on Stefan 
Uhlmann's Magic Voice website:

You don't need a look up table or vector quantization since the PARCOR 
coefficient values are (luckily) all linear, just normalize them into bw 
0 and 1. I stretch everything to 10 bits as the doc says it operates on, 
and then before doing the filter convolution I normalize into between 
0.0 and 1.0 by dividing with 32768. Then you need a sufficiently large 
chirp table which is easy to create (will not be the same as the 
original but who cares). My core could not cope with different speeds as 
that appeared to be a chore (to implement).


       Message was sent through the cbm-hackers mailing list
Received on 2010-05-30 20:00:07

Archive generated by hypermail 2.2.0.