fix: silence monitoring

This commit is contained in:
Timothy J. Baek 2024-06-06 21:00:41 -07:00
parent 4a73a01c24
commit 7eaf83cb7d

View File

@ -80,12 +80,17 @@
audioStreamSource.connect(analyser); audioStreamSource.connect(analyser);
const bufferLength = analyser.frequencyBinCount; const bufferLength = analyser.frequencyBinCount;
const domainData = new Uint8Array(bufferLength);
const timeDomainData = new Uint8Array(analyser.fftSize); const timeDomainData = new Uint8Array(analyser.fftSize);
let lastSoundTime = Date.now();
const detectSound = () => { const detectSound = () => {
const processFrame = () => { const processFrame = () => {
if (recording && !loading) { if (recording && !loading) {
analyser.getByteTimeDomainData(timeDomainData); analyser.getByteTimeDomainData(timeDomainData);
analyser.getByteFrequencyData(domainData);
// Calculate RMS level from time domain data // Calculate RMS level from time domain data
const rmsLevel = calculateRMS(timeDomainData); const rmsLevel = calculateRMS(timeDomainData);
@ -98,6 +103,16 @@
} }
visualizerData = visualizerData; visualizerData = visualizerData;
if (domainData.some((value) => value > 0)) {
lastSoundTime = Date.now();
}
if (recording && Date.now() - lastSoundTime > 3000) {
if ($settings?.speechAutoSend ?? false) {
confirmRecording();
}
}
} }
window.requestAnimationFrame(processFrame); window.requestAnimationFrame(processFrame);
@ -203,6 +218,7 @@
rounded-full" rounded-full"
on:click={async () => { on:click={async () => {
dispatch('cancel'); dispatch('cancel');
stopRecording();
}} }}
> >
<svg <svg