diff --git a/parcel/lib/audio-manager.js b/parcel/lib/audio-manager.js index 4b0ada3..7b9608a 100644 --- a/parcel/lib/audio-manager.js +++ b/parcel/lib/audio-manager.js @@ -1,6 +1,6 @@ export default class AudioManager{ - static get BUFFER_SIZE(){ return 4096; } + static get BUFFER_SIZE(){ return 8192; } constructor(){ @@ -61,6 +61,8 @@ export default class AudioManager{ /* (7) Initialise coordinator to manage received */ this.stack = []; this.stack_size = 2; + this.fade_in = 0.1; + this.fade_out = 0.1; @@ -98,6 +100,8 @@ export default class AudioManager{ }.bind(this.dbg), this.dbg.interval*1000); + this.test = true; + } @@ -260,11 +264,30 @@ export default class AudioManager{ /* (5) Send buffer through websocket */ this.ws.send(buf16); - /* (6) Read input buffer */ - this.stack.length > 0 && this.stack.shift().start(this.ctx.currentTime); + /* (6) Pop too large stack */ + this.stack.length > this.stack_size && this.stack.pop(); + + /* (7) Read input buffer stack */ + if( this.stack.length > 0 ){ + + // 1. extract our nodes + let tmp = this.stack.shift(); + let source_node = tmp[0]; + let gain_node = tmp[1]; + + // 2. set default gain to fade-in + // ( this.test === true ) && gain_node.gain.setValueAtTime(0.1, this.ctx.currentTime); + // ( this.test === true ) && gain_node.gain.exponentialRampToValueAtTime(1, this.ctx.currentTime+AudioManager.CHUNK_DURATION*this.fade_in); + + // 3. set final gain to fadeout + // ( this.test === true ) && gain_node.gain.setValueAtTime(1, this.ctx.currentTime+AudioManager.CHUNK_DURATION*(1-this.fade_out)); + // ( this.test === true ) && gain_node.gain.exponentialRampToValueAtTime(0.1, this.ctx.currentTime+AudioManager.CHUNK_DURATION ); + + source_node.start(this.ctx.currentTime); + } /* (7) Pop stack if exceeded */ - this.stack.length > this.stack_size && this.stack.pop(); + @@ -300,7 +323,7 @@ export default class AudioManager{ gain.connect(this.master); /* (7) Push in buffer stack */ - this.stack.push(source); + this.stack.push([source, gain]); }