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
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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
 }