From f48618394ee1daaa1214e41ba38ff518ea0e9c4a Mon Sep 17 00:00:00 2001 From: Nepomuk Seiler Date: Sat, 4 Feb 2017 21:11:58 +0100 Subject: [PATCH 1/2] [#25] Adding GainNode --- ts/Stream/StreamClient.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ts/Stream/StreamClient.ts b/ts/Stream/StreamClient.ts index bb86154..8237b4c 100644 --- a/ts/Stream/StreamClient.ts +++ b/ts/Stream/StreamClient.ts @@ -15,6 +15,7 @@ class StreamClient { private audioContext: AudioContext; private mediaStreamSource: MediaStreamAudioSourceNode; + private gainNode: GainNode; private userSpeechAnalyser: AnalyserNode; private recorder: Recorder; private resampleProcessor; @@ -175,7 +176,14 @@ class StreamClient { this.mediaStreamSource = this.audioContext.createMediaStreamSource(stream); this.onEvent(IStreamClient.EVENT.MSG_MEDIA_STREAM_CREATED, "Media stream created"); + + // create audio nodes + this.gainNode = this.audioContext.createGain(); this.userSpeechAnalyser = this.audioContext.createAnalyser(); + + // connect: input ~> gain ~> userSpeechAnalyser ~> output + this.mediaStreamSource.connect(this.gainNode); + this.gainNode.connect(this.userSpeechAnalyser); this.mediaStreamSource.connect(this.userSpeechAnalyser); this.recorder = new Recorder(this.mediaStreamSource); this.onEvent(IStreamClient.EVENT.MSG_INIT_RECORDER, "Recorder initialized"); From d3d9af1a4d8a4ab14a48cd9abee8ad15b41ff3df Mon Sep 17 00:00:00 2001 From: Nepomuk Seiler Date: Sun, 19 Feb 2017 12:50:51 +0100 Subject: [PATCH 2/2] Adding gain configuration to IStreamClientOptions --- ts/Interfaces.ts | 6 ++++++ ts/Stream/StreamClient.ts | 10 ++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/ts/Interfaces.ts b/ts/Interfaces.ts index aceffc6..11e7a10 100644 --- a/ts/Interfaces.ts +++ b/ts/Interfaces.ts @@ -55,6 +55,12 @@ export interface IStreamClientOptions { lang?: Constants.AVAILABLE_LANGUAGES; contentType?: string; readingInterval?: string; + /** + * Set the applied gain for the processed audio stream. + * + * @type {number} + */ + gain?: number; onOpen?: () => void; onClose?: () => void; onInit?: () => void; diff --git a/ts/Stream/StreamClient.ts b/ts/Stream/StreamClient.ts index 8237b4c..74d17aa 100644 --- a/ts/Stream/StreamClient.ts +++ b/ts/Stream/StreamClient.ts @@ -30,7 +30,7 @@ class StreamClient { private onOpen; private onClose; private onInit; private onStartListening; private onStopListening; private onResults; private onEvent; private onError; - constructor(config: IStreamClientOptions = {}) { + constructor(private config: IStreamClientOptions = {}) { Processors.bindProcessors(); @@ -178,7 +178,7 @@ class StreamClient { this.onEvent(IStreamClient.EVENT.MSG_MEDIA_STREAM_CREATED, "Media stream created"); // create audio nodes - this.gainNode = this.audioContext.createGain(); + this.gainNode = this.createGainNode(); this.userSpeechAnalyser = this.audioContext.createAnalyser(); // connect: input ~> gain ~> userSpeechAnalyser ~> output @@ -193,6 +193,12 @@ class StreamClient { } } + private createGainNode(): GainNode { + const gainNode = this.audioContext.createGain(); + gainNode.gain.value = this.config.gain || gainNode.gain.defaultValue; + return gainNode; + } + private openWebSocket() { if (!this.recorder) { this.onError(IStreamClient.ERROR.ERR_AUDIO, "Recorder undefined");