mirror of
https://github.com/Tonejs/Tone.js
synced 2024-11-16 08:38:00 +00:00
217 lines
No EOL
5.1 KiB
JavaScript
217 lines
No EOL
5.1 KiB
JavaScript
define(["Tone/component/LFO", "helper/Basic", "helper/Offline", "Test", "helper/OutputAudio", "Tone/core/Type", "Tone/signal/Signal"],
|
|
function (LFO, Basic, Offline, Test, OutputAudio, Tone, Signal) {
|
|
describe("LFO", function(){
|
|
|
|
Basic(LFO);
|
|
|
|
context("API", function(){
|
|
it ("can get the current state", function(done){
|
|
var lfo = new LFO();
|
|
expect(lfo.state).to.equal("stopped");
|
|
lfo.start();
|
|
setTimeout(function(){
|
|
expect(lfo.state).to.equal("started");
|
|
lfo.dispose();
|
|
done();
|
|
}, 100);
|
|
});
|
|
});
|
|
|
|
context("Low Oscillations", function(){
|
|
|
|
it("handles output connections", function(){
|
|
var lfo = new LFO();
|
|
lfo.connect(Test);
|
|
lfo.dispose();
|
|
});
|
|
|
|
it("can be started and stopped", function(){
|
|
var lfo = new LFO();
|
|
lfo.start();
|
|
lfo.stop();
|
|
lfo.dispose();
|
|
});
|
|
|
|
it("can be constructed with an object", function(){
|
|
var lfo = new LFO({
|
|
"type" : "triangle2",
|
|
"frequency" : 0.3
|
|
});
|
|
expect(lfo.type).to.equal("triangle2");
|
|
expect(lfo.frequency.value).to.be.closeTo(0.3, 0.001);
|
|
lfo.dispose();
|
|
});
|
|
|
|
it("handles getters/setters as objects", function(){
|
|
var lfo = new LFO();
|
|
var values = {
|
|
"type" : "square",
|
|
"min" : -1,
|
|
"max" : 2,
|
|
"phase" : 180,
|
|
"frequency" : "8n",
|
|
};
|
|
lfo.set(values);
|
|
expect(lfo.get()).to.contain.keys(Object.keys(values));
|
|
expect(lfo.type).to.equal(values.type);
|
|
expect(lfo.min).to.equal(values.min);
|
|
expect(lfo.max).to.equal(values.max);
|
|
expect(lfo.phase).to.equal(values.phase);
|
|
lfo.dispose();
|
|
});
|
|
|
|
it("outputs a signal", function(done){
|
|
var lfo;
|
|
OutputAudio(function(dest){
|
|
lfo = new LFO().connect(dest);
|
|
lfo.start();
|
|
}, function(){
|
|
lfo.dispose();
|
|
done();
|
|
});
|
|
});
|
|
|
|
it("can be creates an oscillation in a specific range", function(done){
|
|
var lfo;
|
|
var offline = new Offline(0.1);
|
|
offline.before(function(dest){
|
|
lfo = new LFO(100, 10, 20);
|
|
lfo.connect(dest);
|
|
lfo.start();
|
|
});
|
|
offline.test(function(sample){
|
|
expect(sample).to.be.within(10, 20);
|
|
});
|
|
offline.after(function(){
|
|
lfo.dispose();
|
|
done();
|
|
});
|
|
offline.run();
|
|
});
|
|
|
|
it("can change the oscillation range", function(done){
|
|
var lfo;
|
|
var offline = new Offline(0.1);
|
|
offline.before(function(dest){
|
|
lfo = new LFO(100, 10, 20);
|
|
lfo.connect(dest);
|
|
lfo.start();
|
|
lfo.min = 15;
|
|
lfo.max = 18;
|
|
});
|
|
offline.test(function(sample){
|
|
expect(sample).to.be.within(15, 18);
|
|
});
|
|
offline.after(function(){
|
|
lfo.dispose();
|
|
done();
|
|
});
|
|
offline.run();
|
|
});
|
|
|
|
it("initially outputs a signal at the center of it's phase", function(done){
|
|
var lfo;
|
|
var offline = new Offline(0.1);
|
|
offline.before(function(dest){
|
|
lfo = new LFO(100, 10, 20);
|
|
lfo.connect(dest);
|
|
});
|
|
offline.test(function(sample){
|
|
expect(sample).to.be.closeTo(15, 0.01);
|
|
});
|
|
offline.after(function(){
|
|
lfo.dispose();
|
|
done();
|
|
});
|
|
offline.run();
|
|
});
|
|
|
|
it("outputs a signal at the correct phase angle", function(done){
|
|
var lfo;
|
|
var offline = new Offline(0.1);
|
|
offline.before(function(dest){
|
|
lfo = new LFO({
|
|
"phase" : 90,
|
|
"min" : 0
|
|
});
|
|
lfo.connect(dest);
|
|
});
|
|
offline.test(function(sample){
|
|
expect(sample).to.be.closeTo(0, 0.01);
|
|
});
|
|
offline.after(function(){
|
|
lfo.dispose();
|
|
done();
|
|
});
|
|
offline.run();
|
|
});
|
|
|
|
it("outputs the right phase when setting a new phase", function(done){
|
|
var lfo;
|
|
var offline = new Offline(0.1);
|
|
offline.before(function(dest){
|
|
lfo = new LFO({
|
|
"phase" : 0,
|
|
"min" : -1,
|
|
"max" : 1
|
|
});
|
|
lfo.connect(dest);
|
|
lfo.phase = 270;
|
|
});
|
|
offline.test(function(sample){
|
|
expect(sample).to.be.closeTo(1, 0.01);
|
|
});
|
|
offline.after(function(){
|
|
lfo.dispose();
|
|
done();
|
|
});
|
|
offline.run();
|
|
});
|
|
|
|
it("can convert to other units", function(done){
|
|
var lfo;
|
|
var offline = new Offline(0.1);
|
|
offline.before(function(dest){
|
|
lfo = new LFO({
|
|
"units" : Tone.Type.Decibels,
|
|
"min" : -20,
|
|
"max" : 5,
|
|
"frequency" : 20
|
|
});
|
|
lfo.connect(dest);
|
|
lfo.start();
|
|
});
|
|
offline.test(function(sample){
|
|
expect(sample).to.be.within(lfo.dbToGain(-20) - 0.01, lfo.dbToGain(5) + 0.01);
|
|
});
|
|
offline.after(function(){
|
|
lfo.dispose();
|
|
done();
|
|
});
|
|
offline.run();
|
|
});
|
|
|
|
it("can converts to the units of the connecting node", function(done){
|
|
var lfo, signal;
|
|
var offline = new Offline(0.1);
|
|
offline.before(function(dest){
|
|
lfo = new LFO(20, -35, -10);
|
|
signal = new Signal(0, Tone.Type.Decibels);
|
|
expect(lfo.units).to.equal(Tone.Type.Default);
|
|
lfo.connect(dest);
|
|
lfo.connect(signal);
|
|
expect(lfo.units).to.equal(Tone.Type.Decibels);
|
|
lfo.start();
|
|
});
|
|
offline.test(function(sample){
|
|
expect(sample).to.be.within(lfo.dbToGain(-35) - 0.01, lfo.dbToGain(-10) + 0.01);
|
|
});
|
|
offline.after(function(){
|
|
lfo.dispose();
|
|
done();
|
|
});
|
|
offline.run();
|
|
});
|
|
});
|
|
});
|
|
}); |