Stop trying to read if no inputs are connected

If no inputs are connected, the `_read` function still keeps looping ( using `setImmediate(this._read.bind(this));` ) to wait for more samples to be available. This can cause the CPU usage to go up (60% on my 2014 MBP) even when no audio is being played.

This fix stops the looping if `this.inputs` array is empty and starts it again when new inputs are connected.
This commit is contained in:
Chinmay Pendharkar 2016-08-07 14:44:24 +08:00 committed by GitHub
parent 564d31654f
commit 72d7965521
1 changed files with 7 additions and 1 deletions

View File

@ -73,7 +73,9 @@ Mixer.prototype._read = function() {
this.push(mixedBuffer);
} else {
setImmediate(this._read.bind(this));
if (this.inputs.length){
setImmediate(this._read.bind(this));
}
}
};
@ -91,6 +93,10 @@ Mixer.prototype.input = function (args) {
input.on('finish', () =>{
this.inputs.splice(this.inputs.indexOf(input), 1);
});
if (this.inputs.length === 1){
setImmediate(this._read.bind(this));
}
return input;
};