Author SHA1 Message Date
Lotus CIandClaude Opus 5 bc0e5ed432 fix(lotus): capture the microphone mono — stereo interfaces published left-only on Firefox
CI / Publish to Gitea npm registry (push) Successful in 1m11s
CI / Build embedded bundle (push) Successful in 3m11s
audioCaptureDefaults set no channelCount, so Firefox captured a 2-channel
audio interface (Scarlett Solo, one XLR mic on input 1) as stereo and,
with browser audio processing off (the ML denoise tier), published it as
is: peers heard the speaker in the left ear only. Chrome downmixes such
captures itself, which is why it only showed on Firefox. Request
channelCount: 1 for mic capture; screenshare audio is captured separately
and is unaffected. Tested. Bumps to 0.25.0-lotus.3.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PPmy3tPq869XDW4njjVaKA
2026-09-14 21:10:11 -04:00
3 changed files with 18 additions and 1 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@lotusguild/element-call-embedded",
"version": "0.25.0-lotus.2",
"version": "0.25.0-lotus.3",
"files": [
"README.md",
"LICENSE-AGPL-3.0",
+10
View File
@@ -88,6 +88,16 @@ afterEach(() => {
});
describe("[lotus] audio-capture URL param overrides", () => {
test("mic capture is always requested mono (stereo interfaces on Firefox published L-only)", () => {
getUrlParams.mockReturnValue({
echoCancellation: false,
noiseSuppression: false,
autoGainControl: false,
});
createRoom();
expect(capturedAudioDefaults()).toMatchObject({ channelCount: 1 });
});
test("with params defaulted to true, the Settings govern (upstream behaviour)", () => {
getUrlParams.mockReturnValue({
echoCancellation: true,
@@ -183,6 +183,13 @@ function generateRoomOption({
audioCaptureDefaults: {
...liveKitOptions.audioCaptureDefaults,
deviceId: devices.audioInput.selected$.value?.id,
// [lotus] Voice is mono. Without this, Firefox captures a 2-channel
// audio interface (e.g. a Scarlett Solo with one XLR mic on input 1) as
// stereo and, with browser audio processing off, publishes it that way —
// peers hear the speaker in the left ear only. Chrome downmixes such
// captures itself, which is why it only showed on Firefox. Screenshare
// audio is captured separately and is unaffected.
channelCount: 1,
echoCancellation:
echoCancellationSetting.getValue() &&
getUrlParams().echoCancellation !== false,