Tone.js/test/source/Player.js

228 lines
5.4 KiB
JavaScript
Raw Normal View History

2015-08-21 21:03:48 +00:00
define(["helper/Basic", "Tone/source/Player", "helper/Offline", "helper/SourceTests", "Tone/core/Buffer"],
function (BasicTests, Player, Offline, SourceTests, Buffer) {
describe("Player", function(){
var buffer = new Buffer();
beforeEach(function(done){
buffer.load("./audio/sine.wav", function(){
done();
});
});
//run the common tests
BasicTests(Player, buffer);
SourceTests(Player, buffer);
context("Loading", function(){
it("loads a url which was passed in", function(done){
var player = new Player("./audio/sine.wav", function(){
player.dispose();
done();
});
});
it("loads a url using the load method", function(done){
var player = new Player();
player.load("./audio/sine.wav", function(){
expect(player._buffer).to.be.instanceof(Buffer);
done();
});
});
it("can be created with an options object", function(){
var player = new Player({
"url" : "./audio/sine.wav",
"loop" : true
});
player.dispose();
});
it("can autostart after loading", function(done){
var player = new Player({
"url" : "./audio/sine.wav",
"autostart" : true,
"onload" : function(){
setTimeout(function(){
expect(player.state).to.be.equal("started");
done();
}, 10);
}
});
});
});
context("Reverse", function(){
it("can be played in reverse", function(done){
var player;
var offline = new Offline();
var audioBuffer = buffer.get().getChannelData(0);
var lastSample = audioBuffer[audioBuffer.length - 1];
offline.before(function(dest){
player = new Player(buffer.get()).connect(dest);
player.reverse = true;
player.start(0);
});
offline.test(function(sample, time){
if (time === 0){
expect(sample).to.equal(lastSample);
}
});
offline.after(function(){
player.dispose();
buffer.reverse = false;
done();
});
offline.run();
});
});
context("Looping", function(){
it("can be set to loop", function(){
var player = new Player();
player.loop = true;
expect(player.loop).to.be.true;
player.dispose();
});
it("can set the loop points", function(){
var player = new Player();
player.loopStart = 0.4;
expect(player.loopStart).to.equal(0.4);
player.loopEnd = 0.5;
expect(player.loopEnd).to.equal(0.5);
player.setLoopPoints(0, 0.2);
expect(player.loopStart).to.equal(0);
expect(player.loopEnd).to.equal(0.2);
player.dispose();
});
});
context("Get/Set", function(){
it("can be set with an options object", function(){
var player = new Player();
expect(player.loop).to.be.false;
player.set({
"loop" : true,
"loopStart" : 0.4
});
expect(player.loop).to.be.true;
expect(player.loopStart).to.equal(0.4);
player.dispose();
});
it("can get an options object", function(){
var player = new Player({
"url" : "./audio/sine.wav",
"loopStart" : 0.2,
"loopEnd" : 0.3,
"loop" : true,
"reverse" : true
});
expect(player.get().loopStart).to.equal(0.2);
expect(player.get().loopEnd).to.equal(0.3);
expect(player.get().loop).to.be.true;
expect(player.get().reverse).to.be.true;
player.dispose();
});
it("can get/set the playbackRate", function(){
var player = new Player();
player.playbackRate = 0.5;
expect(player.playbackRate).to.equal(0.5);
player.dispose();
});
});
context("Start Scheduling", function(){
it("can be start with an offset", function(done){
var player;
var offline = new Offline(0.4, 1, true);
var audioBuffer = buffer.get().getChannelData(0);
var testSample = audioBuffer[buffer.secondsToSamples(0.1)];
offline.before(function(dest){
player = new Player(buffer.get());
player.connect(dest);
player.start(0, 0.1);
});
offline.test(function(sample, time){
if (time === 0){
expect(sample).to.equal(testSample);
}
});
offline.after(function(){
player.dispose();
done();
});
offline.run();
});
it("can be play for a specific duration", function(done){
var player;
var offline = new Offline(0.4, 1, true);
offline.before(function(dest){
player = new Player(buffer);
player.connect(dest);
player.start(0).stop(0.1);
});
offline.test(function(sample, time){
if (sample < 0.001 && time > 0.02){
expect(time).to.at.least(0.1);
}
});
offline.after(function(){
player.dispose();
done();
});
offline.run();
});
});
context("Synchronization", function(){
/*it("can sync the frequency to Transport", function(done){
var player;
Test.offlineTest(0.1, function(dest){
Transport.bpm.value = 120;
player = new Player(2);
player.frequency.connect(dest);
player.syncFrequency();
Transport.bpm.value = 240;
}, function(freq){
expect(freq).to.be.closeTo(4, 0.001);
}, function(){
player.dispose();
done();
});
});*/
/*it("can unsync the frequency to Transport", function(done){
var player;
Test.offlineTest(0.1, function(dest){
Transport.bpm.value = 120;
player = new Player(2);
player.frequency.connect(dest);
player.syncFrequency();
Transport.bpm.value = 240;
player.unsyncFrequency();
}, function(freq){
expect(freq).to.be.closeTo(2, 0.001);
}, function(){
player.dispose();
done();
});
});*/
});
});
});