|
@@ -0,0 +1,102 @@
|
|
|
+import {TestUtils} from "../../Util/TestUtils";
|
|
|
+import {OpenSheetMusicDisplay} from "../../../src/OpenSheetMusicDisplay/OpenSheetMusicDisplay";
|
|
|
+import { LinearTimingSource } from "../../../src/Playback/TimingSources/LinearTimingSource";
|
|
|
+import { PlaybackManager } from "../../../src/Playback/PlaybackManager";
|
|
|
+import { BasicAudioPlayer } from "../../../src/Playback/BasicAudioPlayer";
|
|
|
+
|
|
|
+describe("PlaybackManager", () => {
|
|
|
+ const div: HTMLElement = document.createElement("div");
|
|
|
+ const osmd: OpenSheetMusicDisplay =
|
|
|
+ TestUtils.createOpenSheetMusicDisplay(div);
|
|
|
+
|
|
|
+ // for (const score of TestUtils.XmlTestSet) {
|
|
|
+ // testFile(score);
|
|
|
+ // }
|
|
|
+
|
|
|
+ // use it.only to test only this.
|
|
|
+ // TODO if just using it() (all tests), this can still crash the browser somehow.
|
|
|
+ it.skip("getSheetDuration total", (done: Mocha.Done) => {
|
|
|
+ //let currentFileIndex: number = 0;
|
|
|
+ loadNextFile(0, done);
|
|
|
+ }).timeout(10000);
|
|
|
+
|
|
|
+ function loadNextFile(fileIndex: number, done: Mocha.Done): void {
|
|
|
+ if (fileIndex > TestUtils.XmlTestSet.length - 1) {
|
|
|
+ done();
|
|
|
+ }
|
|
|
+ const score: Document = TestUtils.getScore(TestUtils.XmlTestSet[fileIndex]);
|
|
|
+ try {
|
|
|
+ osmd.load(score).then(
|
|
|
+ (result) => {
|
|
|
+ const timingSource: LinearTimingSource = new LinearTimingSource();
|
|
|
+ timingSource.Settings = osmd.Sheet.SheetPlaybackSetting;
|
|
|
+ timingSource.logEnabled = false;
|
|
|
+ const playbackManager: PlaybackManager = new PlaybackManager(
|
|
|
+ timingSource, undefined, new BasicAudioPlayer(), undefined);
|
|
|
+ osmd.PlaybackManager = playbackManager;
|
|
|
+ playbackManager.initialize(osmd.Sheet.MusicPartManager);
|
|
|
+ const timeWithoutRepeats: number = playbackManager.getSheetDurationInMs(false);
|
|
|
+ const timeWithRepeats: number = playbackManager.getSheetDurationInMsWithRepeats();
|
|
|
+ console.log("time with repeats: " + timeWithRepeats.toFixed(2) + " for " + osmd.Sheet.Title.text);
|
|
|
+ console.log("time without repeats: " + timeWithoutRepeats.toFixed(2));
|
|
|
+ chai.expect(timeWithRepeats >= timeWithoutRepeats).to.equal(true);
|
|
|
+ loadNextFile(fileIndex + 1, done);
|
|
|
+ },
|
|
|
+ (err) => {
|
|
|
+ // couldn't read file
|
|
|
+ if (fileIndex < TestUtils.XmlTestSet.length - 1) {
|
|
|
+ loadNextFile(fileIndex + 1, done);
|
|
|
+ } else {
|
|
|
+ done();
|
|
|
+ // not sure why this if/else block is necessary, but otherwise it infinite loops when a file couldn't be loaded.
|
|
|
+ // somehow the catch block doesn't seem to get executed.
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } catch (err) {
|
|
|
+ console.log("error: " + err);
|
|
|
+ loadNextFile(fileIndex + 1, done);
|
|
|
+ // we need to catch the error and call the next file,
|
|
|
+ // otherwise done() never gets called and the test hangs
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // this variation of doing the test is similar to the loop in Xml_Test.ts,
|
|
|
+ // but seems to crash the browser because the for loop calls too many tests at once that are too demanding.
|
|
|
+ // (Xml_Test does the same, but it looks like the test is simple enough to not overload the browser)
|
|
|
+ // function testFile(scoreName: string): void {
|
|
|
+ // it("getSheetDuration: " + scoreName, (done: Mocha.Done) => {
|
|
|
+ // //let timingSource: LinearTimingSource; // somehow this will be undefined in load().then()
|
|
|
+ // //let playbackManager: PlaybackManager;
|
|
|
+
|
|
|
+ // if (false) {
|
|
|
+ // initialize(osmd, undefined, undefined);
|
|
|
+ // }
|
|
|
+ // const score: Document = TestUtils.getScore(scoreName);
|
|
|
+ // osmd.load(score).then(() => {
|
|
|
+ // const timingSource: LinearTimingSource = new LinearTimingSource();
|
|
|
+ // timingSource.Settings = osmd.Sheet.SheetPlaybackSetting;
|
|
|
+ // timingSource.logEnabled = false;
|
|
|
+ // const playbackManager = new PlaybackManager(timingSource, undefined, new BasicAudioPlayer(), undefined);
|
|
|
+ // osmd.PlaybackManager = playbackManager;
|
|
|
+ // playbackManager.initialize(osmd.Sheet.MusicPartManager);
|
|
|
+ // const timeWithoutRepeats: number = playbackManager.getSheetDurationInMs(false);
|
|
|
+ // const timeWithRepeats: number = playbackManager.getSheetDurationInMsWithRepeats();
|
|
|
+ // console.log("time with repeats: " + timeWithRepeats + " for " + osmd.Sheet.Title.text);
|
|
|
+ // console.log("time without repeats: " + timeWithoutRepeats);
|
|
|
+ // chai.expect(timeWithRepeats >= timeWithoutRepeats).to.equal(true);
|
|
|
+ // done();
|
|
|
+ // });
|
|
|
+ // }).timeout(10000);
|
|
|
+ // }
|
|
|
+
|
|
|
+ // function initialize(osmd, timingSource, playbackManager) {
|
|
|
+ // timingSource = new LinearTimingSource();
|
|
|
+ // playbackManager = new PlaybackManager(timingSource, undefined, new BasicAudioPlayer(), undefined);
|
|
|
+ // // timingSource.reset();
|
|
|
+ // // timingSource.pause();
|
|
|
+ // //playbackManager.removeListener(osmd.cursor); // only necessary if no duplicate checks in addListener
|
|
|
+ // // playbackManager.addListener(osmd.cursor);
|
|
|
+ // playbackManager.reset();
|
|
|
+ // osmd.PlaybackManager = playbackManager;
|
|
|
+ // }
|
|
|
+});
|