pcm - u-law encode/decode
ulaw.cpp
- Committer:
- okini3939
- Date:
- 2011-01-05
- Revision:
- 2:2587e6e46668
- Parent:
- 1:546b99dee7bb
- Child:
- 3:64e448653443
File content as of revision 2:2587e6e46668:
/* * mbed library for ulaw * Copyright (c) 2010 Hiroshi Suga * Released under the MIT License: http://mbed.org/license/mit */ #include "ulaw.h" // unsigned 16(14)bit to signed 8bit char pcm2ulaw (int dat) { int num, ret, seg; dat = dat - 32768; if (dat >= 0) { num = dat; } else { num = - dat; } num = (num >> 2) + 0x21; if (num >= 0x2000) num = 0x1fff; for (seg = 7; seg >= 0; seg --) { if (num & 0x1000) break; num = num << 1; } ret = ((num >> 8) & 0x0f) | (seg << 4); if (dat < 0) ret = - ret; return ret; } // signed 8bit to unsigned 16(14)bit int ulaw2pcm (char dat) { int num, ret, 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; ret = ret + 32768; return ret; }