2016-03-04 21:00:05 +00:00
|
|
|
define(["Tone/component/LFO", "helper/Basic", "helper/Offline", "Test",
|
2016-04-18 06:18:36 +00:00
|
|
|
"helper/OutputAudio", "Tone/type/Type", "Tone/signal/Signal"],
|
2015-10-21 17:13:47 +00:00
|
|
|
function (LFO, Basic, Offline, Test, OutputAudio, Tone, Signal) {
|
2015-08-28 22:42:44 +00:00
|
|
|
describe("LFO", function(){
|
|
|
|
|
|
|
|
Basic(LFO);
|
|
|
|
|
2015-10-20 21:30:20 +00:00
|
|
|
context("API", function(){
|
|
|
|
it ("can get the current state", function(done){
|
|
|
|
var lfo = new LFO();
|
|
|
|
expect(lfo.state).to.equal("stopped");
|
|
|
|
lfo.start();
|
2016-03-04 21:00:05 +00:00
|
|
|
expect(lfo.state).to.equal("started");
|
|
|
|
lfo.dispose();
|
|
|
|
done();
|
2015-10-20 21:30:20 +00:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2015-08-28 22:42:44 +00:00
|
|
|
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();
|
|
|
|
});
|
|
|
|
|
2017-02-20 04:55:55 +00:00
|
|
|
it("outputs a signal", function(){
|
|
|
|
return Offline(function(){
|
|
|
|
var lfo = new LFO();
|
|
|
|
lfo.toMaster();
|
2015-08-28 22:42:44 +00:00
|
|
|
lfo.start();
|
2017-02-20 04:55:55 +00:00
|
|
|
}).then(function(buffer){
|
|
|
|
console.log(buffer);
|
2015-08-28 22:42:44 +00:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2017-02-20 04:55:55 +00:00
|
|
|
it("can be creates an oscillation in a specific range", function(){
|
|
|
|
return Offline(function(){
|
|
|
|
var lfo = new LFO(100, 10, 20).toMaster();
|
2015-08-28 22:42:44 +00:00
|
|
|
lfo.start();
|
2017-02-20 04:55:55 +00:00
|
|
|
}).then(function(buffer){
|
|
|
|
expect(buffer.min()).to.be.gte(10);
|
|
|
|
expect(buffer.max()).to.be.lte(20);
|
2015-08-28 22:42:44 +00:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2017-02-20 04:55:55 +00:00
|
|
|
it("can change the oscillation range", function(){
|
|
|
|
return Offline(function(){
|
|
|
|
var lfo = new LFO(100, 10, 20).toMaster();
|
2015-08-28 22:42:44 +00:00
|
|
|
lfo.start();
|
|
|
|
lfo.min = 15;
|
|
|
|
lfo.max = 18;
|
2017-02-20 04:55:55 +00:00
|
|
|
}).then(function(buffer){
|
|
|
|
expect(buffer.min()).to.be.gte(15);
|
|
|
|
expect(buffer.max()).to.be.lte(18);
|
2015-08-28 22:42:44 +00:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2017-02-20 04:55:55 +00:00
|
|
|
it("initially outputs a signal at the center of it's phase", function(){
|
|
|
|
return Offline(function(){
|
|
|
|
new LFO(100, 10, 20).toMaster();
|
|
|
|
}).then(function(buffer){
|
2017-02-20 19:07:02 +00:00
|
|
|
expect(buffer.value()).to.be.closeTo(15, 0.1);
|
2015-08-28 22:42:44 +00:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2017-02-20 04:55:55 +00:00
|
|
|
it("outputs a signal at the correct phase angle", function(){
|
|
|
|
return Offline(function(){
|
|
|
|
new LFO({
|
2015-08-28 22:42:44 +00:00
|
|
|
"phase" : 90,
|
|
|
|
"min" : 0
|
2017-02-20 04:55:55 +00:00
|
|
|
}).toMaster();
|
|
|
|
}).then(function(buffer){
|
2017-02-20 19:07:02 +00:00
|
|
|
expect(buffer.value()).to.be.closeTo(0, 0.1);
|
2015-08-28 22:42:44 +00:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2017-02-20 04:55:55 +00:00
|
|
|
it("outputs the right phase when setting a new phase", function(){
|
|
|
|
return Offline(function(){
|
|
|
|
var lfo = new LFO({
|
2015-08-28 22:42:44 +00:00
|
|
|
"phase" : 0,
|
|
|
|
"min" : -1,
|
|
|
|
"max" : 1
|
2017-02-20 04:55:55 +00:00
|
|
|
}).toMaster();
|
2015-08-28 22:42:44 +00:00
|
|
|
lfo.phase = 270;
|
2017-02-20 04:55:55 +00:00
|
|
|
}).then(function(buffer){
|
2017-02-20 19:07:02 +00:00
|
|
|
expect(buffer.value()).to.be.closeTo(1, 0.1);
|
2015-08-28 22:42:44 +00:00
|
|
|
});
|
|
|
|
});
|
2015-10-21 17:13:47 +00:00
|
|
|
|
2017-02-20 04:55:55 +00:00
|
|
|
it("can convert to other units", function(){
|
|
|
|
return Offline(function(){
|
|
|
|
var lfo = new LFO({
|
2015-10-21 17:13:47 +00:00
|
|
|
"units" : Tone.Type.Decibels,
|
|
|
|
"min" : -20,
|
|
|
|
"max" : 5,
|
|
|
|
"frequency" : 20
|
2017-02-20 04:55:55 +00:00
|
|
|
}).toMaster();
|
2015-10-21 17:13:47 +00:00
|
|
|
lfo.start();
|
2017-02-20 04:55:55 +00:00
|
|
|
}).then(function(buffer){
|
|
|
|
expect(buffer.min()).to.be.closeTo(0.099, 0.01);
|
|
|
|
expect(buffer.max()).to.be.closeTo(1.78, 0.01);
|
2015-10-21 17:13:47 +00:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2017-02-20 04:55:55 +00:00
|
|
|
it("can converts to the units of the connecting node", function(){
|
|
|
|
return Offline(function(){
|
|
|
|
var lfo = new LFO(20, -35, -10);
|
|
|
|
var signal = new Signal(0, Tone.Type.Decibels);
|
2015-10-21 17:13:47 +00:00
|
|
|
expect(lfo.units).to.equal(Tone.Type.Default);
|
2017-02-20 04:55:55 +00:00
|
|
|
lfo.toMaster();
|
2015-10-21 17:13:47 +00:00
|
|
|
lfo.connect(signal);
|
|
|
|
expect(lfo.units).to.equal(Tone.Type.Decibels);
|
|
|
|
lfo.start();
|
2017-02-20 04:55:55 +00:00
|
|
|
}).then(function(buffer){
|
|
|
|
expect(buffer.min()).to.be.closeTo(0.017, 0.01);
|
|
|
|
expect(buffer.max()).to.be.closeTo(0.31, 0.01);
|
2015-10-21 17:13:47 +00:00
|
|
|
});
|
|
|
|
});
|
2015-08-28 22:42:44 +00:00
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|