音频左右声道数据合并到一个声道

最近在学音频数据的处理,需要对不同的声道数据进行处理,这里分享一下如何将左右声道数据的合并到同一个声道里面。

其实左右声道数据的合并很简单的,就是把左右声道数据相加就可以了,不过要注意相加后的数据不要溢出,这个可以用一个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;

}

如果有什么错误或者要补充的地方,欢迎各位大神指点

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值