Skip to content

Feature request: Automatic channel fader adjustments #966

@JohannesBrx

Description

@JohannesBrx

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

No one assigned

    Labels

    Type

    No type

    Projects

    Status

    Done

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions