Creative ADPCM

From MultimediaWiki
Revision as of 09:12, 5 April 2019 by Lord Nightmare (talk | contribs) (This is definitely not a variation on IMA ADPCM, which is an Oki/Dialogic derivative, but is Jayant-based, like Yamaha ADPCM)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

This is a variation of Yamaha ADPCM, which is also used in Creative Voice.

Decoding Process

 get new nibble from stream
 sign = nibble & 8
 delta = nibble & 7
 diff = ((2 * delta + 1) * step) / 8
 if sign > 0
   newval = (oldval * 254 / 256) - diff
 else
   newval = (oldval * 254 / 256) + diff
 step = (ct_table[delta] * step) >> 8
 step = clip(step, 511, 32767)
 newval = clip(newval, -32769, 32767)
 output newval as 16-bit sample

And here is the table used in step modification:

 const int ct_table[8] = {
   0x00E6, 0x00E6, 0x00E6, 0x00E6,
   0x0133, 0x0199, 0x0200, 0x0266
 }