Android 录音增益调节

需求:
项目搭载了带麦的USB摄像头,用于视频通话功能,人对着摄像头说话的距离评估在5米,而不像手机可以拿在手上近距离的对着MIC说话,所以,在测试中觉得摄像头采集的声音很小,需要增大录音音量。首先想到的是设置CPU内部Codec中录音增益,不过现在已经最大了,只能通过软件解决。

在这里插入图片描述

下面是在android/hardware/aw/audio/homlet/audio_hw.c添加了录音增益调节的代码:

static ssize_t in_read(struct audio_stream_in *stream, void* buffer,
                       size_t bytes)
{
    
    
	。。。。。。
    if(use_volume_gain){
    
    	//use_volume_gain由属性sys.use.volume_gain控制
        size_t i = 0;
        unsigned int value = 0;
        int32_t data32 = 0;
        unsigned char * buffer_temp=(unsigned char *)buffer;

        //ALOGV("channel_count:%d curFrameSize=%d",channel_count,curFrameSize);
        for( i=0; i< bytes; i=i+2){
    
    
            short data16;	//只针对AUDIO_FORMAT_PCM_16_BIT
            unsigned int value_temp = 0;
            
            value = buffer_temp[i+1];	//第二个字节为高位数据
            value = (value<<8)+buffer_temp[i];	//获得一个16bit的音频数据
            value_temp = value;		//备份

            if(value & 0x8000){
    
    //音频数据是负数
                data16 = value&0xFFFF;
                data32 = ~data16 + 1;	//转正数,保存到32bit以防止后面计算溢出

                data32 = data32*volume_gain_value;	//增益调节,volume_gain_value由属性sys.audio.in.volume_gain控制
                if(data32 > 0x7FFF)
                    data32 = 0x7FFF;	//音量最大值

                data16=(short)(data32 &0xFFFF);
                value= ~data16 + 1; //转负数

            }else{
    
    	//正数
                value = (unsigned int)(value*volume_gain_value);	//增益调节
                if( value > 0x7FFF)
                    value = 0x7FFF;		//音量最大值
            }

            buffer_temp[i] = (unsigned char)(value&0xff);	//获得低8位的音频数据
            buffer_temp[i+1] = (unsigned char)((value>>8)&0xff);	//获得搞8位的音频数据
        }
    }

    /* audio dump data write */
    debug_dump_data(buffer, bytes, &in->dd_read_in);
}

注意,这里只是简单的对音频数据进行修改,增益倍数volume_gain_value不是自适应的,由实验测试评估得来,软件也可以对上面“溢出”的数据量进行统计,然后适当的改变volume_gain_value。此外,因上面代码没有对噪声进行处理,所以噪声同样会被放大。

猜你喜欢

转载自blog.csdn.net/suwen8100/article/details/117066836
今日推荐