fix: logs debug AudioBridge + install pulseaudio-utils

- 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)
This commit is contained in:
2026-05-28 13:33:02 +02:00
parent 574ca7e95d
commit 52c2a0d326
3 changed files with 23 additions and 2 deletions
+2 -1
View File
@@ -71,7 +71,8 @@ install_system_deps() {
# Outils PipeWire # Outils PipeWire
sudo apt install -y \ sudo apt install -y \
pipewire-bin \ pipewire-bin \
libspa-0.2-jack libspa-0.2-jack \
pulseaudio-utils
# Démarrage automatique # Démarrage automatique
systemctl --user enable --now pipewire pipewire-pulse wireplumber systemctl --user enable --now pipewire pipewire-pulse wireplumber
+12
View File
@@ -352,10 +352,14 @@ export class AudioBridge extends EventEmitter {
// Réception audio depuis les clients LiveKit // Réception audio depuis les clients LiveKit
this.liveKitClient.on('audioData', ({ participantName, pcmData, sampleRate, channels }) => { 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 // Pour l'instant, on route vers le groupe principal
// TODO: Mapper les participants aux groupes selon la configuration // TODO: Mapper les participants aux groupes selon la configuration
const groupName = 'Equipe'; // Groupe par défaut const groupName = 'Equipe'; // Groupe par défaut
this.emit('groupAudioIn', { groupName, pcmBuffer: pcmData }); this.emit('groupAudioIn', { groupName, pcmBuffer: pcmData });
console.log(`[AudioBridge FLUX 2] Événement groupAudioIn émis pour groupe "${groupName}"`);
}); });
await this.liveKitClient.connect(); await this.liveKitClient.connect();
@@ -449,19 +453,27 @@ export class AudioBridge extends EventEmitter {
// Écouter l'audio entrant de LiveKit (sera connecté par LiveKitServerBridge) // Écouter l'audio entrant de LiveKit (sera connecté par LiveKitServerBridge)
this.on('groupAudioIn', ({ groupName, pcmBuffer }) => { this.on('groupAudioIn', ({ groupName, pcmBuffer }) => {
try { try {
console.log(`[AudioBridge FLUX 2] Handler groupAudioIn: groupe="${groupName}", buffer=${pcmBuffer.length} bytes`);
// Stocker le buffer du groupe pour le routing // Stocker le buffer du groupe pour le routing
const float32Data = this._bufferToFloat32(pcmBuffer); const float32Data = this._bufferToFloat32(pcmBuffer);
this.groupBuffersFromLiveKit.set(groupName, float32Data); this.groupBuffersFromLiveKit.set(groupName, float32Data);
console.log(`[AudioBridge FLUX 2] Buffer Float32 créé: ${float32Data.length} samples`);
// ÉTAPE 3 : Groupes → Outputs physiques (via GroupAudioRouter) // ÉTAPE 3 : Groupes → Outputs physiques (via GroupAudioRouter)
const outputBuffers = this.groupAudioRouter.processGroupsToOutputs( const outputBuffers = this.groupAudioRouter.processGroupsToOutputs(
this.groupBuffersFromLiveKit this.groupBuffersFromLiveKit
); );
console.log(`[AudioBridge FLUX 2] GroupRouter processGroupsToOutputs: ${this.groupBuffersFromLiveKit.size} groupes → ${outputBuffers.size} outputs`);
// ÉTAPE 4 : Envoyer chaque output à la carte son // ÉTAPE 4 : Envoyer chaque output à la carte son
outputBuffers.forEach((outputBuffer, channelId) => { outputBuffers.forEach((outputBuffer, channelId) => {
const pcmBuffer = this._float32ToBuffer(outputBuffer); const pcmBuffer = this._float32ToBuffer(outputBuffer);
console.log(`[AudioBridge FLUX 2] → Output ${channelId}: ${pcmBuffer.length} bytes vers carte son`);
// Envoyer à la carte son // Envoyer à la carte son
this.audioBackend.queueAudio(pcmBuffer); this.audioBackend.queueAudio(pcmBuffer);
}); });
+9 -1
View File
@@ -270,11 +270,19 @@ export class GroupAudioRouter extends EventEmitter {
// Réinitialise les buffers de sortie // Réinitialise les buffers de sortie
this.outputBuffers.clear(); 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 // Pour chaque groupe
groupBuffersData.forEach((pcmData, groupName) => { groupBuffersData.forEach((pcmData, groupName) => {
const routes = this.groupToOutputRoutes.get(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 // Applique chaque route vers les sorties
routes.forEach(route => { routes.forEach(route => {