From: Andrew Gundersen Date: Mon, 31 May 2021 15:01:04 +0000 (-0500) Subject: more changes X-Git-Url: https://andrewgundersen.net/repos?a=commitdiff_plain;h=b08061d0808f4964f15b06623aa26e36ec7b0bb8;p=mime-chat more changes --- diff --git a/src/components/inputitem/helpers/audiocontrol.ts b/src/components/inputitem/helpers/audiocontrol.ts index f7335b6..637409e 100644 --- a/src/components/inputitem/helpers/audiocontrol.ts +++ b/src/components/inputitem/helpers/audiocontrol.ts @@ -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)); } diff --git a/src/types.ts b/src/types.ts index a048bfc..ebebe1a 100644 --- a/src/types.ts +++ b/src/types.ts @@ -13,7 +13,7 @@ export interface RenderMessage { } export interface AudioData { - hex: string; + content: string; channels: number; fs: number; }