Tone.js/Tone/source/oscillator/FatOscillator.test.ts
2019-10-31 15:43:16 -04:00

91 lines
2.4 KiB
TypeScript

import { expect } from "chai";
import { BasicTests } from "test/helper/Basic";
import { CompareToFile } from "test/helper/CompareToFile";
import { OscillatorTests } from "test/helper/OscillatorTests";
import { SourceTests } from "test/helper/SourceTests";
import { FatOscillator } from "./FatOscillator";
describe("FatOscillator", () => {
// run the common tests
BasicTests(FatOscillator);
SourceTests(FatOscillator);
OscillatorTests(FatOscillator);
it("matches a file", () => {
return CompareToFile(() => {
const osc = new FatOscillator().toDestination();
osc.start(0);
}, "fatOscillator.wav", 0.2);
});
context("Detuned Oscillators", () => {
it("can pass in parameters in the constructor", () => {
const fatOsc = new FatOscillator({
count: 4,
spread: 25,
});
expect(fatOsc.spread).to.be.equal(25);
expect(fatOsc.count).to.equal(4);
fatOsc.dispose();
});
it("can set the partials and the count", () => {
const fatOsc = new FatOscillator({
count: 3,
});
fatOsc.partials = [0, 2, 3, 4];
expect(fatOsc.partials).to.deep.equal([0, 2, 3, 4]);
expect(fatOsc.partialCount).to.equal(4);
expect(fatOsc.type).to.equal("custom");
fatOsc.count = 4;
expect(fatOsc.partials).to.deep.equal([0, 2, 3, 4]);
expect(fatOsc.type).to.equal("custom");
fatOsc.dispose();
});
it("can set the count after starting", () => {
const fatOsc = new FatOscillator({
count: 3,
});
fatOsc.start();
fatOsc.count = 4;
expect(fatOsc.count).to.equal(4);
fatOsc.dispose();
});
it("correctly distributes the detune spread", () => {
const fatOsc = new FatOscillator({
count: 2,
spread: 20,
});
// @ts-ignore
expect(fatOsc._oscillators.length).to.equal(2);
// @ts-ignore
expect(fatOsc._oscillators[0].detune.value).to.equal(-10);
// @ts-ignore
expect(fatOsc._oscillators[1].detune.value).to.equal(10);
fatOsc.dispose();
});
it("can get/set the baseType", () => {
const osc = new FatOscillator();
osc.type = "sine5";
expect(osc.baseType).to.equal("sine");
osc.baseType = "triangle";
expect(osc.type).to.equal("triangle5");
expect(osc.partialCount).to.equal(5);
osc.partialCount = 2;
expect(osc.type).to.equal("triangle2");
osc.baseType = "custom";
expect(osc.type).to.equal("custom");
osc.partials = [1, 2, 3];
expect(osc.baseType).to.equal("custom");
osc.baseType = "square";
expect(osc.type).to.equal("square");
osc.dispose();
});
});
});