Tone.js/test/component/FrequencyEnvelope.js
2018-06-07 12:21:38 -04:00

80 lines
2.2 KiB
JavaScript

define(["Tone/component/FrequencyEnvelope", "helper/Basic", "helper/Offline", "helper/Test", "Tone/component/Envelope"],
function(FrequencyEnvelope, Basic, Offline, Test, Envelope){
describe("FrequencyEnvelope", function(){
Basic(FrequencyEnvelope);
context("FrequencyEnvelope", function(){
it("has an output connections", function(){
var env = new FrequencyEnvelope();
env.connect(Test);
env.dispose();
});
it("extends Envelope", function(){
var env = new FrequencyEnvelope();
expect(env).to.be.instanceOf(Envelope);
env.dispose();
});
it("can get and set values an Objects", function(){
var env = new FrequencyEnvelope();
var values = {
"attack" : 0,
"release" : "4n",
"baseFrequency" : 20,
"octaves" : 4
};
env.set(values);
expect(env.get()).to.contain.keys(Object.keys(values));
expect(env.baseFrequency).to.equal(20);
expect(env.octaves).to.equal(4);
env.dispose();
});
it("can take parameters as both an object and as arguments", function(){
var env0 = new FrequencyEnvelope({
"attack" : 0,
"decay" : 0.5,
"sustain" : 1,
"exponent" : 3
});
expect(env0.attack).to.equal(0);
expect(env0.decay).to.equal(0.5);
expect(env0.sustain).to.equal(1);
expect(env0.exponent).to.equal(3);
env0.dispose();
var env1 = new FrequencyEnvelope(0.1, 0.2, 0.3);
expect(env1.attack).to.equal(0.1);
expect(env1.decay).to.equal(0.2);
expect(env1.sustain).to.equal(0.3);
env1.dispose();
});
it("goes to the scaled range", function(){
var e = {
attack : 0.01,
decay : 0.4,
sustain : 1
};
return Offline(function(){
var env = new FrequencyEnvelope(e.attack, e.decay, e.sustain);
env.baseFrequency = 200;
env.octaves = 3;
env.attackCurve = "exponential";
env.toMaster();
env.triggerAttack(0);
}, 0.3).then(function(buffer){
buffer.forEach(function(sample, time){
if (time < e.attack){
expect(sample).to.be.within(200, 1600);
} else if (time < e.attack + e.decay){
expect(sample).to.be.closeTo(1600, 10);
}
});
});
});
});
});
});