-
Notifications
You must be signed in to change notification settings - Fork 240
Description
Adjusting the channel faders may be feasible for a small number of musicians but gets quite tedious for a larger choir with more than 20 channels. An automatic channel adjustment would make the setup much easier. It also would allow the less experienced users to initialize the faders to a reasonable basic setting. The automatic adjustment could be executed during a uniform part of the music piece or during warming up the voice.
I am aware of the feature loading and saving mixer configurations. However, non-reproducible client microphone configurations between different sessions will require frequent adjustments of the mixer configuration and thus require a more or less complicated exchange of such configuration. Finally, someone currently has to manually adjust the levels.
One idea would be computing a moving average of the channel levels transmitted by the server, e.g., in CAudioMixerBoard::SetChannelLevels. In my prototype, I use an exponential moving average like the following
vecAvgLevels[iChId] = (1. - alpha) * vecAvgLevels[iChId] + alpha * vecChannelLevel[i];
to compute the volume over several frames, where vecAvgLevels is a CVector with the averaged channel levels. The parameter alpha controls averaging speed: With alpha=1.0, the channel level from the server is directly taken, while, e.g., alpha=0.1 would mean an extended averaging. This kind of averaging would introduce almost no additional computational load and reduce the quantization of the levels as a side-effect.
The volume could then be set by a new menu entry like "Auto-Adjust all Faders". A basic approach could be setting the fader value anti-proportionally to the estimated channel level. In my current version, I would set a near overdriven level to a fader value of 0.4.
When I am interpreting the sources correctly, the server level update interval should be at 266.7 milliseconds. (Computed from a sample rate of 48 kHz, the CHANNEL_LEVEL_UPDATE_INTERVAL of 200 and 64 bytes frame size.)
Metadata
Metadata
Assignees
Labels
Type
Projects
Status