UNPKG

webdaw-modules

Version:

a set of modules for building a web-based DAW

108 lines 4.25 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.mapMIDINoteIdToGraphicalNotePerTrack = void 0; exports.mapMIDINoteIdToGraphicalNotePerTrack = function (graphicalNotesPerBarPerTrack, repeats, notes) { var notesPerTrack = {}; var trackIds = []; notes.forEach(function (note) { var trackId = note.noteOn.trackId; if (trackId !== undefined) { if (typeof notesPerTrack[trackId] === "undefined") { notesPerTrack[trackId] = []; trackIds.push(trackId); } notesPerTrack[trackId].push(note); } }); var tmp = []; trackIds.forEach(function (id) { tmp.push(notesPerTrack[id]); }); // console.log(tmp); // console.log(graphicalNotesPerBarPerTrack); var numMIDITracks = tmp.length; var numGraphicalTracks = graphicalNotesPerBarPerTrack.length; var mappings = []; // console.log(numMIDITracks, numGraphicalTracks); for (var i = 0; i < numGraphicalTracks; i++) { for (var j = 0; j < numMIDITracks; j++) { mappings.push(getMappingPerTrack(graphicalNotesPerBarPerTrack[i], tmp[j], repeats)); } } mappings.sort(function (a, b) { return b.score - a.score; }); // console.log(mappings); return mappings; }; var getMappingPerTrack = function (graphicalNotes, midiNotes, repeats) { var barIndex = -1; var barOffset = 1; var repeatIndex = 0; var numMatch = 0; var hasRepeated = {}; var numBars = graphicalNotes.length; // const numNotes = graphicalNotes.reduce((acc, val) => { // acc += val.length; // return acc; // }, 0); var numNotes = midiNotes.length; // console.log(numNotes); var midiToGraphical = {}; var graphicalToMidi = {}; var _loop_1 = function () { barIndex++; // console.log(barIndex, repeatIndex, hasRepeated[repeatIndex], repeats[repeatIndex][1]); if (repeats.length && barIndex === repeats[repeatIndex].end) { if (hasRepeated[repeatIndex] !== true) { barIndex = repeats[repeatIndex].start - 1; // console.log('REPEAT START', barIndex) hasRepeated[repeatIndex] = true; barOffset += repeats[repeatIndex].end - repeats[repeatIndex].start + 1; // ticksOffset += (repeats[repeatIndex][1] - repeats[repeatIndex][0]) * song.numerator * ppq; } else { // console.log('REPEAT END', barIndex, repeatIndex); repeatIndex++; if (repeatIndex === repeats.length || barIndex === numBars) { return "break"; } } } else { // console.log("CONTINUE", barIndex, numBars, repeats); if (barIndex === numBars) { return "break"; } } try { var filteredMidi_1 = midiNotes.filter(function (e) { return e.noteOn.bar === barIndex + barOffset; }); graphicalNotes[barIndex].forEach(function (bd) { var element = bd.element, noteNumber = bd.noteNumber, bar = bd.bar, parentMusicSystem = bd.parentMusicSystem; for (var j = 0; j < filteredMidi_1.length; j++) { var note = filteredMidi_1[j]; if (!midiToGraphical[note.id] && note.noteOn.bar == bar + barOffset - 1 && note.noteOn.noteNumber == noteNumber) { numMatch += 1; midiToGraphical[note.id] = { element: element, musicSystem: parentMusicSystem }; graphicalToMidi[element.id] = note; // filtered.splice(j, 1); break; } } }); } catch (e) { return "break"; } }; // console.log(graphicalNotes); while (true) { var state_1 = _loop_1(); if (state_1 === "break") break; } return { midiToGraphical: midiToGraphical, graphicalToMidi: graphicalToMidi, score: numMatch / numNotes, }; }; //# sourceMappingURL=mapMIDINoteIdToGraphicalNotePerTrack.js.map