[asterisk-dev] [Code Review] Automatic Gain Normalization in meetme

Steve Underwood steveu at coppice.org
Mon Feb 9 06:05:18 CST 2009


Vadim Lebedev wrote:
> I wonder why are you using FP math?
>   
He probably wants to maxmise speed.
> _int64 for accumulator would be pefectly ok here
>   
Maybe, but it will be slower on a 32 bit machines, and no better on 64 
bit machines.

Regards,
Steve

>
> Thanks
> Vadim
>
> Le 8 févr. 09 à 20:24, chetanv at gmail.com a écrit :
>
>   
>> -----------------------------------------------------------
>> This is an automatically generated e-mail. To reply, visit:
>> http://reviewboard.digium.com/r/146/
>> -----------------------------------------------------------
>>
>> Review request for Asterisk Developers.
>>
>>
>> Summary
>> -------
>>
>> Often during an audio conference, one of the participants has set a  
>> high mic volume. Whenever he speaks, the other listeners hear his  
>> relatively high volume. Similarly, someone has a low voice or has  
>> set a low mic volume. Other participants have to strain to hear him.
>>
>> This patch tries to overcome this problem by estimating the volume  
>> of the participants and adjusting their gain. This adjustment is  
>> done every 2 seconds in the meetme app.
>>
>> The patch adds a "g" flag to the meetme app. This option is tied up  
>> with the "T" flag - talker detection. Both have to be on for this to  
>> work.
>>
>> Changes are in apps/app_meetme.c, include/asterisk/dsp.h, main/dsp.c
>>
>> In app_meetme, if the user is talking, his frame is used for gain  
>> related calculations (ast_dsp_gain()) and his volume is adjusted  
>> using the current value of the gain multiplication factor.
>> The current gain multiplication factor is based on the past 100  
>> frames of that user (past 2 seconds).
>>
>> Three new fields have been added to ast_dsp structure:
>>  * gain_mult_factor: The gain multiplication factor
>>  * gain_buckets[]: The buckets array used in estimating the value of  
>> the gain multiplication factor
>>  * numgainframes: Number of gain frames which have been processed
>>
>> For every frame, the RMS gain (actually - square of RMS) is  
>> calculated and bucketed into 10 buckets (histogram). After 100  
>> frames are bucketed this way, the histogram is used to estimate the  
>> gain multiplication factor. Starting from the right side of the  
>> histogram, the bucket with at-least 4 frames is picked and the  
>> corresponding gain multiplication factor is chosen. (There is a on- 
>> to-one mapping between the buckets of the histogram and the gain  
>> multiplication factor - GMF_VALUES[])
>>
>>
>> Diffs
>> -----
>>
>>  trunk/apps/app_meetme.c 169716
>>  trunk/include/asterisk/dsp.h 169716
>>  trunk/main/dsp.c 169716
>>
>> Diff: http://reviewboard.digium.com/r/146/diff
>>
>>     




More information about the asterisk-dev mailing list