]> Repos - mime-chat/commitdiff
more changes
authorAndrew Gundersen <gundersena@xavier.edu>
Mon, 31 May 2021 15:01:04 +0000 (10:01 -0500)
committerAndrew Gundersen <gundersena@xavier.edu>
Mon, 31 May 2021 15:01:04 +0000 (10:01 -0500)
src/components/inputitem/helpers/audiocontrol.ts
src/types.ts

index f7335b6b0d4e892a75d123f74f3a4fb4e2c7992c..637409e111a1fd67e9a8d0420f6607c314b400e0 100644 (file)
@@ -1,18 +1,30 @@
 import useMitt from "@/modules/mitt";
 import { useIpc } from '@/modules/ipc';
 import { showRecIcon, hideRecIcon } from "./animations";
-// import useMediaRecorder from "./mediarecorder";
 import { onMounted, onUnmounted, ref, Ref } from "vue";
 import keyboardNameMap from "../keyBoardMaps/keyboardNameMap";
 import { renderMessage, clientMessage } from '@/modules/message';
 import { AudioData } from "@/types";
 
 
+function arrayBufferToBase64 (buffer: any) {
+    var binary = '';
+    var bytes = new Uint8Array(buffer);
+    var len = bytes.byteLength;
+    for (var i = 0; i < len; i++) {
+        binary += String.fromCharCode( bytes[ i ] );
+    }
+    return window.btoa( binary );
+}
+
+
 
 export default function useAudioInputController (typing: Ref) {
 
     let mediaRecorder: any;
     let buffer = '';
+    let sampleRate = 44100; // default
+    let channels = 1;
 
     // For sending messages.
     const { post, invoke } = useIpc();
@@ -39,10 +51,17 @@ export default function useAudioInputController (typing: Ref) {
             processor.connect(context.destination);
 
             processor.onaudioprocess = (e: AudioProcessingEvent) => {
+
                 if (recording.value) {
-                    const arr = new Uint16Array(e.inputBuffer);
-                    buffer += String.fromCharCode.apply(null, new Float32Array(e.inputBuffer));
+
+                    const data = e.inputBuffer.getChannelData(0).buffer;
+
+                    buffer += arrayBufferToBase64(data);
+
+                    sampleRate = e.inputBuffer.sampleRate;
+
                 } else buffer = '';
+
             };
 
         });
@@ -73,7 +92,6 @@ export default function useAudioInputController (typing: Ref) {
 
             // get audio from buffer then stop recording
             console.log("INPT:Stopping record.")
-            const audio = buffer;
             recording.value = false;
             hideRecIcon()
 
@@ -85,10 +103,17 @@ export default function useAudioInputController (typing: Ref) {
                 "sf"
             );
 
-            emitter.emit("self-message", message); 
+            emitter.emit("self-message", message);
+
+            // send audio to backend
+            const audio: AudioData = {
+                content: buffer,
+                channels: channels,
+                fs: sampleRate
+            }
 
-            console.log(`Posting audio: ${audio}`);
-            console.log(typeof audio);
+            console.log("INPT:Sending audio to backend");
+            post("client-message", clientMessage("", audio, message.uid));
 
         }
 
index a048bfc28ea8abdf44906592e7d587f2cd296e89..ebebe1af7e0591e0a2312bd356eea206ddc51b39 100644 (file)
@@ -13,7 +13,7 @@ export interface RenderMessage {
 }
 
 export interface AudioData {
-    hex: string;
+    content: string;
     channels: number;
     fs: number;
 }