最近在学音频数据的处理,需要对不同的声道数据进行处理,这里分享一下如何将左右声道数据的合并到同一个声道里面。
其实左右声道数据的合并很简单的,就是把左右声道数据相加就可以了,不过要注意相加后的数据不要溢出,这个可以用一个32位的变量存储,然后限制他的最大值,或者所有数据都在除与2.
下面是我左右声道数据合并的代码,data里面的数据是16位的pcm数据、左右声道交替存放的,例如:LRLRLR
/***********
* 左右声道合并
* data:出入的待处理的数据
* len:传入数据的长度
* right_left:0,合并到左声道
* 1,合并到右声道
*********/
int my_audio_digital_Channel_merging_add(void *data, u32 len, u8 right_left)
{
if(data == NULL){
return -1;
}
s32 valuetemp;
s16 *buf;
buf = data;
len >>= 1; //byte to point
for (u32 i = 0; i < len; i += 2) {
valuetemp = (buf[i] + buf[i + 1]);
//防止16位数据溢出
if (valuetemp < -32768) {
valuetemp = -32768;
} else if (valuetemp > 32767) {
valuetemp = 32767;
}
//或者也可以全部数据除2
//valuetemp = valuetemp / 2;
buf[i + right_left] = (s16)valuetemp;
buf[i + 1 - right_left] = (s16)0;
}
return 0;
}
如果有什么错误或者要补充的地方,欢迎各位大神指点