Spaces:
Sleeping
Sleeping
{"remainingRequest":"/home/camus/work/lotus/node_modules/vue-loader/lib/index.js??vue-loader-options!/home/camus/work/lotus/app/components/notations-matcher.vue?vue&type=script&lang=js","dependencies":[{"path":"/home/camus/work/lotus/app/components/notations-matcher.vue","mtime":1732184618437},{"path":"/home/camus/work/lotus/node_modules/cache-loader/dist/cjs.js","mtime":1719800821084},{"path":"/home/camus/work/lotus/node_modules/thread-loader/dist/cjs.js","mtime":1719800821095},{"path":"/home/camus/work/lotus/node_modules/babel-loader/lib/index.js","mtime":1727163989637},{"path":"/home/camus/work/lotus/node_modules/cache-loader/dist/cjs.js","mtime":1719800821084},{"path":"/home/camus/work/lotus/node_modules/vue-loader/lib/index.js","mtime":1719800840033}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:CglpbXBvcnQge1N2Z1BpYW5vUm9sbH0gZnJvbSAiQGstbC1sYW1iZGEvbXVzaWMtd2lkZ2V0cyI7CgoJaW1wb3J0IHBpY2sgZnJvbSAiLi4vLi4vaW5jL3BpY2siOwoKCgoJY29uc3QgY29weU5vdGF0aW9uID0gbm90YXRpb24gPT4gKHsKCQlub3Rlczogbm90YXRpb24ubm90ZXMubWFwKG5vdGUgPT4gcGljayhub3RlLCBbInN0YXJ0VGljayIsICJlbmRUaWNrIiwgInNvZnRJbmRleCIsICJkdXJhdGlvbiIsICJjbGFzc2VzIiwgInBpdGNoIiwgImluZGV4IiwgImlkIl0pKSwKCX0pOwoKCgoJZXhwb3J0IGRlZmF1bHQgewoJCW5hbWU6ICJub3RhdGlvbnMtbWF0Y2hlciIsCgoKCQlwcm9wczogewoJCQljcml0ZXJpb246IE9iamVjdCwKCQkJc2FtcGxlOiBPYmplY3QsCgkJCXBhdGg6IEFycmF5LAoJCQlzb2Z0SW5kZXhBc1g6IHsKCQkJCXR5cGU6IEJvb2xlYW4sCgkJCQlkZWZhdWx0OiBmYWxzZSwKCQkJfSwKCQkJdGltZUZhY3RvckM6IHsKCQkJCXR5cGU6IE51bWJlciwKCQkJCWRlZmF1bHQ6IDEsCgkJCX0sCgkJfSwKCgoJCWNvbXBvbmVudHM6IHsKCQkJUGluYW9Sb2xsOiBTdmdQaWFub1JvbGwsCgkJfSwKCgoJCWRhdGEgKCkgewoJCQlyZXR1cm4gewoJCQkJdGltZVNjYWxlOiAxZS0zLAoJCQkJcG9zaXRpb25DOiB7eDogMCwgeTogOTB9LAoJCQkJcG9zaXRpb25TOiB7eDogMCwgeTogMTYwfSwKCQkJfTsKCQl9LAoKCgkJY29tcHV0ZWQ6IHsKCQkJbGlua3MgKCkgewoJCQkJcmV0dXJuIHRoaXMucGF0aCAmJiB0aGlzLnBhdGgubWFwKChjaSwgc2kpID0+ICh7Y2ksIHNpfSkpLmZpbHRlcigoe2NpfSkgPT4gY2kgPj0gMCkubWFwKCh7Y2ksIHNpfSkgPT4gKHsKCQkJCQljOiB0aGlzLmlubmVyQ3JpdGVyaW9uLm5vdGVzW2NpXSwKCQkJCQlzOiB0aGlzLmlubmVyU2FtcGxlLm5vdGVzW3NpXSwKCQkJCX0pKTsKCQkJfSwKCgoJCQlsaW5rSW5kaWNlcyAoKSB7CgkJCQlyZXR1cm4gdGhpcy5wYXRoICYmIHRoaXMucGF0aC5tYXAoKGMsIHMpID0+ICh7Yywgc30pKTsKCQkJfSwKCgoJCQl3aWR0aCAoKSB7CgkJCQljb25zdCBsYXN0QyA9IHRoaXMuaW5uZXJDcml0ZXJpb24gJiYgdGhpcy5pbm5lckNyaXRlcmlvbi5ub3Rlc1t0aGlzLmlubmVyQ3JpdGVyaW9uLm5vdGVzLmxlbmd0aCAtIDFdOwoJCQkJY29uc3QgbGFzdFMgPSB0aGlzLmlubmVyU2FtcGxlICYmIHRoaXMuaW5uZXJTYW1wbGUubm90ZXNbdGhpcy5pbm5lclNhbXBsZS5ub3Rlcy5sZW5ndGggLSAxXTsKCgkJCQljb25zdCBjZHVyYXRpb24gPSBsYXN0QyA/IChsYXN0Qy5zdGFydCArIGxhc3RDLmR1cmF0aW9uKSA6IDA7CgkJCQljb25zdCBzZHVyYXRpb24gPSBsYXN0UyA/IChsYXN0Uy5zdGFydCArIGxhc3RTLmR1cmF0aW9uKSA6IDA7CgoJCQkJcmV0dXJuIE1hdGgubWF4KGNkdXJhdGlvbiwgc2R1cmF0aW9uLCAxKSAqIHRoaXMudGltZVNjYWxlOwoJCQl9LAoKCgkJCWlubmVyQ3JpdGVyaW9uICgpIHsKCQkJCWlmICghdGhpcy5jcml0ZXJpb24pCgkJCQkJcmV0dXJuIG51bGw7CgoJCQkJY29uc3QgY29weSA9IGNvcHlOb3RhdGlvbih0aGlzLmNyaXRlcmlvbik7CgkJCQl0aGlzLnNhdGlzZnlOb3RhdGlvbihjb3B5LCAiYyIpOwoKCQkJCXJldHVybiBjb3B5OwoJCQl9LAoKCgkJCWlubmVyU2FtcGxlICgpIHsKCQkJCWlmICghdGhpcy5zYW1wbGUpCgkJCQkJcmV0dXJuIG51bGw7CgoJCQkJY29uc3QgY29weSA9IGNvcHlOb3RhdGlvbih0aGlzLnNhbXBsZSk7CgkJCQl0aGlzLnNhdGlzZnlOb3RhdGlvbihjb3B5LCAicyIpOwoKCQkJCXJldHVybiBjb3B5OwoJCQl9LAoJCX0sCgoKCQkvKmNyZWF0ZWQgKCkgewoJCQl0aGlzLnNhdGlzZnlOb3RhdGlvbih0aGlzLmNyaXRlcmlvbiwgImMiKTsKCQkJdGhpcy5zYXRpc2Z5Tm90YXRpb24odGhpcy5zYW1wbGUsICJzIik7CgkJfSwqLwoKCgkJbWV0aG9kczogewoJCQlzYXRpc2Z5Tm90YXRpb24gKG5vdGF0aW9uLCB0eXBlKSB7CgkJCQlpZiAobm90YXRpb24pIHsKCQkJCQlub3RhdGlvbi5ub3Rlcy5mb3JFYWNoKG5vdGUgPT4gewoJCQkJCQlpZiAodGhpcy5zb2Z0SW5kZXhBc1gpIHsKCQkJCQkJCW5vdGUuc3RhcnQgPSBub3RlLnNvZnRJbmRleCAqIDRlKzM7CgkJCQkJCQlub3RlLmR1cmF0aW9uID0gMjAwMDsKCQkJCQkJfQoJCQkJCQllbHNlIHsKCQkJCQkJCW5vdGUuc3RhcnQgPSBub3RlLnN0YXJ0VGljayAqIDMyICogKHR5cGUgPT09ICJzIiA/IHRoaXMudGltZUZhY3RvckMgOiAxKTsKCQkJCQkJCW5vdGUuZHVyYXRpb24gPSAyMDAwOwoJCQkJCQl9CgkJCQkJCW5vdGUuY2xhc3NlcyA9IG5vdGUuY2xhc3NlcyB8fCB7fTsKCgkJCQkJCWNvbnN0IG1hdGNoZWQgPSB0aGlzLmxpbmtJbmRpY2VzLnNvbWUoaXRlbSA9PiBpdGVtW3R5cGVdID09PSBub3RlLmluZGV4KTsKCQkJCQkJbm90ZS5jbGFzc2VzLm1pc3NlZCA9ICFtYXRjaGVkOwoJCQkJCX0pOwoJCQkJfQoJCQl9LAoKCgkJCW9uQ2xpY2tDTm90ZSAobm90ZSkgewoJCQkJY29uc3QgY25vdGUgPSB0aGlzLmNyaXRlcmlvbi5ub3Rlc1tub3RlLmluZGV4XTsKCQkJCXRoaXMuJGVtaXQoImNsaWNrQ05vdGUiLCBjbm90ZSk7CgkJCX0sCgoKCQkJb25DbGlja1NOb3RlIChub3RlKSB7CgkJCQljb25zdCBzbm90ZSA9IHRoaXMuc2FtcGxlLm5vdGVzW25vdGUuaW5kZXhdOwoJCQkJdGhpcy4kZW1pdCgiY2xpY2tTTm90ZSIsIHNub3RlKTsKCQkJfSwKCQl9LAoJfTsK"},{"version":3,"sources":["notations-matcher.vue"],"names":[],"mappings":";AAsCA;;AAEA;;;;AAIA;AACA;AACA;;;;AAIA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA","file":"notations-matcher.vue","sourceRoot":"app/components","sourcesContent":["<template>\n\t<div class=\"notations-matcher\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"480\" :viewBox=\"`-20 -20 ${width + 40} 160`\">\n\t\t\t<g :transform=\"`translate(${positionC.x}, ${positionC.y})`\" class=\"criterion\">\n\t\t\t\t<PinaoRoll v-if=\"innerCriterion\"\n\t\t\t\t\t:notation=\"innerCriterion\"\n\t\t\t\t\t:timeScale=\"timeScale\"\n\t\t\t\t\t:pitchScale=\"1\"\n\t\t\t\t\t:tooltips=\"true\"\n\t\t\t\t\t@clickNote=\"onClickCNote\"\n\t\t\t\t/>\n\t\t\t</g>\n\t\t\t<g :transform=\"`translate(${positionS.x}, ${positionS.y})`\" class=\"sample\">\n\t\t\t\t<PinaoRoll v-if=\"innerSample\"\n\t\t\t\t\t:notation=\"innerSample\"\n\t\t\t\t\t:timeScale=\"timeScale\"\n\t\t\t\t\t:pitchScale=\"1\"\n\t\t\t\t\t:tooltips=\"true\"\n\t\t\t\t\t@clickNote=\"onClickSNote\"\n\t\t\t\t/>\n\t\t\t</g>\n\t\t\t<g class=\"links\" v-if=\"links\">\n\t\t\t\t<line v-for=\"link of links\" :key=\"link.s.index\"\n\t\t\t\t\t:class=\"{\n\t\t\t\t\t\toblique: link.s.start !== link.c.start,\n\t\t\t\t\t\t'heavy-oblique': Math.abs(link.s.start - link.c.start) > 128,\n\t\t\t\t\t}\"\n\t\t\t\t\t:x1=\"positionS.x + link.s.start * timeScale\"\n\t\t\t\t\t:x2=\"positionC.x + link.c.start * timeScale\"\n\t\t\t\t\t:y1=\"positionS.y - link.s.pitch + 0.5\"\n\t\t\t\t\t:y2=\"positionC.y - link.c.pitch + 0.5\"\n\t\t\t\t/>\n\t\t\t</g>\n\t\t</svg>\n\t</div>\n</template>\n\n<script>\n\timport {SvgPianoRoll} from \"@k-l-lambda/music-widgets\";\n\n\timport pick from \"../../inc/pick\";\n\n\n\n\tconst copyNotation = notation => ({\n\t\tnotes: notation.notes.map(note => pick(note, [\"startTick\", \"endTick\", \"softIndex\", \"duration\", \"classes\", \"pitch\", \"index\", \"id\"])),\n\t});\n\n\n\n\texport default {\n\t\tname: \"notations-matcher\",\n\n\n\t\tprops: {\n\t\t\tcriterion: Object,\n\t\t\tsample: Object,\n\t\t\tpath: Array,\n\t\t\tsoftIndexAsX: {\n\t\t\t\ttype: Boolean,\n\t\t\t\tdefault: false,\n\t\t\t},\n\t\t\ttimeFactorC: {\n\t\t\t\ttype: Number,\n\t\t\t\tdefault: 1,\n\t\t\t},\n\t\t},\n\n\n\t\tcomponents: {\n\t\t\tPinaoRoll: SvgPianoRoll,\n\t\t},\n\n\n\t\tdata () {\n\t\t\treturn {\n\t\t\t\ttimeScale: 1e-3,\n\t\t\t\tpositionC: {x: 0, y: 90},\n\t\t\t\tpositionS: {x: 0, y: 160},\n\t\t\t};\n\t\t},\n\n\n\t\tcomputed: {\n\t\t\tlinks () {\n\t\t\t\treturn this.path && this.path.map((ci, si) => ({ci, si})).filter(({ci}) => ci >= 0).map(({ci, si}) => ({\n\t\t\t\t\tc: this.innerCriterion.notes[ci],\n\t\t\t\t\ts: this.innerSample.notes[si],\n\t\t\t\t}));\n\t\t\t},\n\n\n\t\t\tlinkIndices () {\n\t\t\t\treturn this.path && this.path.map((c, s) => ({c, s}));\n\t\t\t},\n\n\n\t\t\twidth () {\n\t\t\t\tconst lastC = this.innerCriterion && this.innerCriterion.notes[this.innerCriterion.notes.length - 1];\n\t\t\t\tconst lastS = this.innerSample && this.innerSample.notes[this.innerSample.notes.length - 1];\n\n\t\t\t\tconst cduration = lastC ? (lastC.start + lastC.duration) : 0;\n\t\t\t\tconst sduration = lastS ? (lastS.start + lastS.duration) : 0;\n\n\t\t\t\treturn Math.max(cduration, sduration, 1) * this.timeScale;\n\t\t\t},\n\n\n\t\t\tinnerCriterion () {\n\t\t\t\tif (!this.criterion)\n\t\t\t\t\treturn null;\n\n\t\t\t\tconst copy = copyNotation(this.criterion);\n\t\t\t\tthis.satisfyNotation(copy, \"c\");\n\n\t\t\t\treturn copy;\n\t\t\t},\n\n\n\t\t\tinnerSample () {\n\t\t\t\tif (!this.sample)\n\t\t\t\t\treturn null;\n\n\t\t\t\tconst copy = copyNotation(this.sample);\n\t\t\t\tthis.satisfyNotation(copy, \"s\");\n\n\t\t\t\treturn copy;\n\t\t\t},\n\t\t},\n\n\n\t\t/*created () {\n\t\t\tthis.satisfyNotation(this.criterion, \"c\");\n\t\t\tthis.satisfyNotation(this.sample, \"s\");\n\t\t},*/\n\n\n\t\tmethods: {\n\t\t\tsatisfyNotation (notation, type) {\n\t\t\t\tif (notation) {\n\t\t\t\t\tnotation.notes.forEach(note => {\n\t\t\t\t\t\tif (this.softIndexAsX) {\n\t\t\t\t\t\t\tnote.start = note.softIndex * 4e+3;\n\t\t\t\t\t\t\tnote.duration = 2000;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tnote.start = note.startTick * 32 * (type === \"s\" ? this.timeFactorC : 1);\n\t\t\t\t\t\t\tnote.duration = 2000;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnote.classes = note.classes || {};\n\n\t\t\t\t\t\tconst matched = this.linkIndices.some(item => item[type] === note.index);\n\t\t\t\t\t\tnote.classes.missed = !matched;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\n\t\t\tonClickCNote (note) {\n\t\t\t\tconst cnote = this.criterion.notes[note.index];\n\t\t\t\tthis.$emit(\"clickCNote\", cnote);\n\t\t\t},\n\n\n\t\t\tonClickSNote (note) {\n\t\t\t\tconst snote = this.sample.notes[note.index];\n\t\t\t\tthis.$emit(\"clickSNote\", snote);\n\t\t\t},\n\t\t},\n\t};\n</script>\n\n<style lang=\"scss\" scoped>\n\t.links\n\t{\n\t\t line\n\t\t{\n\t\t\tstroke: #000a;\n\t\t\tstroke-width: 0.1px;\n\n\t\t\t&.oblique\n\t\t\t{\n\t\t\t\tstroke: #400;\n\n\t\t\t\t&.heavy-oblique\n\t\t\t\t{\n\t\t\t\t\tstroke: #a00;\n\t\t\t\t\tstroke-width: 0.2px;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n</style>\n\n<style>\n\t.criterion .note\n\t{\n\t\tfill: darkblue;\n\t}\n\n\t.sample .note\n\t{\n\t\tfill: darkslategray;\n\t}\n\n\t.note.missed\n\t{\n\t\tstroke: red;\n\t\tstroke-width: 0.2;\n\t}\n\n\t.notations-matcher\n\t{\n\t\toverflow: auto;\n\t}\n</style>\n"]}]} |