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

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