From 52c2a0d326ba45f330eaa547ca115b4c936f1182 Mon Sep 17 00:00:00 2001 From: Benoit Date: Thu, 28 May 2026 13:33:02 +0200 Subject: [PATCH] fix: logs debug AudioBridge + install pulseaudio-utils MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Ajout logs FLUX 2 (réception audio LiveKit → carte son) - Ajout logs GroupRouter pour debug routing - install/linux.sh: ajout pulseaudio-utils (requis pour pactl) --- install/linux.sh | 3 ++- server/bridge/AudioBridge.js | 12 ++++++++++++ server/bridge/GroupAudioRouter.js | 10 +++++++++- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/install/linux.sh b/install/linux.sh index fac9567..64c5473 100755 --- a/install/linux.sh +++ b/install/linux.sh @@ -71,7 +71,8 @@ install_system_deps() { # Outils PipeWire sudo apt install -y \ pipewire-bin \ - libspa-0.2-jack + libspa-0.2-jack \ + pulseaudio-utils # Démarrage automatique systemctl --user enable --now pipewire pipewire-pulse wireplumber diff --git a/server/bridge/AudioBridge.js b/server/bridge/AudioBridge.js index 0e1e32e..8e73234 100644 --- a/server/bridge/AudioBridge.js +++ b/server/bridge/AudioBridge.js @@ -352,10 +352,14 @@ export class AudioBridge extends EventEmitter { // Réception audio depuis les clients LiveKit this.liveKitClient.on('audioData', ({ participantName, pcmData, sampleRate, channels }) => { + console.log(`[AudioBridge FLUX 2] Audio reçu de ${participantName}: ${pcmData.length} bytes (${sampleRate}Hz, ${channels}ch)`); + // Pour l'instant, on route vers le groupe principal // TODO: Mapper les participants aux groupes selon la configuration const groupName = 'Equipe'; // Groupe par défaut this.emit('groupAudioIn', { groupName, pcmBuffer: pcmData }); + + console.log(`[AudioBridge FLUX 2] Événement groupAudioIn émis pour groupe "${groupName}"`); }); await this.liveKitClient.connect(); @@ -449,19 +453,27 @@ export class AudioBridge extends EventEmitter { // Écouter l'audio entrant de LiveKit (sera connecté par LiveKitServerBridge) this.on('groupAudioIn', ({ groupName, pcmBuffer }) => { try { + console.log(`[AudioBridge FLUX 2] Handler groupAudioIn: groupe="${groupName}", buffer=${pcmBuffer.length} bytes`); + // Stocker le buffer du groupe pour le routing const float32Data = this._bufferToFloat32(pcmBuffer); this.groupBuffersFromLiveKit.set(groupName, float32Data); + console.log(`[AudioBridge FLUX 2] Buffer Float32 créé: ${float32Data.length} samples`); + // ÉTAPE 3 : Groupes → Outputs physiques (via GroupAudioRouter) const outputBuffers = this.groupAudioRouter.processGroupsToOutputs( this.groupBuffersFromLiveKit ); + console.log(`[AudioBridge FLUX 2] GroupRouter processGroupsToOutputs: ${this.groupBuffersFromLiveKit.size} groupes → ${outputBuffers.size} outputs`); + // ÉTAPE 4 : Envoyer chaque output à la carte son outputBuffers.forEach((outputBuffer, channelId) => { const pcmBuffer = this._float32ToBuffer(outputBuffer); + console.log(`[AudioBridge FLUX 2] → Output ${channelId}: ${pcmBuffer.length} bytes vers carte son`); + // Envoyer à la carte son this.audioBackend.queueAudio(pcmBuffer); }); diff --git a/server/bridge/GroupAudioRouter.js b/server/bridge/GroupAudioRouter.js index 5eb4a0f..c25bee3 100644 --- a/server/bridge/GroupAudioRouter.js +++ b/server/bridge/GroupAudioRouter.js @@ -270,11 +270,19 @@ export class GroupAudioRouter extends EventEmitter { // Réinitialise les buffers de sortie this.outputBuffers.clear(); + logger.debug(`[GroupRouter] processGroupsToOutputs: ${groupBuffersData.size} groupes en entrée`); + logger.debug(`[GroupRouter] Routes disponibles: ${JSON.stringify([...this.groupToOutputRoutes.keys()])}`); + // Pour chaque groupe groupBuffersData.forEach((pcmData, groupName) => { const routes = this.groupToOutputRoutes.get(groupName); - if (!routes || routes.length === 0) return; + logger.debug(`[GroupRouter] Groupe "${groupName}": ${routes ? routes.length : 0} routes trouvées`); + + if (!routes || routes.length === 0) { + logger.warn(`[GroupRouter] Aucune route de sortie configurée pour groupe "${groupName}" - audio ignoré`); + return; + } // Applique chaque route vers les sorties routes.forEach(route => {