From: Enrique Hernandez Date: Sun, 31 Jan 2021 23:47:06 +0000 (-0600) Subject: Merge remote-tracking branch 'origin/project_refactor' X-Git-Tag: v0.9~115 X-Git-Url: https://andrewgundersen.net/repos?a=commitdiff_plain;h=9a4f0fe1b35207acd2f7e527576448752dc763d9;p=mime-chat Merge remote-tracking branch 'origin/project_refactor' --- 9a4f0fe1b35207acd2f7e527576448752dc763d9 diff --cc .gitignore index ce49695,ce49695..c8e3bba --- a/.gitignore +++ b/.gitignore @@@ -4,6 -4,6 +4,8 @@@ node_module /crate/target/* /.log ++rawAudio.wav ++ # local env files .env.local .env.*.local diff --cc rawAudio.wav index 5582bc0,e69de29..0000000 deleted file mode 100644,100644 Binary files differ diff --cc src/components/taInput/inputController.ts index 0000000,6ff7117..9a83a0c mode 000000,100644..100644 --- a/src/components/taInput/inputController.ts +++ b/src/components/taInput/inputController.ts @@@ -1,0 -1,93 +1,93 @@@ + import { ref, watch, onUnmounted, onMounted } from "vue"; + + import useKeyDownHandler from "@/composables/keyDownHandler/useKeyDownHandler"; + + import useMediaStream from "@/composables/mediaStream"; + + import useAudioVisualizer from './audioDetails/audioVisualizer'; + + import useTextVisualizer from './textDetails/textVisualizer'; + + /* + * Controls which input to visualize + * Will visualize text input by default as user types or + * if user holds space bar down, input audio stream + * will be visualized & recorded + */ + // NOTE: input params should probably be input and MediaStream + // TODO: visualize audio stream from nodeJS background process + export default function useInputController() { + const visualizeStream = ref(false); + const paths = ref([]); + const audioBubbleWidth = ref(10); + let stream: MediaStream; + + const { keyDownHandler, input } = useKeyDownHandler(); + const { textInputXoffset, renderTextInput } = useTextVisualizer(input); + const { visualizeStreamAsPaths, expandBubble } = useAudioVisualizer(visualizeStream); + + // stops stream recording on space key up + function keyupHandler(e: any) { + if (e.key === " " && visualizeStream.value) { + console.log("stop recording"); + - // window.postMessage({ - // myTypeField: 'update-recorder', - // record: false - // }, '*') ++ window.postMessage({ ++ myTypeField: 'update-recorder', ++ record: false ++ }, '*') + + visualizeStream.value = false; + paths.value = [] + audioBubbleWidth.value = 10; + input.value = '' + } + } + + // add window event keyboard listeners + window.addEventListener("keydown", keyDownHandler); + window.addEventListener('keyup', keyupHandler); + + // get stream & initialize recorder object on mount + onMounted(async () => { + stream = await useMediaStream({ audio: true }); + }) + + // determine whether to render text or audio based one the keyboard input + watch(input, (input, prevInput) => { + if (prevInput !== "" || prevInput.length > 0) { + if (!visualizeStream.value) { + renderTextInput(); + } + return; + } + if (input === " " && visualizeStream.value === false) { + console.log("record MediaStream"); + visualizeStream.value = true; + - // window.postMessage({ - // myTypeField: 'update-recorder', - // record: true - // }, '*') ++ window.postMessage({ ++ myTypeField: 'update-recorder', ++ record: true ++ }, '*') + + expandBubble(audioBubbleWidth); + visualizeStreamAsPaths(stream, paths, audioBubbleWidth); + return; + } + renderTextInput(); + }); + + // remove Event Listeners on component unMount + onUnmounted(() => { + window.removeEventListener("keydown", keyDownHandler); + window.removeEventListener("keyup", keyupHandler); + }); + + return { + input, + visualizeStream, + textInputXoffset, + audioBubbleWidth, + paths + } + + }