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.
--- /dev/null
+// 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;
+ }
+
+}