From: riqo Date: Wed, 30 Dec 2020 16:55:27 +0000 (-0500) Subject: add speechrecorder to background X-Git-Tag: v0.9~122 X-Git-Url: https://andrewgundersen.net/repos?a=commitdiff_plain;h=3f5245795698beddef9f55b2cb88a2be4d108f27;p=mime-chat add speechrecorder to background --- diff --git a/src/background.ts b/src/background.ts index 2892aa3..e3a62a5 100644 --- a/src/background.ts +++ b/src/background.ts @@ -6,12 +6,14 @@ import installExtension, { VUEJS_DEVTOOLS } from "electron-devtools-installer"; const isDevelopment = process.env.NODE_ENV !== "production"; import * as path from "path"; import { SpeechRecorder } from "speech-recorder"; +const fs = require('fs'); // TODO: connect To Crimata-BE import WebSocket from "ws"; -// const recorder = new SpeechRecorder({ sampleRate: 16000, framesPerBuffer: 320 }); +const recorder = new SpeechRecorder({ sampleRate: 16000, framesPerBuffer: 320, level: 0 }); +// const writeStream = fs.createWriteStream("audio.raw"); // Keep a global reference of the window object, if you don't, the window will // be closed automatically when the JavaScript object is garbage collected. @@ -73,6 +75,31 @@ function createWindow() { ipcMain.on('update-menu-bar', (Event: any, payload: any) => { // win.setTitle("Listening..."); }) + + let audioData: any[] = []; + ipcMain.on('update-recorder', (Event: any, record: boolean) => { + console.log('updating recorder', record) + if (record) { + recorder.start({ + onAudio: (audio: any) => { + audioData.push(audio) + // writeStream.write(audio); + } + }) + } else { + recorder.stop() + // send audio to BE + const message = { + text: '', + audio: audioData + } + ws.send(JSON.stringify(message)) + console.log('sent', message) + + // clear audio.raw file + audioData = []; + } + }) }) win.on("closed", () => { diff --git a/src/core/UI/input/useInputController.ts b/src/core/UI/input/useInputController.ts index 0bad6cf..8876dae 100644 --- a/src/core/UI/input/useInputController.ts +++ b/src/core/UI/input/useInputController.ts @@ -36,7 +36,11 @@ export default function useInputController() { function keyupHandler(e: any) { if (e.key === " " && visualizeStream.value) { console.log("stop recording"); - recorder.stop(); + // recorder.stop(); + window.postMessage({ + myTypeField: 'update-recorder', + record: false + }, '*') visualizeStream.value = false; paths.value = [] audioBubbleWidth.value = 10; @@ -55,7 +59,6 @@ export default function useInputController() { recorder = initRecorder(stream); }) - // determine whether to render text or audio based one the keyboard input watch(input, (input, prevInput) => { if (prevInput !== "" || prevInput.length > 0) { @@ -67,7 +70,12 @@ export default function useInputController() { if (input === " " && visualizeStream.value === false) { console.log("record MediaStream"); visualizeStream.value = true; - recorder.start(); + // recorder.start(); + + window.postMessage({ + myTypeField: 'update-recorder', + record: true + }, '*') expandBubble(audioBubbleWidth); visualizeStreamAsPaths(stream, paths, audioBubbleWidth); return; diff --git a/src/preload.ts b/src/preload.ts index 9dea119..242516a 100644 --- a/src/preload.ts +++ b/src/preload.ts @@ -21,6 +21,10 @@ process.once("loaded", () => { if (message.myTypeField === "update-menu-bar") { ipcRenderer.send("update-menu-bar", message); } + + if (message.myTypeField === "update-recorder") { + ipcRenderer.send("update-recorder", message.record); + } }); });