Mercurial Hosting > lang
diff src/chat.js @ 14:47b00cce8b53
stt
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Tue, 29 Jul 2025 00:12:05 -0600 |
parents | 65bd7e245c63 |
children | 3a80ddafe5a4 |
line wrap: on
line diff
--- a/src/chat.js Thu Jul 24 22:47:48 2025 -0600 +++ b/src/chat.js Tue Jul 29 00:12:05 2025 -0600 @@ -71,7 +71,7 @@ function fixTextarea(textarea) { textarea.style.height = 'initial'; textarea.style.height = (textarea.scrollHeight+2) + 'px'; - textarea.scrollIntoViewIfNeeded(false); + textarea.parentNode.scrollIntoViewIfNeeded(false); } function askAi() { @@ -82,3 +82,42 @@ fixTextarea(input); showWaitingAiIcon(); } + + +function setText(text) { + let textarea = document.querySelector('textarea'); + textarea.value = text; + fixTextarea(textarea); +} + +let recorder = null; +let chunks; + +function startRecording() { + chunks = []; + function record(stream) { + recorder = new MediaRecorder( stream, { mimeType: 'audio/webm;codecs=opus' } ); + recorder.ondataavailable = function(event) { + chunks.push(event.data); + }; + recorder.onstop = function(event) { + recorder = null; + let blob = new Blob(chunks, { type: 'audio/webm' }); + let formData = new FormData(); + formData.append('audio', blob, 'recording.webm'); + ajax('stt.js',formData); + document.querySelector('button[record]').textContent = 'Record'; + }; + recorder.start(); + } + navigator.mediaDevices.getUserMedia({ audio: { channelCount: 1 } }).then(record); + document.querySelector('button[record]').textContent = 'Stop Recording'; +} + +function toggleRecording() { + if( recorder === null ) { + startRecording(); + } else { + recorder.stop(); + } +}