pcm - u-law encode/decode

Dependents:   PhonePlatform

Files at this revision

API Documentation at this revision

Comitter:
okini3939
Date:
Fri Nov 12 14:43:08 2010 +0000
Parent:
0:89894f20f372
Child:
2:2587e6e46668
Commit message:

Changed in this revision

ulaw.cpp Show annotated file Show diff for this revision Revisions of this file
--- 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;