fix
All checks were successful
/ upload (release) Successful in 3m17s

This commit is contained in:
pavel 2026-02-25 19:41:33 +01:00
commit b7416c7c2b
2 changed files with 46 additions and 10 deletions

View file

@ -822,7 +822,8 @@ async function buildAudioPipeline(rawStream) {
analyser.fftSize = 1024;
processedSource.connect(analyser);
const timeData = new Float32Array(analyser.fftSize);
const supportsFloatTimeDomain = typeof analyser.getFloatTimeDomainData === 'function';
const timeData = supportsFloatTimeDomain ? new Float32Array(analyser.fftSize) : new Uint8Array(analyser.fftSize);
let localIsSpeaking = false;
let speechFrames = 0;
let silenceFrames = 0;
@ -832,12 +833,23 @@ async function buildAudioPipeline(rawStream) {
const checkVolume = () => {
if (!state.voice.audioContext || state.voice.audioContext.state === 'closed') return;
analyser.getFloatTimeDomainData(timeData);
try {
if (supportsFloatTimeDomain) {
analyser.getFloatTimeDomainData(timeData);
} else {
analyser.getByteTimeDomainData(timeData);
}
} catch (err) {
setTimeout(checkVolume, 60);
return;
}
let sumSquares = 0;
let peak = 0;
for (let i = 0; i < timeData.length; i++) {
const v = timeData[i];
const v = supportsFloatTimeDomain
? timeData[i]
: (timeData[i] - 128) / 128;
sumSquares += v * v;
const abs = Math.abs(v);
if (abs > peak) peak = abs;
@ -919,7 +931,13 @@ async function createLocalVoiceStream() {
video: false,
};
const rawStream = await navigator.mediaDevices.getUserMedia(constraints);
const localStream = await buildAudioPipeline(rawStream);
let localStream = rawStream;
try {
localStream = await buildAudioPipeline(rawStream);
} catch (err) {
console.warn('voice audio pipeline failed, using raw mic stream', err);
state.voice.activeNoiseFilter = 'off';
}
state.voice.rawStream = rawStream;
state.voice.localStream = localStream;
if (state.voice.muted) {
@ -1067,7 +1085,7 @@ async function joinVoice() {
try {
await createLocalVoiceStream();
} catch (err) {
console.error("microphone denied", err);
console.error('failed to initialize local voice stream', err);
return;
}