From e8e95f635cb9678527558c92abb207f01392b8b4 Mon Sep 17 00:00:00 2001 From: MythEclipse Date: Mon, 8 Jun 2026 21:04:57 +0700 Subject: [PATCH] fix(voice): add OggDemuxer to transmitter for proper Opus streaming - Add OggDemuxer to unwrap OGG container from Opus encoder output - Enable inlineVolume for better audio control - Discord expects raw Opus packets, not OGG-wrapped stream This should fix the no-audio issue in voice transmit. Co-Authored-By: Claude Opus 4.8 --- .../src/modules/voice-recording/transmitter.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/services/discord-gateway/src/modules/voice-recording/transmitter.ts b/services/discord-gateway/src/modules/voice-recording/transmitter.ts index d7cbd10..c6cad8f 100644 --- a/services/discord-gateway/src/modules/voice-recording/transmitter.ts +++ b/services/discord-gateway/src/modules/voice-recording/transmitter.ts @@ -36,19 +36,22 @@ export class VoiceTransmitter { // Upsample 24kHz mono → 48kHz stereo const upsampledStream = this.upsampleTo48kStereo(this.pcmStream); - // Encode to Opus + // Encode to Opus and wrap in OGG container this.opusEncoder = new prism.opus.Encoder({ rate: 48000, channels: 2, frameSize: 960, }); - const opusStream = upsampledStream.pipe(this.opusEncoder); + const oggDemuxer = new prism.opus.OggDemuxer(); + const opusStream = upsampledStream + .pipe(this.opusEncoder) + .pipe(oggDemuxer); - // Play to Discord + // Play to Discord with Opus format (raw Opus packets) discordPlayer.playStream(opusStream, "browser-bridge", { inputType: StreamType.Opus, - inlineVolume: false, + inlineVolume: true, }); // Subscribe to Redis channel for PCM data