webdaw-modules
Version:
a set of modules for building a web-based DAW
77 lines (71 loc) • 1.97 kB
text/typescript
/**
* Used to calculate the position of the song when the user
* clicks somewhere in the score
*/
import { RepeatData } from "../musicxml/parser";
export const songPositionFromScore = (repeats: RepeatData[], barScore: number): { barSong: number } => {
if (repeats.length === 0) {
return { barSong: barScore };
}
// const hasRepeatedClone: { [index: number]: boolean } = {};
// let newBar = bar;
// let loop = true;
// let i = 0;
// while (loop && i < repeats.length) {
// const endBar = repeats[i][1];
// if (endBar > bar) {
// loop = false;
// } else {
// newBar += repeats[i][1] - repeats[i][0] + 1;
// hasRepeatedClone[i] = true;
// i++;
// }
// }
/*
for (let i = 0; i < repeats.length; i++) {
const repeat = repeats[i];
// console.log(bar, repeat[1]);
if (barScore > repeat[1]) {
hasRepeatedClone[i] = true;
}
}
let newBar = barScore;
for (let i = 0; i < repeats.length; i++) {
const repeat = repeats[i];
if (hasRepeatedClone[i] === true) {
newBar += repeat[1] - repeat[0] + 1;
}
}
*/
// console.log(newBar, hasRepeatedClone);
let newBar = barScore;
// console.log(repeats);
for (let i = 0; i < repeats.length; i++) {
const { start, end } = repeats[i];
const diffBar = end - (start - 1);
if (newBar > end) {
newBar += diffBar;
// console.log(barScore, newBar, start, end, diffBar);
}
}
return { barSong: newBar };
};
// export const songPositionFromScore = (repeats: number[][], bar: number): number => {
// if (repeats.length <= 1) {
// return bar;
// }
// let newBar = bar;
// let loop = true;
// let i = 0;
// while (loop && i < repeats.length) {
// const endBar = repeats[i][1];
// if (endBar > bar) {
// loop = false;
// } else {
// newBar += repeats[i][1] - repeats[i][0] + 1;
// i++;
// }
// }
// // console.log(newBar);
// return newBar;
// };