]> Repos - mime-chat/commitdiff
add speechrecorder to background
authorriqo <hernandeze2@xavier.edu>
Wed, 30 Dec 2020 16:55:27 +0000 (11:55 -0500)
committerriqo <hernandeze2@xavier.edu>
Wed, 30 Dec 2020 16:55:27 +0000 (11:55 -0500)
src/background.ts
src/core/UI/input/useInputController.ts
src/preload.ts

index 2892aa33555252926c1aeee1931c2fbd1d08260f..e3a62a5009a20e1811f79cb70b10dacf5a04a9b4 100644 (file)
@@ -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", () => {
index 0bad6cf0a60ef0197c055c7c7250cf5bcee1283b..8876dae5f3aa750b0e7c177d1d5768c6374b2a2d 100644 (file)
@@ -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;
index 9dea119acfe13dc40ee2430925c3112b7fa2be3a..242516a50473bf08947bab7be2fe8c0aea94df7e 100644 (file)
@@ -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);
+    }
   });
 });