Discord: nobody in a call can be turned down #235

Closed
opened 2026-09-23 15:17:03 -04:00 by Salastil · 1 comment
Owner

There is no volume control in a Discord call - not per person, and not overall.
grep -i volume across nobilis/src/backend/discord/voice.rs,
nobilis/src/audio.rs and the RPC surface returns nothing: the playback path
mixes what arrives and plays it as it came.

Discord has per-user volume because calls need it. One person joins twice as
loud as everyone else, or a stream's game audio buries the people talking over
it, and the only answers moho has are the system mixer - which moves everything
together - and leaving.

Two separate things, and the smaller one is worth having on its own:

  • Per user. A gain applied per SSRC before the mix. The daemon already
    tracks who is speaking per participant (voice.rs:494, speakers), so the
    identity a slider would attach to is already resolved.
  • Overall output. One gain on the playback stream, which is a smaller
    change than the above and covers the common case of a call that is simply too
    loud.

Related to #232 in one respect worth noting: gain applied after an echo
canceller has to be visible to it, or it will be cancelling against a reference
signal that no longer matches what came out of the speakers. Whichever of the
two is built second should account for the other.

There is no volume control in a Discord call - not per person, and not overall. `grep -i volume` across `nobilis/src/backend/discord/voice.rs`, `nobilis/src/audio.rs` and the RPC surface returns nothing: the playback path mixes what arrives and plays it as it came. Discord has per-user volume because calls need it. One person joins twice as loud as everyone else, or a stream's game audio buries the people talking over it, and the only answers moho has are the system mixer - which moves everything together - and leaving. Two separate things, and the smaller one is worth having on its own: - **Per user.** A gain applied per SSRC before the mix. The daemon already tracks who is speaking per participant (`voice.rs:494`, `speakers`), so the identity a slider would attach to is already resolved. - **Overall output.** One gain on the playback stream, which is a smaller change than the above and covers the common case of a call that is simply too loud. Related to #232 in one respect worth noting: gain applied after an echo canceller has to be visible to it, or it will be cancelling against a reference signal that no longer matches what came out of the speakers. Whichever of the two is built second should account for the other.
Salastil added the feature label 2026-09-23 15:17:03 -04:00
Author
Owner
Finished https://git.salastil.com/Salastil/nobilis/commit/4a5a31c https://git.salastil.com/Salastil/moho/commit/f700713 https://git.salastil.com/Salastil/moho/commit/b72633f https://git.salastil.com/Salastil/moho/commit/ccd9936
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Salastil/moho#235