Voice: ensure mic on in auth join, add track diagnostics
Made-with: Cursor
This commit is contained in:
parent
2ce93c58a5
commit
35852f691b
2 changed files with 22 additions and 1 deletions
|
|
@ -286,6 +286,18 @@ export class AudioProcedure {
|
||||||
|
|
||||||
const before = await collectWebRtcAudioStats();
|
const before = await collectWebRtcAudioStats();
|
||||||
|
|
||||||
|
// Hypothesis B: verify TTS track matches PC sender track
|
||||||
|
const ttsTrack = streamDest.stream.getAudioTracks()[0];
|
||||||
|
const ttsTrackId = ttsTrack?.id || null;
|
||||||
|
const senderTrackIds: string[] = [];
|
||||||
|
for (const pc of pcs) {
|
||||||
|
const senders = pc.getSenders?.() || [];
|
||||||
|
for (const s of senders) {
|
||||||
|
if (s?.track?.kind === 'audio') senderTrackIds.push(s.track.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const trackMatch = ttsTrackId && senderTrackIds.includes(ttsTrackId);
|
||||||
|
|
||||||
// Play through the MediaStreamDestination -> Teams mic input
|
// Play through the MediaStreamDestination -> Teams mic input
|
||||||
const source = ctx.createBufferSource();
|
const source = ctx.createBufferSource();
|
||||||
source.buffer = audioBuffer;
|
source.buffer = audioBuffer;
|
||||||
|
|
@ -308,10 +320,16 @@ export class AudioProcedure {
|
||||||
after,
|
after,
|
||||||
deltaBytes: after.bytesSentTotal - before.bytesSentTotal,
|
deltaBytes: after.bytesSentTotal - before.bytesSentTotal,
|
||||||
deltaPackets: after.packetsSentTotal - before.packetsSentTotal,
|
deltaPackets: after.packetsSentTotal - before.packetsSentTotal,
|
||||||
|
ttsTrackId,
|
||||||
|
senderTrackIds,
|
||||||
|
trackMatch,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
}, { audioData, format });
|
}, { audioData, format });
|
||||||
|
|
||||||
|
this._logger.info(
|
||||||
|
`[Voice] TTS track vs PC: ttsTrackId=${playbackDiag?.ttsTrackId ?? 'n/a'} senderTrackIds=[${(playbackDiag?.senderTrackIds ?? []).join(',')}] trackMatch=${playbackDiag?.trackMatch ?? false}`,
|
||||||
|
);
|
||||||
this._logger.info(
|
this._logger.info(
|
||||||
`TTS WebRTC diagnostics: pcs=${playbackDiag?.after?.pcs ?? 0}, senders=${playbackDiag?.after?.senderCount ?? 0}, ` +
|
`TTS WebRTC diagnostics: pcs=${playbackDiag?.after?.pcs ?? 0}, senders=${playbackDiag?.after?.senderCount ?? 0}, ` +
|
||||||
`deltaBytes=${playbackDiag?.deltaBytes ?? 0}, deltaPackets=${playbackDiag?.deltaPackets ?? 0}`,
|
`deltaBytes=${playbackDiag?.deltaBytes ?? 0}, deltaPackets=${playbackDiag?.deltaPackets ?? 0}`,
|
||||||
|
|
|
||||||
|
|
@ -371,7 +371,10 @@ export class BotOrchestrator {
|
||||||
await this._takeScreenshot('step4a-no-buttons-found', this._isDebugMode);
|
await this._takeScreenshot('step4a-no-buttons-found', this._isDebugMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
// STEP 5: Poll for "Join now" on the pre-join screen (mic is NOT touched)
|
// Ensure microphone is ON before joining (required for voice playback)
|
||||||
|
await this._ensureMicOn();
|
||||||
|
|
||||||
|
// STEP 5: Poll for "Join now" on the pre-join screen
|
||||||
await this._takeScreenshot('step5-before-join-now', this._isDebugMode);
|
await this._takeScreenshot('step5-before-join-now', this._isDebugMode);
|
||||||
|
|
||||||
const joinNowBtn = await this._pollForElement(preJoinSelectors, 30000, 'Join now button');
|
const joinNowBtn = await this._pollForElement(preJoinSelectors, 30000, 'Join now button');
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue