mirror of
https://github.com/scratchfoundation/scratch-audio.git
synced 2024-12-22 05:53:43 -05:00
add VolumeEffect
This commit is contained in:
parent
8a75061a19
commit
1d9e530df2
1 changed files with 54 additions and 0 deletions
54
src/effects/VolumeEffect.js
Normal file
54
src/effects/VolumeEffect.js
Normal file
|
@ -0,0 +1,54 @@
|
|||
const Effect = require('./Effect');
|
||||
|
||||
/**
|
||||
* Affect the volume of an effect chain.
|
||||
*/
|
||||
class VolumeEffect extends Effect {
|
||||
/**
|
||||
* Default value to set the Effect to when constructed and when clear'ed.
|
||||
* @const {number}
|
||||
*/
|
||||
get DEFAULT_VALUE () {
|
||||
return 100;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the Effect.
|
||||
* Effects start out uninitialized. Then initialize when they are first set
|
||||
* with some value.
|
||||
* @throws {Error} throws when left unimplemented
|
||||
*/
|
||||
initialize () {
|
||||
this.inputNode = this.audioEngine.audioContext.createGain();
|
||||
this.outputNode = this.inputNode;
|
||||
|
||||
this.initialized = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the effects value.
|
||||
* @private
|
||||
* @param {number} value - new value to set effect to
|
||||
*/
|
||||
_set (value) {
|
||||
this.value = value;
|
||||
// A gain of 1 is normal. Scale down scratch's volume value. Apply the
|
||||
// change over a tiny period of time.
|
||||
this.outputNode.gain.setTargetAtTime(value / 100, 0, this.audioEngine.DECAY_TIME);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clean up and disconnect audio nodes.
|
||||
*/
|
||||
dispose () {
|
||||
this.outputNode.disconnect();
|
||||
|
||||
this.inputNode = null;
|
||||
this.outputNode = null;
|
||||
this.target = null;
|
||||
|
||||
this.initialized = false;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = VolumeEffect;
|
Loading…
Reference in a new issue