mirror of
https://github.com/Tonejs/Tone.js
synced 2024-11-16 08:38:00 +00:00
163 lines
No EOL
3.9 KiB
JavaScript
163 lines
No EOL
3.9 KiB
JavaScript
define(["helper/Basic", "Tone/source/Oscillator", "helper/Offline", "helper/SourceTests", "helper/OscillatorTests"],
|
|
function (BasicTests, Oscillator, Offline, SourceTests, OscillatorTests) {
|
|
|
|
describe("Oscillator", function(){
|
|
|
|
//run the common tests
|
|
BasicTests(Oscillator);
|
|
SourceTests(Oscillator);
|
|
OscillatorTests(Oscillator);
|
|
|
|
context("Get/Set", function(){
|
|
|
|
it("can be set with an options object", function(){
|
|
var osc = new Oscillator();
|
|
osc.set({
|
|
"frequency" : 231,
|
|
"detune" : -21,
|
|
"type" : "square"
|
|
});
|
|
expect(osc.frequency.value).to.equal(231);
|
|
expect(osc.detune.value).to.equal(-21);
|
|
expect(osc.type).to.equal("square");
|
|
osc.dispose();
|
|
});
|
|
|
|
it("can be get the values as an object", function(){
|
|
var osc = new Oscillator(450, "square");
|
|
expect(osc.get().frequency).to.equal(450);
|
|
expect(osc.get().type).to.equal("square");
|
|
osc.dispose();
|
|
});
|
|
|
|
|
|
});
|
|
|
|
context("Phase Rotation", function(){
|
|
it ("can change the phase to 90", function(done){
|
|
var instance;
|
|
var offline = new Offline(1);
|
|
offline.before(function(dest){
|
|
instance = new Oscillator({
|
|
"phase" : 90,
|
|
"frequency" : 1
|
|
});
|
|
instance.connect(dest);
|
|
instance.start(0);
|
|
});
|
|
offline.test(function(sample, time){
|
|
if (time < 0.25){
|
|
expect(sample).to.be.within(-1, 0);
|
|
} else if (time < 0.5){
|
|
expect(sample).to.be.within(0, 1);
|
|
}
|
|
});
|
|
offline.after(function(){
|
|
instance.dispose();
|
|
done();
|
|
});
|
|
offline.run();
|
|
});
|
|
|
|
it ("can change the phase to -90", function(done){
|
|
var instance;
|
|
var offline = new Offline(1);
|
|
offline.before(function(dest){
|
|
instance = new Oscillator({
|
|
"phase" : 270,
|
|
"frequency" : 1
|
|
});
|
|
instance.connect(dest);
|
|
instance.start(0);
|
|
});
|
|
offline.test(function(sample, time){
|
|
if (time < 0.25){
|
|
expect(sample).to.be.within(0, 1);
|
|
} else if (time < 0.5){
|
|
expect(sample).to.be.within(-1, 0);
|
|
}
|
|
});
|
|
offline.after(function(){
|
|
instance.dispose();
|
|
done();
|
|
});
|
|
offline.run();
|
|
});
|
|
|
|
});
|
|
|
|
context("Type", function(){
|
|
|
|
it ("can get and set the type", function(){
|
|
var osc = new Oscillator({
|
|
"type" : "sawtooth",
|
|
});
|
|
expect(osc.type).to.equal("sawtooth");
|
|
osc.dispose();
|
|
});
|
|
|
|
it ("handles 4 basic types", function(){
|
|
var osc = new Oscillator();
|
|
var types = ["triangle", "sawtooth", "sine", "square"];
|
|
for (var i = 0; i < types.length; i++){
|
|
osc.type = types[i];
|
|
expect(osc.type).to.equal(types[i]);
|
|
}
|
|
osc.dispose();
|
|
});
|
|
|
|
it ("throws an error if invalid type is set", function(){
|
|
var osc = new Oscillator();
|
|
expect(function(){
|
|
osc.type = "invalid";
|
|
}).to.throw(Error);
|
|
osc.dispose();
|
|
});
|
|
|
|
it ("can set extended types", function(){
|
|
var osc = new Oscillator();
|
|
osc.type = "sine5";
|
|
expect(osc.type).to.equal("sine5");
|
|
osc.type = "triangle2";
|
|
expect(osc.type).to.equal("triangle2");
|
|
osc.dispose();
|
|
});
|
|
});
|
|
|
|
context("Synchronization", function(){
|
|
/*it("can sync the frequency to Transport", function(done){
|
|
var osc;
|
|
Test.offlineTest(0.1, function(dest){
|
|
Transport.bpm.value = 120;
|
|
osc = new Oscillator(2);
|
|
osc.frequency.connect(dest);
|
|
osc.syncFrequency();
|
|
Transport.bpm.value = 240;
|
|
}, function(freq){
|
|
expect(freq).to.be.closeTo(4, 0.001);
|
|
}, function(){
|
|
osc.dispose();
|
|
done();
|
|
});
|
|
});*/
|
|
|
|
/*it("can unsync the frequency to Transport", function(done){
|
|
var osc;
|
|
Test.offlineTest(0.1, function(dest){
|
|
Transport.bpm.value = 120;
|
|
osc = new Oscillator(2);
|
|
osc.frequency.connect(dest);
|
|
osc.syncFrequency();
|
|
Transport.bpm.value = 240;
|
|
osc.unsyncFrequency();
|
|
}, function(freq){
|
|
expect(freq).to.be.closeTo(2, 0.001);
|
|
}, function(){
|
|
osc.dispose();
|
|
done();
|
|
});
|
|
});*/
|
|
});
|
|
|
|
});
|
|
}); |