Wow, this is some seriously impressive work!
We know from the datasheet that this is LPC-8, not LPC-10, so that simplifies some things.
I'm guessing the frame rules are as such: 5,7,6,6,4,4,4,4,4,3 corresponds to energy, repeat+pitch, k1, k2, k3, k4, k5, k6, k7, k8 Technically the real layout is: 5,1,6,6,6,4,4,4,4,4,3 where the '1' is the repeat bit, and pitch is 6 bits long. Hence: 00000 = "silence", but really: repeat last frame, unchanged. total frame length is 5 11111 = "stop", play silence for one frame and then terminate. total frame length is 5 else: continue pulling bits next bit is 'repeat'. 0 = frame is not a repeat frame, pull 6+6+6+4+4+4+4+4+3 additional bits. total frame length is 47 1 = frame is a repeat frame, pull 6 additional bits. total frame length is 12
so valid frames for each type would be something like: 00000 = silence (or repeat...) 00001 0 101010 101010 101010 1010 1010 1010 1010 1010 101 = voiced/unvoiced "long frame" 00001 1 101010 = repeat with pitch change "short frame" 11111 = stop (end frame)
Now, unlike tms51xx and tms52xx chips, i suspect that both voiced and unvoiced frames are "long frames", so an unvoiced frame looks like: 01000 0 000000 011011 101100 0010 0110 0111 0100 0111 010 note the pitch is all zeroes, this probably switches it from using voiced energy source to PRNG-fed noise, as on the ti chips. Also unlike the ti chips, the fact that all frames are long frames de-necessitates the messy (and buggy!) ZPAR logic to zero the remaining parameters, which is important on TI speech chips if you follow an unvoiced frame with a repeat frame which changes the pitch only!
LN
_________________ "When life gives you zombies... *CHA-CHIK!* ...you make zombie-ade!"
|