Browse Source

fix: silence monitoring

Timothy J. Baek 1 year ago
parent
commit
7eaf83cb7d
1 changed files with 16 additions and 0 deletions
  1. 16 0
      src/lib/components/chat/MessageInput/VoiceRecording.svelte

+ 16 - 0
src/lib/components/chat/MessageInput/VoiceRecording.svelte

@@ -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