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

chetanv at gmail.com chetanv at gmail.com
Sun Feb 8 13:24:27 CST 2009


-----------------------------------------------------------
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


Testing
-------


Thanks,

chetanv




More information about the asterisk-dev mailing list