k-l-lambda's picture
updated node_modules
4cadbaf
const Node = require("./node.js");
const Navigator = require("./navigator.js");
const HEART_BEAT = 800; // in ms
const SIMULTANEOUS_INTERVAL = HEART_BEAT * 0.24;
const normalizeInterval = interval => Math.tanh(interval / SIMULTANEOUS_INTERVAL);
// greater softIndexFactor make 'harder' soft index
const makeNoteSoftIndex = function (notes, index, {softIndexFactor = 1} = {}) {
index = Number(index);
const note = notes[index];
// make soft index
if (index > 0) {
const lastNote = notes[index - 1];
console.assert(note.start != null, "note.start is null", note);
console.assert(lastNote.start != null, "lastNote.start is null", lastNote);
note.deltaSi = normalizeInterval((note.start - lastNote.start) * softIndexFactor);
note.softIndex = lastNote.softIndex + note.deltaSi;
console.assert(!Number.isNaN(note.deltaSi), "note.deltaSi is NaN.", note.start, lastNote.start);
}
else {
note.softIndex = 0;
note.deltaSi = 0;
}
};
const makeMatchNodes = function (note, criterion, zeroNode = Node.zero()) {
note.matches = [];
const targetList = criterion.pitchMap[note.pitch];
if (targetList) {
for (const targetNote of targetList) {
const node = new Node(note, targetNote);
if (zeroNode)
node.evaluatePrev(zeroNode);
note.matches.push(node);
}
}
};
const genNotationContext = function (notation, {softIndexFactor = 1} = {}) {
for (let i = 0; i < notation.notes.length; ++i)
makeNoteSoftIndex(notation.notes, i, {softIndexFactor});
};
const runNavigation = async function(criterion, sample, onStep) {
const navigator = new Navigator(criterion, sample);
navigator.resetCursor(-1);
for (let i = 0; i < sample.notes.length; ++i) {
navigator.step(i);
const next = await (onStep && onStep(i, navigator));
if (next === Symbol.for("end")) {
console.log("Navigation interrupted.");
return;
}
}
//console.log("Navigation accomplished.");
return navigator;
};
module.exports = {
normalizeInterval,
makeNoteSoftIndex,
makeMatchNodes,
genNotationContext,
runNavigation,
Navigator,
Node,
};