Skip to content

feat(light): volume por participante no núcleo nativo - #892

Closed
JelielSantos wants to merge 1 commit into
mainfrom
feat/light-participant-volume
Closed

JelielSantos wants to merge 1 commit into
mainfrom
feat/light-participant-volume

Conversation

@JelielSantos

Copy link
Copy Markdown
Collaborator

Parte da #658. Mais um recurso do núcleo para a bandeja/painéis: o volume por participante, como o controle deslizante do cliente completo. É independente do #885.

O que muda

  • {"command":"set-volume","sessionId":"…","volume":0-200}: mesma escala (0–200%) e mesma chave (sessionId, uma por conexão/dispositivo) do cliente completo. Preferência local; o servidor e os demais participantes não sabem dela.
  • Aplicação: RemoteAudioSource::SetVolume do WebRTC escala o fluxo decodificado antes da mixagem, sem nó de áudio extra e sem custo em 100%. O ganho vale na chamada atual e é reaplicado em cada faixa nova daquela sessão: P2P (ConfigureTracks), consumo SFU, reconexão ou nova chamada (JoinConfig::volumes).
  • Perfil: monky-light-settings.json ganha userVolumes (sessionId → 0–200), só com valores diferentes de 100 e limite de 256 sessões. Voltar a 100 apaga a entrada. O limite do arquivo sobe de 16 para 64 KiB, e só esse mapa pode aninhar um nível; outros objetos continuam recusados.
  • Saída: evento participant-volume e userVolumes no stats, este só com as sessões da chamada atual.

Sem mudança de protocolo: não é major. O #885 também mexe no ProfileSettings; quem for mergeado por último resolve um conflito pequeno.

Testes (Windows x64, local)

  • npm run test:light:native: 35 aprovados, 4 ignorados por plataforma. Casos novos de perfil cobrem round-trip, fora da faixa, 100 salvo por engano, sessão longa demais, mais de 256 entradas e JSON aninhado indevido.
  • npm run test:light:voice: 29 aprovados, 1 ignorado. Novo participant volume scales {p2p,sfu} playback and is kept in the profile, com o Bob em mute para que a saída dele seja só a voz da Alice:
    • volume 0 → nenhum bloco não nulo tocado;
    • 200% → energia por bloco acima de 2,5 vezes a de 100%;
    • depois de reiniciar o processo, o volume salvo vale desde a entrada na chamada;
    • 201, 1,5 e -1 são recusados.

🤖 Generated with Claude Code

`set-volume` ajusta de 0 a 200% o volume de uma sessão de voz, com a mesma
escala e chave (sessionId) do controle deslizante do cliente completo. É uma
preferência local, salva no perfil, aplicada na chamada atual e nas próximas,
em P2P e SFU, e emite `participant-volume`; `stats` traz `userVolumes` das
sessões da chamada.

O ganho é o do RemoteAudioSource do WebRTC, aplicado ao fluxo decodificado
antes da mixagem: sem processamento extra e sem custo em 100%. O perfil guarda
até 256 sessões alteradas, e voltar a 100 libera a entrada.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@JelielSantos

Copy link
Copy Markdown
Collaborator Author

Substituído pelo #893, que junta este PR com o #885 (fala e push-to-talk) e liga tudo na bandeja. Os commits daqui estão lá, e a correção do clang (-Wmissing-field-initializers) que derrubou o macOS no #892 também.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant