add recorder file

This commit is contained in:
riqo 2021-02-03 18:01:48 -06:00
commit 1a328b41b9
3 changed files with 84 additions and 13 deletions

View 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.

View file

@ -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;
}
}

View file

@ -1,3 +1,4 @@
const fs = require('fs');
const speech = require('@google-cloud/speech');
const portAudio = require('naudiodon');