Tone.js/Tone/component/envelope/FrequencyEnvelope.test.ts
2019-11-17 13:09:19 -05:00

86 lines
2.3 KiB
TypeScript

import { FrequencyEnvelope } from "Tone/component/envelope/FrequencyEnvelope";
import { BasicTests } from "test/helper/Basic";
import { Offline } from "test/helper/Offline";
import { connectFrom, connectTo } from "test/helper/Connect";
import { Envelope } from "Tone/component/envelope/Envelope";
import { expect } from "chai";
describe("FrequencyEnvelope", () => {
BasicTests(FrequencyEnvelope);
context("FrequencyEnvelope", () => {
it("has an output connections", () => {
const freqEnv = new FrequencyEnvelope();
freqEnv.connect(connectTo());
connectFrom().connect(freqEnv);
freqEnv.dispose();
});
it("extends Envelope", () => {
const freqEnv = new FrequencyEnvelope();
expect(freqEnv).to.be.instanceOf(Envelope);
freqEnv.dispose();
});
it("can get and set values an Objects", () => {
const freqEnv = new FrequencyEnvelope();
const values = {
attack: 0,
release: "4n",
baseFrequency: 20,
octaves: 4
};
freqEnv.set(values);
expect(freqEnv.get()).to.contain.keys(Object.keys(values));
expect(freqEnv.baseFrequency).to.equal(20);
expect(freqEnv.octaves).to.equal(4);
freqEnv.dispose();
});
it("can take parameters as both an object and as arguments", () => {
const 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();
const 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.exponent = 2;
expect(env1.exponent).to.equal(2);
env1.dispose();
});
it("goes to the scaled range", async () => {
const e = {
attack: 0.01,
decay: 0.4,
sustain: 1
};
const buffer = await Offline(() => {
const freqEnv = new FrequencyEnvelope(e.attack, e.decay, e.sustain);
freqEnv.baseFrequency = 200;
freqEnv.octaves = 3;
freqEnv.attackCurve = "exponential";
freqEnv.toDestination();
freqEnv.triggerAttack(0);
}, 0.3);
buffer.forEach((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);
}
});
});
});
});