当前位置: 代码迷 >> 嵌入开发 >> linux上音频编解码该怎么调用函数
  详细解决方案

linux上音频编解码该怎么调用函数

热度:2464   发布时间:2013-02-26 00:00:00.0
linux下音频编解码该如何调用函数
我想在linux下写一个音频的编解码程序,采集的数据保存在char* 变量中,压缩时就不知道怎么调用函数编码方式采用a-law方式在网上下了一个G.711的音频编解码源码,但是编码函数的参数是一个16位的整型,而我要编码的音频数据是字符串。不知道如何能够调用源码中的编码函数进行音频数据的压缩,源码中的编码函数如下所示:
/*
 * linear2alaw() - Convert a 16-bit linear PCM value to 8-bit A-law
 *
 * linear2alaw() accepts an 16-bit integer and encodes it as A-law data.
 *
 * Linear Input Code Compressed Code
 * ------------------------ ---------------
 * 0000000wxyza 000wxyz
 * 0000001wxyza 001wxyz
 * 000001wxyzab 010wxyz
 * 00001wxyzabc 011wxyz
 * 0001wxyzabcd 100wxyz
 * 001wxyzabcde 101wxyz
 * 01wxyzabcdef 110wxyz
 * 1wxyzabcdefg 111wxyz
 *
 * For further information see John C. Bellamy's Digital Telephony, 1982,
 * John Wiley & Sons, pps 98-111 and 472-476.
 */
unsigned char
linear2alaw(
int pcm_val) /* 2's complement (16-bit range) */
{
int mask;
int seg;
unsigned char aval;

if (pcm_val >= 0) {
mask = 0xD5; /* sign (7th) bit = 1 */
} else {
mask = 0x55; /* sign bit = 0 */
pcm_val = -pcm_val - 8;
}

/* Convert the scaled magnitude to segment number. */
seg = search(pcm_val, seg_end, 8);

/* Combine the sign, segment, and quantization bits. */

if (seg >= 8) /* out of range, return maximum value. */
return (0x7F ^ mask);
else {
aval = seg << SEG_SHIFT;
if (seg < 2)
aval |= (pcm_val >> 4) & QUANT_MASK;
else
aval |= (pcm_val >> (seg + 3)) & QUANT_MASK;
return (aval ^ mask);
}
}
那位大侠知道如何处理的帮我解决下,谢谢啦!
------解决方案--------------------------------------------------------
该回复于2011-03-30 13:10:47被版主删除
------解决方案--------------------------------------------------------
现在问题解决了没?
------解决方案--------------------------------------------------------
现在问题解决了没?