pcm - u-law encode/decode
Diff: ulaw.cpp
- Revision:
- 1:546b99dee7bb
- Parent:
- 0:89894f20f372
- Child:
- 2:2587e6e46668
diff -r 89894f20f372 -r 546b99dee7bb ulaw.cpp --- a/ulaw.cpp Thu Nov 11 16:13:47 2010 +0000 +++ b/ulaw.cpp Fri Nov 12 14:43:08 2010 +0000 @@ -8,8 +8,7 @@ // unsigned 16(14)bit to signed 8bit char pcm2ulaw (int dat) { - int num, seg; - char ret; + int num, ret, seg; dat = dat - 32768; if (dat >= 0) { @@ -33,10 +32,15 @@ // signed 8bit to unsigned 16(14)bit int ulaw2pcm (char dat) { - int ret, seg; + int num, ret, seg; - seg = (dat >> 4) & 0x07; - ret = (0x21 | ((dat & 0x0f) << 1)) << seg; + if (! dat & 0x80) { + num = dat; + } else { + num = - dat; + } + seg = (num >> 4) & 0x07; + ret = (0x21 | ((num & 0x0f) << 1)) << seg; ret = (ret - 0x21) << 2; if (dat & 0x80) ret = - ret;