From abbfe4209350a478c6d64b66a152876f131bb951 Mon Sep 17 00:00:00 2001 From: Enrique Hernandez Date: Tue, 13 Oct 2020 20:19:32 -0500 Subject: [PATCH] add speech recorder + ws --- package.json | 12 +++++- src/background.ts | 23 +++++++++++ src/components/microphone/index.vue | 59 +---------------------------- src/main.ts | 2 +- testServer.js | 34 +++++++++++++++++ vue.config.js | 24 ++++++------ yarn.lock | 46 ++++++++++++++++++++-- 7 files changed, 125 insertions(+), 75 deletions(-) create mode 100644 testServer.js diff --git a/package.json b/package.json index f965baf..9c86aab 100644 --- a/package.json +++ b/package.json @@ -15,11 +15,16 @@ }, "main": "background.js", "dependencies": { + "@types/bindings": "^1.3.0", + "@types/uuid": "^8.3.0", + "@types/ws": "^7.2.7", "animejs": "^3.2.0", "core-js": "^3.6.5", + "speech-recorder": "^1.2.1", "vue": "^3.0.0-0", "vue-router": "^4.0.0-0", - "vuex": "^4.0.0-0" + "vuex": "^4.0.0-0", + "ws": "^7.3.1" }, "devDependencies": { "@types/animejs": "^3.1.2", @@ -54,6 +59,9 @@ "pre-commit": "lint-staged" }, "lint-staged": { - "*.{js,jsx,vue,ts,tsx}": ["vue-cli-service lint", "git add"] + "*.{js,jsx,vue,ts,tsx}": [ + "vue-cli-service lint", + "git add" + ] } } diff --git a/src/background.ts b/src/background.ts index defc4f6..b461c75 100644 --- a/src/background.ts +++ b/src/background.ts @@ -5,6 +5,29 @@ import { createProtocol } from "vue-cli-plugin-electron-builder/lib"; 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"; +import WebSocket from "ws"; + +const ws = new WebSocket("ws://localhost:8080"); +ws.on("open", function open() { + ws.send("hello fro client"); +}); +ws.on("message", (message: any) => { + console.log("received message", message); +}); + +const recorder = new SpeechRecorder(); + +recorder.start({ + onAudio: (audio: object, speech: boolean) => { + if (speech) { + console.log(audio); + ws.send(audio); + } + console.log("recording"); + // writeStream.write(audio); + } +}); // 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. diff --git a/src/components/microphone/index.vue b/src/components/microphone/index.vue index d46b91f..d2e7f2b 100644 --- a/src/components/microphone/index.vue +++ b/src/components/microphone/index.vue @@ -7,64 +7,7 @@ diff --git a/src/main.ts b/src/main.ts index 325b85c..a04047e 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,4 +1,4 @@ -import { createApp, provide, inject } from "vue"; +import { createApp } from "vue"; import App from "./App.vue"; import router from "./router"; import store from "./store"; diff --git a/testServer.js b/testServer.js new file mode 100644 index 0000000..acf809e --- /dev/null +++ b/testServer.js @@ -0,0 +1,34 @@ +const WebSocket = require("ws"); + +const wss = new WebSocket.Server({ + port: 8080 + // perMessageDeflate: { + // zlibDeflateOptions: { + // // See zlib defaults. + // chunkSize: 1024, + // memLevel: 7, + // level: 3 + // }, + // zlibInflateOptions: { + // chunkSize: 10 * 1024 + // }, + // // Other options settable: + // clientNoContextTakeover: true, // Defaults to negotiated value. + // serverNoContextTakeover: true, // Defaults to negotiated value. + // serverMaxWindowBits: 10, // Defaults to negotiated value. + // // Below options specified as default values. + // concurrencyLimit: 10, // Limits zlib concurrency for perf. + // threshold: 1024 // Size (in bytes) below which messages + // // should not be compressed. + // } +}); + +wss.on("connection", function connection(ws, req) { + ws.on("message", function incoming(message) { + console.log("received: %s:", message); + }); + + const ip = req.socket.remoteAddress; + console.log("received connection from", ip); + ws.send("hello from server!"); +}); diff --git a/vue.config.js b/vue.config.js index a40877b..c1f4170 100644 --- a/vue.config.js +++ b/vue.config.js @@ -1,18 +1,20 @@ -const path = require("path"); -const WasmPackPlugin = require("@wasm-tool/wasm-pack-plugin"); -const OptimizeWasmPlugin = require("optimize-wasm-webpack-plugin"); +// NOTE needed imports for rust wasm +// const path = require("path"); +// const WasmPackPlugin = require("@wasm-tool/wasm-pack-plugin"); +// const OptimizeWasmPlugin = require("optimize-wasm-webpack-plugin"); module.exports = { lintOnSave: false, configureWebpack: { - optimization: { - minimizer: [new OptimizeWasmPlugin()] - }, - plugins: [ - new WasmPackPlugin({ - crateDirectory: path.resolve(__dirname, "crate") - }) - ] + // NOTE uncomment to use rust wasm + // optimization: { + // minimizer: [new OptimizeWasmPlugin()] + // }, + // plugins: [ + // new WasmPackPlugin({ + // crateDirectory: path.resolve(__dirname, "crate") + // }) + // ] }, pluginOptions: { electronBuilder: { diff --git a/yarn.lock b/yarn.lock index 694fda4..8d2a5a4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1216,6 +1216,11 @@ dependencies: "@babel/types" "^7.3.0" +"@types/bindings@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@types/bindings/-/bindings-1.3.0.tgz#e9cd75a96d7abc1ecba0dc7eecb09a9f96cd417c" + integrity sha512-mTWOE6wC64MoEpv33otJNpQob81l5Pi+NsUkdiiP8EkESraQM94zuus/2s/Vz2Idy1qQkctNINYDZ61nfG1ngQ== + "@types/body-parser@*": version "1.19.0" resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f" @@ -1469,6 +1474,11 @@ dependencies: source-map "^0.6.1" +"@types/uuid@^8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.0.tgz#215c231dff736d5ba92410e6d602050cce7e273f" + integrity sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ== + "@types/webpack-dev-server@^3.11.0": version "3.11.0" resolved "https://registry.yarnpkg.com/@types/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#bcc3b85e7dc6ac2db25330610513f2228c2fcfb2" @@ -1506,6 +1516,13 @@ "@types/webpack-sources" "*" source-map "^0.6.0" +"@types/ws@^7.2.7": + version "7.2.7" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.2.7.tgz#362ad1a1d62721bdb725e72c8cccf357078cf5a3" + integrity sha512-UUFC/xxqFLP17hTva8/lVT0SybLUrfSD9c+iapKb0fEiC8uoDbA+xuZ3pAN603eW+bY8ebSMLm9jXdIPnD0ZgA== + dependencies: + "@types/node" "*" + "@types/yargs-parser@*": version "15.0.0" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" @@ -2836,7 +2853,7 @@ binaryen@^85.0.0: resolved "https://registry.yarnpkg.com/binaryen/-/binaryen-85.0.0.tgz#72c385d558862e52b75918bbce748d4627a98499" integrity sha512-01z4ZvA1O1hhNH+R4QQHuqzslecdHyzHYeuPMm4rB3hEiCP6BQlXZhHs68FgKfKT199YOt1uy5bmAIsilaOQ9g== -bindings@^1.5.0: +bindings@^1.3.0, bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== @@ -8636,6 +8653,11 @@ nan@^2.12.1, nan@^2.13.2: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== +nan@^2.14.1: + version "2.14.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -11164,6 +11186,16 @@ spectron@^11.0.0: split "^1.0.0" webdriverio "^6.1.20" +speech-recorder@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/speech-recorder/-/speech-recorder-1.2.1.tgz#db050c39db951db099ae3ee07f4eba574faab770" + integrity sha512-kILQF+5ZS6XNgZo6zul+6PPMSYbryPaLs5qWLnjR2KtbCZGxNwuuPTiMaJYvvQRdFmJlJOSgsGylZYk1sAwR4Q== + dependencies: + bindings "^1.3.0" + nan "^2.14.1" + uuid "^3.3.3" + webrtcvad "^1.0.1" + split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -12312,7 +12344,7 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.3.2, uuid@^3.4.0: +uuid@^3.3.2, uuid@^3.3.3, uuid@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== @@ -12711,6 +12743,14 @@ webpack@^4.0.0, webpack@^4.18.0: watchpack "^1.7.4" webpack-sources "^1.4.1" +webrtcvad@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/webrtcvad/-/webrtcvad-1.0.1.tgz#862b35c4ed2e7de3f39b268f48ef890ac85e02ce" + integrity sha512-oLfReCmGMpRducFWKP+o0GpKZLPj0u6qkln3P7wGaEzyjxtBiFuzvK28pmKF5SSihEkC1RGKO7Pi9C4VfY1q4Q== + dependencies: + bindings "^1.3.0" + node-addon-api "^1.7.1" + websocket-driver@0.6.5: version "0.6.5" resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" @@ -12885,7 +12925,7 @@ ws@^6.0.0, ws@^6.2.1: dependencies: async-limiter "~1.0.0" -ws@^7.0.0, ws@^7.2.3: +ws@^7.0.0, ws@^7.2.3, ws@^7.3.1: version "7.3.1" resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== -- 2.43.0