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(); }); });*/ }); }); });