larperCord Me pague um café no ko-fi.com English

Chamadas de voz

O larperCord entra em canais de voz de verdade do Discord, com criptografia de ponta a ponta. Tudo que é de voz roda numa thread própria, criada só quando você entra numa call. Fora de uma call, o módulo não usa CPU e o app não inicializa o áudio, a não ser que você abra Configurações → Voz, que lê o microfone para o medidor enquanto estiver aberta.

Usando

Clique num canal de voz para entrar. O painel acima do seu usuário mostra a call, com mudo, ensurdecer e desconectar. Você também pode sair por "Sair da call", clicando com o botão direito no canal de voz. Quem está falando ganha um anel em volta do avatar.

O mixer dá a cada pessoa o próprio volume.

O mixer da call

O painel também mostra o ping, a qualidade da conexão por cor e quando você está transmitindo, e avisa se o microfone não abrir ou se o servidor te mutou ou ensurdeceu. Mudo e surdo dos outros aparecem na lista da call.

Os canais em que você não tem permissão para conectar aparecem com cadeado, e o app nem tenta.

Configurações → Voz

A página de configurações de voz

Como funciona

CamadaO que usa
SinalizaçãoGateway de voz v8 por WebSocket, com heartbeat (seq_ack) e RESUME quando a conexão cai
ConexãoIP discovery (pacote de 74 bytes) e Select Protocol por UDP
Criptografia de transporteRTP com aead_xchacha20_poly1305_rtpsize
Criptografia de ponta a pontaDAVE sobre MLS, pela libdave e pelo MLSpp
CodecOpus a 48 kHz estéreo, 20 ms por pacote. Pacotes perdidos viram o packet-loss concealment do Opus
ÁudioO SDL3 mistura. Cada pessoa é um SDL_AudioStream no mesmo dispositivo de saída, e o volume dela é o ganho do stream. O microfone é um stream lido a cada 20 ms

Alguns detalhes que deram trabalho para acertar:

Limites hoje

Depuração

bash
LARPER_VOICE_DEBUG=1 larpercord

Isso imprime opcodes, códigos de fechamento e eventos do DAVE, além do nível do microfone e dos quadros enviados. Nunca imprime o token nem chaves.

Para testar só a conexão, o --voice-test entra num canal por 25 segundos, sempre mudo:

bash
LARPER_TOKEN=... larpercord --voice-test GUILD_ID CHANNEL_ID

O protocolo segue a documentação de voz do Discord e a documentação do protocolo DAVE.

Fonte desta página no GitHub