]> Repos - mime-chat/commitdiff
add recorder file
authorriqo <hernandeze2@xavier.edu>
Thu, 4 Feb 2021 00:01:48 +0000 (18:01 -0600)
committerriqo <hernandeze2@xavier.edu>
Thu, 4 Feb 2021 00:01:48 +0000 (18:01 -0600)
src/background.ts
src/background/recorder.ts [new file with mode: 0644]
testAudio.js

index de64c268ce750f7225091250974f488bae200f8b..e53ab80b65c9bc153c4aa034e0e64cc04369c73f 100644 (file)
@@ -9,20 +9,11 @@ const fs = require('fs');
 import WebSocket from "ws";
 const portAudio = require('naudiodon');
 
-// Create an instance of AudioIO with inOptions (defaults are as below), which will return a ReadableStream
-const audioOptions = {
-  channelCount: 2,
-  sampleFormat: portAudio.sampleFormat16Bit,
-  sampleRate: 16000,
-  deviceId: -1, // Use -1 or omit the deviceId to select the default device
-  closeOnError: false // Close the stream if an audio error is detected, if set false then just log the error
-}
-
-const ai = new portAudio.AudioIO({
-  inOptions: audioOptions
-});
+// const ai = new portAudio.AudioIO({
+//   inOptions: audioOptions
+// });
 //ai.pipe();
-ai.start();
+// ai.start();
 
 // 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/background/recorder.ts b/src/background/recorder.ts
new file mode 100644 (file)
index 0000000..f47a228
--- /dev/null
@@ -0,0 +1,79 @@
+// eslint-disable-next-line @typescript-eslint/no-var-requires
+const portAudio = require('naudiodon');
+// eslint-disable-next-line @typescript-eslint/no-var-requires
+const { Writable } = require('stream');
+// eslint-disable-next-line @typescript-eslint/no-var-requires
+const { StringDecoder } = require('string_decoder');
+
+interface RecorderI {
+  start(): void;
+  stop(): string;
+}
+
+class StringWritable extends Writable {
+
+  constructor(options: {
+    defaultEncoding: string;
+  }) {
+    super(options);
+    this._decoder = new StringDecoder(options && options.defaultEncoding);
+    this.data = '';
+  }
+
+   _write(chunk: Buffer, encoding: string, callback: (error? : Error) => void) {
+     if (encoding === 'buffer') {
+       chunk = this._decoder.write(chunk);
+     }
+     this.data += chunk;
+     callback();
+   }
+
+   _final(callback: (error? : Error) => void) {
+     this.data += this._decoder.end();
+     callback();
+   }
+
+}
+
+export class Recorder implements RecorderI {
+  
+  private ia: any;
+  private micWritable: StringWritable;
+
+  constructor(options: {
+
+  }) { 
+    this.ia = new portAudio.AudioIO({ 
+      inOptions: options
+    });   
+    this.micWritable = new StringWritable({
+      defaultEncoding: 'binary'
+    });
+    this.start();
+  }
+
+  start(): void {
+    console.log('inititate recording');
+    this.ia.pipe(this.micWritable);
+    this.ia.start();
+    this.ia.pause();
+  }
+
+  record(): void {
+    this.ia.resume();
+  }
+
+  pause(): void {
+     this.ia.pause();
+  }
+
+  getData(): string {
+    return this.micWritable.data;
+  }
+
+  stop(): string {
+    this.ia.quit();
+    return this.micWritable.data;
+  }
+
+}
index 3312d27b3890a8a332f14e4673617f4c641530e7..c2c291bfab71a78daec58f90797a1b919b44f55a 100644 (file)
@@ -1,3 +1,4 @@
+
 const fs = require('fs');
 const speech = require('@google-cloud/speech');
 const portAudio = require('naudiodon');