notations 0.0.40 → 0.0.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/README.md +38 -0
  2. package/lib/cjs/beats.d.ts +111 -0
  3. package/lib/cjs/beats.js +523 -0
  4. package/lib/cjs/beats.js.map +1 -0
  5. package/lib/cjs/carnatic/LineView.d.ts +20 -0
  6. package/lib/cjs/carnatic/LineView.js +69 -0
  7. package/lib/cjs/carnatic/LineView.js.map +1 -0
  8. package/lib/cjs/carnatic/NotationView.d.ts +31 -0
  9. package/lib/cjs/carnatic/NotationView.js +250 -0
  10. package/lib/cjs/carnatic/NotationView.js.map +1 -0
  11. package/lib/cjs/carnatic/atomviews.d.ts +14 -7
  12. package/lib/cjs/carnatic/atomviews.js +170 -137
  13. package/lib/cjs/carnatic/atomviews.js.map +1 -1
  14. package/lib/cjs/carnatic/beatviews.d.ts +10 -14
  15. package/lib/cjs/carnatic/beatviews.js +53 -108
  16. package/lib/cjs/carnatic/beatviews.js.map +1 -1
  17. package/lib/cjs/carnatic/embelishments.d.ts +38 -32
  18. package/lib/cjs/carnatic/embelishments.js +35 -20
  19. package/lib/cjs/carnatic/embelishments.js.map +1 -1
  20. package/lib/cjs/carnatic/index.d.ts +2 -0
  21. package/lib/cjs/carnatic/index.js +2 -0
  22. package/lib/cjs/carnatic/index.js.map +1 -1
  23. package/lib/cjs/core.d.ts +15 -73
  24. package/lib/cjs/core.js +200 -568
  25. package/lib/cjs/core.js.map +1 -1
  26. package/lib/cjs/cycle.d.ts +47 -0
  27. package/lib/cjs/cycle.js +492 -0
  28. package/lib/cjs/cycle.js.map +1 -0
  29. package/lib/cjs/entity.d.ts +24 -0
  30. package/lib/cjs/entity.js +135 -0
  31. package/lib/cjs/entity.js.map +1 -0
  32. package/lib/cjs/index.d.ts +3 -0
  33. package/lib/cjs/index.js +3 -0
  34. package/lib/cjs/index.js.map +1 -1
  35. package/lib/cjs/iterators.d.ts +14 -2
  36. package/lib/cjs/iterators.js +79 -7
  37. package/lib/cjs/iterators.js.map +1 -1
  38. package/lib/cjs/layouts.d.ts +7 -106
  39. package/lib/cjs/layouts.js +4 -478
  40. package/lib/cjs/layouts.js.map +1 -1
  41. package/lib/cjs/loader.d.ts +2 -1
  42. package/lib/cjs/loader.js +32 -27
  43. package/lib/cjs/loader.js.map +1 -1
  44. package/lib/cjs/notation.d.ts +3 -1
  45. package/lib/cjs/notation.js +6 -4
  46. package/lib/cjs/notation.js.map +1 -1
  47. package/lib/cjs/parser.js +6 -5
  48. package/lib/cjs/parser.js.map +1 -1
  49. package/lib/cjs/shapes.d.ts +35 -14
  50. package/lib/cjs/shapes.js +153 -43
  51. package/lib/cjs/shapes.js.map +1 -1
  52. package/lib/cjs/utils.d.ts +2 -1
  53. package/lib/cjs/utils.js +20 -8
  54. package/lib/cjs/utils.js.map +1 -1
  55. package/lib/esm/beats.d.ts +111 -0
  56. package/lib/esm/beats.js +501 -0
  57. package/lib/esm/beats.js.map +1 -0
  58. package/lib/esm/carnatic/LineView.d.ts +20 -0
  59. package/lib/esm/carnatic/LineView.js +47 -0
  60. package/lib/esm/carnatic/LineView.js.map +1 -0
  61. package/lib/esm/carnatic/NotationView.d.ts +31 -0
  62. package/lib/esm/carnatic/NotationView.js +228 -0
  63. package/lib/esm/carnatic/NotationView.js.map +1 -0
  64. package/lib/esm/carnatic/atomviews.d.ts +14 -7
  65. package/lib/esm/carnatic/atomviews.js +170 -137
  66. package/lib/esm/carnatic/atomviews.js.map +1 -1
  67. package/lib/esm/carnatic/beatviews.d.ts +10 -14
  68. package/lib/esm/carnatic/beatviews.js +54 -109
  69. package/lib/esm/carnatic/beatviews.js.map +1 -1
  70. package/lib/esm/carnatic/embelishments.d.ts +38 -32
  71. package/lib/esm/carnatic/embelishments.js +34 -19
  72. package/lib/esm/carnatic/embelishments.js.map +1 -1
  73. package/lib/esm/carnatic/index.d.ts +2 -0
  74. package/lib/esm/carnatic/index.js +2 -0
  75. package/lib/esm/carnatic/index.js.map +1 -1
  76. package/lib/esm/core.d.ts +15 -73
  77. package/lib/esm/core.js +196 -564
  78. package/lib/esm/core.js.map +1 -1
  79. package/lib/esm/cycle.d.ts +47 -0
  80. package/lib/esm/cycle.js +470 -0
  81. package/lib/esm/cycle.js.map +1 -0
  82. package/lib/esm/entity.d.ts +24 -0
  83. package/lib/esm/entity.js +132 -0
  84. package/lib/esm/entity.js.map +1 -0
  85. package/lib/esm/index.d.ts +3 -0
  86. package/lib/esm/index.js +3 -0
  87. package/lib/esm/index.js.map +1 -1
  88. package/lib/esm/iterators.d.ts +14 -2
  89. package/lib/esm/iterators.js +75 -3
  90. package/lib/esm/iterators.js.map +1 -1
  91. package/lib/esm/layouts.d.ts +7 -106
  92. package/lib/esm/layouts.js +1 -475
  93. package/lib/esm/layouts.js.map +1 -1
  94. package/lib/esm/loader.d.ts +2 -1
  95. package/lib/esm/loader.js +28 -24
  96. package/lib/esm/loader.js.map +1 -1
  97. package/lib/esm/notation.d.ts +3 -1
  98. package/lib/esm/notation.js +3 -1
  99. package/lib/esm/notation.js.map +1 -1
  100. package/lib/esm/parser.js +6 -5
  101. package/lib/esm/parser.js.map +1 -1
  102. package/lib/esm/shapes.d.ts +35 -14
  103. package/lib/esm/shapes.js +152 -42
  104. package/lib/esm/shapes.js.map +1 -1
  105. package/lib/esm/utils.d.ts +2 -1
  106. package/lib/esm/utils.js +19 -7
  107. package/lib/esm/utils.js.map +1 -1
  108. package/package.json +33 -28
  109. package/styles/NotationView.scss +35 -0
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/core.ts"],"names":[],"mappings":"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","sourcesContent":["import * as TSU from \"@panyam/tsutils\";\n\ntype Fraction = TSU.Num.Fraction;\nconst ZERO = TSU.Num.Fraction.ZERO;\nconst ONE = TSU.Num.Fraction.ONE;\n\nexport class Entity {\n private static counter = 0;\n readonly uuid = Entity.counter++;\n metadata: TSU.StringMap<any>;\n parent: TSU.Nullable<Entity> = null;\n\n constructor(config: any = null) {\n config = config || {};\n this.metadata = config.metadata || {};\n }\n\n debugValue(): any {\n if (Object.keys(this.metadata).length > 0) return { metadata: this.metadata, type: this.type };\n else return { type: this.type };\n }\n\n children(): Entity[] {\n return [];\n }\n\n get childCount(): number {\n return this.children().length;\n }\n\n addChild(child: Entity, index = -1): this {\n if (index < 0) {\n this.children().push(child);\n } else {\n this.children().splice(index, 0, child);\n }\n return this;\n }\n\n childAt(index: number): Entity {\n return this.children()[index];\n }\n\n indexOfChild(entity: Entity): number {\n let i = 0;\n for (const child of this.children()) {\n if (child == entity) return i;\n i++;\n }\n return -1;\n }\n\n removeChildAt(index: number): Entity {\n const children = this.children();\n const out = children[index];\n children.splice(index, 1);\n return out;\n }\n\n setChildAt(index: number, entity: Entity): this {\n this.children()[index] = entity;\n return this;\n }\n\n setMetadata(key: string, value: any): this {\n this.metadata[key] = value;\n return this;\n }\n\n getMetadata(key: string, recurse = true): any {\n if (key in this.metadata) {\n return this.metadata[key];\n }\n if (recurse && this.parent) {\n return this.parent.getMetadata(key);\n }\n return null;\n }\n\n /**\n * Returns the type of this Entity.\n */\n get type(): unknown {\n return this.constructor.name;\n }\n\n toString(): string {\n return `Entity(id = ${this.uuid})`;\n }\n\n equals(another: this, expect = false): boolean {\n if (this.type != another.type) return false;\n // check metadata too\n return true;\n }\n\n clone(): this {\n const out = this.newInstance();\n this.copyTo(out);\n return out;\n }\n\n copyTo(another: this): void {\n another.metadata = { ...this.metadata };\n }\n\n protected newInstance(): this {\n return new (this.constructor as any)();\n }\n}\n\nexport abstract class TimedEntity extends Entity {\n // Duration of this entity in beats.\n // By default entities durations are readonly\n abstract get duration(): Fraction;\n\n equals(another: this): boolean {\n return super.equals(another) && this.duration.equals(another.duration);\n }\n}\n\nexport enum AtomType {\n NOTE = \"Note\",\n LITERAL = \"Literal\",\n SYLLABLE = \"Syllable\",\n SPACE = \"Space\",\n GROUP = \"Group\",\n LABEL = \"Label\",\n REST = \"Rest\",\n}\n\nexport abstract class Atom extends TimedEntity {\n protected _duration: Fraction;\n nextSibling: TSU.Nullable<Atom> = null;\n prevSibling: TSU.Nullable<Atom> = null;\n\n constructor(duration = ONE) {\n super();\n this._duration = duration || ONE;\n }\n\n debugValue(): any {\n return this.duration.isOne\n ? super.debugValue()\n : { ...super.debugValue(), duration: this.duration.factorized.toString() };\n }\n\n copyTo(another: this): void {\n super.copyTo(another);\n another.duration = new TSU.Num.Fraction(this.duration.num, this.duration.den);\n }\n\n get duration(): Fraction {\n return this._duration;\n }\n\n set duration(d: Fraction) {\n this._duration = d;\n }\n}\n\nexport abstract class LeafAtom extends Atom {\n // Tells if this atom is followed by a rest\n beforeRest = false;\n\n debugValue(): any {\n return this.beforeRest ? { ...super.debugValue(), beforeRest: true } : super.debugValue();\n }\n}\n\nexport class Rest extends LeafAtom {\n // rests are zero length - why not just use 0 length silent spaces?\n constructor() {\n super(ZERO);\n }\n}\n\n/**\n * Spaces are used to denote either silence or continuations of previous notes.\n */\nexport class Space extends LeafAtom {\n /**\n * Tells if this is a silent space or a continuation of previous note.\n */\n isSilent = false;\n\n constructor(duration = ONE, isSilent = false) {\n super(duration);\n this.isSilent = isSilent;\n }\n\n debugValue(): any {\n return { ...super.debugValue(), isSilent: this.isSilent };\n }\n\n toString(): string {\n return `Space(${this.duration}-${this.isSilent})`;\n }\n\n copyTo(another: this): void {\n super.copyTo(another);\n another.isSilent = this.isSilent;\n }\n\n equals(another: this): boolean {\n return super.equals(another) && this.isSilent == another.isSilent;\n }\n}\n\nexport class Literal extends LeafAtom {\n /**\n * The value of this Syllable.\n */\n embelishments: any[] = [];\n\n constructor(public value: string, duration = ONE) {\n super(duration);\n }\n\n debugValue(): any {\n const out = { ...super.debugValue(), value: this.value };\n if (this.embelishments.length > 0) {\n out.embs = this.embelishments.map((e) => (\"debugValue\" in e ? e.debugValue() : e));\n }\n return out;\n }\n\n toString(): string {\n return `Lit(${this.duration}-${this.value})`;\n }\n\n equals(another: this): boolean {\n return super.equals(another) && this.value == another.value;\n }\n\n copyTo(another: this): void {\n super.copyTo(another);\n another.value = this.value;\n }\n}\n\nexport class Syllable extends Literal {\n static fromLit(lit: Literal): Syllable {\n if (lit.type == AtomType.SYLLABLE) return lit as Syllable;\n const out = new Syllable(lit.value, lit.duration);\n out.embelishments = lit.embelishments;\n return out;\n }\n\n toString(): string {\n return `Syll(${this.duration}-${this.value})`;\n }\n}\n\nexport class Note extends Literal {\n /**\n * Which octave is the note in. Can be +ve or -ve to indicate higher or lower octaves.\n */\n octave = 0;\n\n /**\n * How is the note shifted - ie by shifted towards major or minore by # of semi-tones.\n */\n shift: number | boolean = 0;\n\n constructor(value: string, duration = ONE, octave = 0, shift = 0) {\n super(value, duration);\n this.octave = octave;\n this.shift = shift;\n }\n\n static fromLit(lit: Literal): Note {\n if (lit.type == AtomType.NOTE) return lit as Note;\n const out = new Note(lit.value, lit.duration);\n out.embelishments = lit.embelishments;\n return out;\n }\n\n debugValue(): any {\n const out = { ...super.debugValue() };\n if (this.octave != 0) out.octave = this.octave;\n if (this.shift != 0) out.shift = this.shift;\n return out;\n }\n\n toString(): string {\n return `Note(${this.duration}-${this.value}-${this.octave})`;\n }\n\n equals(another: this): boolean {\n return super.equals(another) && this.octave == another.octave && this.shift == another.shift;\n }\n\n copyTo(another: this): void {\n super.copyTo(another);\n another.octave = this.octave;\n another.shift = this.shift;\n }\n}\n\nexport class Group extends Atom {\n /**\n * This indicates whether our duration is static or linear to number of\n * atoms in this group.\n */\n durationIsMultiplier = false;\n readonly atoms: TSU.Lists.ValueList<Atom> = new TSU.Lists.ValueList<Atom>();\n\n constructor(duration = ONE, ...atoms: Atom[]) {\n super(duration);\n this.addAtoms(...atoms);\n }\n\n get duration(): Fraction {\n if (this.durationIsMultiplier) {\n return this.totalChildDuration.divby(this._duration);\n } else {\n return this._duration;\n }\n }\n\n set duration(d: Fraction) {\n this._duration = d;\n }\n\n debugValue(): any {\n const out = { ...super.debugValue(), atoms: Array.from(this.atoms.values(), (a) => a.debugValue()) };\n if (this.durationIsMultiplier) out.durationIsMultiplier = true;\n return out;\n }\n\n get totalChildDuration(): Fraction {\n let out = ZERO;\n this.atoms.forEach((atom) => (out = out.plus(atom.duration)));\n return out;\n }\n\n /** Entities can have children and thus siblings and parents. */\n equals(another: this, expect = false): boolean {\n if (!super.equals(another)) return false;\n return this.atoms.equals(another.atoms, (a1, a2) => a1.equals(a2));\n }\n\n copyTo(another: this): void {\n super.copyTo(another);\n this.atoms.forEach((atom) => another.atoms.add(atom.clone()));\n }\n\n addAtoms(...atoms: Atom[]): this {\n for (const atom of atoms) {\n if (atom.type == AtomType.REST) {\n const last = this.atoms.last;\n if (last && last.type != AtomType.GROUP && last.type != AtomType.LABEL) {\n (last as LeafAtom).beforeRest = true;\n }\n } else {\n atom.parent = this;\n this.atoms.add(atom);\n }\n }\n return this;\n }\n}\n\nexport type CyclePosition = [number, number, number];\nexport type CycleIterator = Generator<[CyclePosition, Fraction]>;\n\nexport class CycleCursor {\n constructor(public readonly cycle: Cycle, public barIndex = 0, public beatIndex = 0, public instance = 0) {}\n\n get next(): [CyclePosition, Fraction] {\n const currBar = this.cycle.bars[this.barIndex];\n const result: [CyclePosition, Fraction] = [\n [this.barIndex, this.beatIndex, this.instance],\n currBar.beatLengths[this.beatIndex],\n ];\n this.instance++;\n if (!currBar.beatCounts[this.beatIndex] || this.instance >= currBar.beatCounts[this.beatIndex]) {\n this.instance = 0;\n this.beatIndex++;\n if (this.beatIndex >= currBar.beatLengths.length) {\n this.beatIndex = 0;\n this.barIndex++;\n if (this.barIndex >= this.cycle.bars.length) {\n this.barIndex = 0;\n }\n }\n }\n return result;\n }\n\n get prev(): [CyclePosition, Fraction] {\n const currBar = this.cycle.bars[this.barIndex];\n const result: [CyclePosition, Fraction] = [\n [this.barIndex, this.beatIndex, this.instance],\n currBar.beatLengths[this.beatIndex],\n ];\n // TODO - result should be set *after* decrementing if we had already\n // done a \"next\" before this otherwise user may have to do a prev twice\n this.instance--;\n if (this.instance < 0) {\n this.beatIndex--;\n if (this.beatIndex < 0) {\n this.barIndex--;\n if (this.barIndex < 0) {\n this.barIndex = this.cycle.bars.length - 1;\n }\n this.beatIndex = this.cycle.bars[this.barIndex].beatCount - 1;\n }\n this.instance = (this.cycle.bars[this.barIndex].beatCounts[this.beatIndex] || 1) - 1;\n }\n return result;\n }\n}\n\nexport class Bar extends TimedEntity {\n name: string;\n // Length/Duration of each beat.\n beatLengths: Fraction[] = [];\n\n // How many times should a beat be repeated - the Kalai!\n beatCounts: number[] = [];\n\n constructor(config: any = null) {\n super((config = config || {}));\n this.name = config.name || \"\";\n for (const bl of config.beatLengths || []) {\n if (typeof bl === \"number\") {\n this.beatLengths.push(TSU.Num.Frac(bl));\n } else {\n this.beatLengths.push(bl);\n }\n }\n for (const bc of config.beatCounts || []) {\n this.beatCounts.push(bc);\n }\n while (this.beatCounts.length < this.beatLengths.length) {\n this.beatCounts.push(1);\n }\n }\n\n debugValue(): any {\n return { ...super.debugValue(), name: name, beatLengths: this.beatLengths };\n }\n\n equals(another: this): boolean {\n if (!super.equals(another)) return false;\n if (this.beatLengths.length != another.beatLengths.length) return false;\n if (this.beatCounts.length != another.beatCounts.length) return false;\n for (let i = 0; i < this.beatLengths.length; i++) {\n if (!this.beatLengths[i].equals(another.beatLengths[i])) return false;\n }\n for (let i = 0; i < this.beatCounts.length; i++) {\n if (this.beatCounts[i] != another.beatCounts[i]) return false;\n }\n return true;\n }\n\n copyTo(another: this): void {\n super.copyTo(another);\n another.name = this.name;\n another.beatLengths = [...this.beatLengths];\n another.beatCounts = [...this.beatCounts];\n }\n\n get beatCount(): number {\n return this.beatLengths.length;\n }\n\n get totalBeatCount(): number {\n let out = 0;\n for (let i = 0; i < this.beatLengths.length; i++) {\n out += this.beatCounts[i] || 1;\n }\n return out;\n }\n\n /**\n * Total duration (of time) across all beats in this bar.\n */\n get duration(): Fraction {\n let total = ZERO;\n for (let i = 0; i < this.beatLengths.length; i++) {\n total = total.plus(this.beatLengths[i].timesNum(this.beatCounts[i] || 1));\n }\n return total;\n }\n}\n\n// Describes the cycle pattern\nexport class Cycle extends TimedEntity {\n name: string;\n bars: Bar[];\n\n static readonly DEFAULT = new Cycle({\n name: \"Adi Thalam\",\n bars: [\n new Bar({ name: \"Laghu\", beatLengths: [1, 1, 1, 1] }),\n new Bar({ name: \"Dhrutam\", beatLengths: [1, 1] }),\n new Bar({ name: \"Dhrutam\", beatLengths: [1, 1] }),\n ],\n });\n\n constructor(config: null | { name?: string; bars?: Bar[] } = null) {\n super((config = config || {}));\n this.name = config.name || \"\";\n this.bars = config.bars || [];\n }\n\n debugValue(): any {\n return { ...super.debugValue(), name: name, bars: this.bars.map((p) => p.debugValue()) };\n }\n\n children(): Entity[] {\n return this.bars;\n }\n\n equals(another: this): boolean {\n if (!super.equals(another)) {\n return false;\n }\n if (this.bars.length != another.bars.length) return false;\n for (let i = 0; i < this.bars.length; i++) {\n if (!this.bars[i].equals(another.bars[i])) return false;\n }\n return true;\n }\n\n /**\n * Given a global beat index returns four values [cycle,bar,beat,instance] where:\n *\n * cycle - The nth cycle in which the beat lies. Since the global beat\n * index can be greater the number of beats in this cycle this\n * allows us to wrap around. Similarly if beatindex is less than\n * 0 then we can also go behind a cycle.\n * bar - The mth bar in the nth cycle which the offset exists\n * beat - The beat within the mth bar in the nth cycle where the\n * offset lies\n * instance - The beat instance where the offset lies.\n * startOffset - Offset of the beat at this global index.\n */\n getAtIndex(globalIndex: number): [number, CyclePosition, Fraction] {\n let cycle = 0;\n while (globalIndex < 0) {\n globalIndex += this.totalBeatCount;\n cycle--;\n }\n if (globalIndex >= this.totalBeatCount) {\n cycle = Math.floor(globalIndex / this.totalBeatCount);\n }\n globalIndex = globalIndex % this.totalBeatCount;\n let offset = ZERO;\n for (let barIndex = 0; barIndex < this.bars.length; barIndex++) {\n const bar = this.bars[barIndex];\n if (globalIndex >= bar.totalBeatCount) {\n globalIndex -= bar.totalBeatCount;\n offset = offset.plus(bar.duration);\n } else {\n // this is the bar!\n for (let beatIndex = 0; beatIndex < bar.beatCount; beatIndex++) {\n const beatLength = bar.beatLengths[beatIndex];\n const beatCount = bar.beatCounts[beatIndex] || 1;\n if (globalIndex >= beatCount) {\n globalIndex -= beatCount;\n offset = offset.plus(beatLength.timesNum(beatCount));\n } else {\n // this is it\n const instance = globalIndex;\n return [cycle, [barIndex, beatIndex, instance], offset.plus(beatLength.timesNum(instance))];\n }\n }\n }\n }\n throw new Error(\"Should not be here!\");\n }\n\n /**\n * Given a global offset returns five values [cycle, bar,beat,instance,offset] where:\n *\n * cycle - The nth cycle in which the beat lies. Since the global offset can be\n * greater the duration of the cycle this allows us to wrap around.\n * Similarly if globalOffset is less than 0 then we can also go behind a cycle.\n * bar - The mth bar in the nth cycle which the offset exists\n * beat - The beat within the mth bar in the nth cycle where the offset lies\n * instance - The beat instance where the offset lies.\n * startOffset - The note offset within the beat where the global offset lies.\n * globalIndex - The beat index within the entire cycle and not just within the bar.\n */\n getPosition(globalOffset: Fraction): [number, CyclePosition, Fraction, number] {\n const duration = this.duration;\n let cycleNum = 0;\n if (globalOffset.isLT(ZERO)) {\n while (globalOffset.isLT(ZERO)) {\n cycleNum--;\n globalOffset = globalOffset.plus(duration);\n }\n } else if (globalOffset.isGTE(duration)) {\n const realOffset = globalOffset.mod(duration);\n globalOffset = globalOffset.minus(realOffset).divby(duration);\n TSU.assert(globalOffset.isWhole);\n cycleNum = globalOffset.floor;\n globalOffset = realOffset;\n }\n\n // here globalOffset is positive and >= 0 and < this.duration\n let globalIndex = 0;\n for (let barIndex = 0; barIndex < this.bars.length; barIndex++) {\n const bar = this.bars[barIndex];\n const barDuration = bar.duration;\n if (globalOffset.isGTE(barDuration)) {\n globalOffset = globalOffset.minus(barDuration);\n } else {\n // this is the bar!\n for (let beatIndex = 0; beatIndex < bar.beatCount; beatIndex++) {\n const beatLength = bar.beatLengths[beatIndex];\n const beatCount = bar.beatCounts[beatIndex] || 1;\n for (let instance = 0; instance < beatCount; instance++, globalIndex++) {\n if (globalOffset.isGTE(beatLength)) {\n globalOffset = globalOffset.minus(beatLength);\n } else {\n // this is it\n return [cycleNum, [barIndex, beatIndex, instance], globalOffset, globalIndex];\n }\n }\n }\n }\n globalIndex += bar.totalBeatCount;\n }\n\n throw new Error(\"Should not be here!\");\n }\n\n *iterateBeats(startBar = 0, startBeat = 0, startInstance = 0): CycleIterator {\n let barIndex = startBar;\n let beatIndex = startBeat;\n let instanceIndex = startInstance;\n while (true) {\n const currBar = this.bars[barIndex];\n yield [[barIndex, beatIndex, instanceIndex], currBar.beatLengths[beatIndex]];\n instanceIndex++;\n if (!currBar.beatCounts[beatIndex] || instanceIndex >= currBar.beatCounts[beatIndex]) {\n instanceIndex = 0;\n beatIndex++;\n if (beatIndex >= currBar.beatLengths.length) {\n beatIndex = 0;\n barIndex++;\n if (barIndex >= this.bars.length) {\n barIndex = 0;\n }\n }\n }\n }\n }\n\n copyTo(another: this): void {\n super.copyTo(another);\n another.name = this.name;\n another.bars = this.bars.map((x) => x.clone());\n }\n\n get beatCount(): number {\n let out = 0;\n for (const bar of this.bars) out += bar.beatCount;\n return out;\n }\n\n get totalBeatCount(): number {\n let out = 0;\n for (const bar of this.bars) out += bar.totalBeatCount;\n return out;\n }\n\n /**\n * Total duration (of time) across all bars in this cycle.\n */\n get duration(): Fraction {\n return this.bars.reduce((x, y) => x.plus(y.duration), ZERO);\n }\n}\n\nexport class Line extends Entity {\n // Line can have atoms starting \"before\" the cycle. The offset tells how many notes\n // before or after the cycle this line's atoms start at.\n offset: Fraction = ZERO;\n roles: Role[] = [];\n\n // This is a very hacky solution to doing left side pre-margin text typically found\n // in notations - eg line X of a pallavi has this. This makes vertical space less wasteful\n // A better solution is inter-beat annotation but it is very complex and ambiguous for now\n marginText = \"\";\n\n get isEmpty(): boolean {\n for (const r of this.roles) if (!r.isEmpty) return false;\n return true;\n }\n\n debugValue(): any {\n const out = {\n ...super.debugValue(),\n roles: this.roles.map((r) => r.debugValue()),\n // layoutParams: this.layoutParams?.uuid,\n };\n if (!this.offset.isZero) {\n out.offset = this.offset.toString();\n }\n return out;\n }\n\n copyTo(another: this): void {\n super.copyTo(another);\n another.roles = this.roles.map((r) => r.clone());\n }\n\n addAtoms(roleName: string, defaultToNotes: boolean, ...atoms: Atom[]): this {\n const role = this.ensureRole(roleName, defaultToNotes);\n role.addAtoms(...atoms);\n return this;\n }\n\n ensureRole(roleName: string, defaultToNotes: boolean): Role {\n // Ensure we have this many roles\n let ri = this.roles.findIndex((r) => r.name == roleName);\n if (ri < 0) {\n ri = this.roles.length;\n const role = new Role(this, roleName);\n role.defaultToNotes = defaultToNotes;\n this.roles.push(role);\n }\n return this.roles[ri];\n }\n\n /**\n * Returns the maximum duration of all roles in this line.\n */\n get duration(): Fraction {\n let max = ZERO;\n for (const role of this.roles) {\n max = TSU.Num.Fraction.max(role.duration, max);\n }\n return max;\n }\n}\n\nexport class Role extends Entity {\n defaultToNotes = true;\n atoms: Atom[] = [];\n\n constructor(public readonly line: Line, public readonly name: string) {\n super();\n }\n\n get isEmpty(): boolean {\n return this.atoms.length == 0;\n }\n\n debugValue(): any {\n return { name: this.name, atoms: this.atoms.map((a) => a.debugValue()) };\n }\n\n addAtoms(...atoms: Atom[]): void {\n let last: null | Atom = null;\n for (const atom of atoms) {\n if (atom.type == AtomType.REST) {\n if (last && last.type != AtomType.GROUP && last.type != AtomType.LABEL) {\n (last as LeafAtom).beforeRest = true;\n }\n } else {\n this.atoms.push(atom);\n }\n last = atom;\n }\n }\n\n copyTo(another: Role): void {\n another.addAtoms(...this.atoms);\n }\n\n /**\n * Duration for this role.\n */\n get duration(): Fraction {\n return this.atoms.reduce((a, b) => a.plus(b.duration), ZERO);\n }\n}\n"]}
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/core.ts"],"names":[],"mappings":"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","sourcesContent":["import * as TSU from \"@panyam/tsutils\";\nimport { Entity, TimedEntity } from \"./entity\";\n\n/**\n * Alias to TSU.Num.Fraction in tsutils.\n */\ntype Fraction = TSU.Num.Fraction;\nconst ZERO = TSU.Num.Fraction.ZERO;\nconst ONE = TSU.Num.Fraction.ONE;\n\n/**\n * AtomType enums are used to denote specific Atoms\n * @enum\n */\nexport enum AtomType {\n NOTE = \"Note\",\n LITERAL = \"Literal\",\n SYLLABLE = \"Syllable\",\n SPACE = \"Space\",\n GROUP = \"Group\",\n LABEL = \"Label\",\n REST = \"Rest\",\n}\n\n/**\n * Atoms are the base class of timed entities that can appear in a Notation.\n */\nexport abstract class Atom extends TimedEntity {\n protected _duration: Fraction;\n nextSibling: TSU.Nullable<Atom> = null;\n prevSibling: TSU.Nullable<Atom> = null;\n // Which group does this Atom belong to\n parentGroup: TSU.Nullable<Group> = null;\n\n // Tells if this Atom is a \"continuation\" from a previous atom\n isContinuation = false;\n\n constructor(duration = ONE) {\n super();\n this._duration = duration || ONE;\n }\n\n abstract splitAt(requiredDuration: Fraction): TSU.Nullable<Atom>;\n\n debugValue(): any {\n const out = super.debugValue();\n if (!this.duration.isOne) {\n out.duration = this.duration.factorized.toString();\n }\n if (this.isContinuation) {\n out.isContinuation = true;\n }\n return out;\n }\n\n copyTo(another: this): void {\n super.copyTo(another);\n another._duration = new TSU.Num.Fraction(this.duration.num, this.duration.den);\n }\n\n get duration(): Fraction {\n return this._duration;\n }\n\n set duration(d: Fraction) {\n this._duration = d;\n }\n}\n\nexport abstract class LeafAtom extends Atom {\n // Tells if this atom is followed by a rest\n beforeRest = false;\n\n /**\n * Splits this atom at a certain duration. If this atom's duration is\n * longer than the given duration then it is truncated to the given duration\n * and a continuation space is returned.\n */\n splitAt(duration: Fraction): TSU.Nullable<Atom> {\n if (this.duration.cmp(duration) > 0) {\n const spillOver = this.createSpilloverSpace(this.duration.minus(duration));\n spillOver.isContinuation = true;\n this.duration = duration;\n return spillOver;\n }\n return null;\n }\n\n protected createSpilloverSpace(duration: Fraction): Space {\n return new Space(duration);\n }\n\n debugValue(): any {\n return this.beforeRest ? { ...super.debugValue(), beforeRest: true } : super.debugValue();\n }\n}\n\nexport class Rest extends LeafAtom {\n // rests are zero length - why not just use 0 length silent spaces?\n constructor() {\n super(ZERO);\n }\n}\n\n/**\n * Spaces are used to denote either silence or continuations of previous notes.\n */\nexport class Space extends LeafAtom {\n /**\n * Tells if this is a silent space or a continuation of previous note.\n */\n isSilent = false;\n\n constructor(duration = ONE, isSilent = false) {\n super(duration);\n this.isSilent = isSilent;\n }\n\n debugValue(): any {\n return { ...super.debugValue(), isSilent: this.isSilent };\n }\n\n toString(): string {\n return `Space(${this.duration}-${this.isSilent})`;\n }\n\n copyTo(another: this): void {\n super.copyTo(another);\n another.isSilent = this.isSilent;\n }\n\n equals(another: this): boolean {\n return super.equals(another) && this.isSilent == another.isSilent;\n }\n\n protected createSpilloverSpace(duration: Fraction): Space {\n const out = super.createSpilloverSpace(duration);\n out.isSilent = this.isSilent;\n return out;\n }\n}\n\nexport class Literal extends LeafAtom {\n /**\n * The value of this Syllable.\n */\n embelishments: any[] = [];\n\n constructor(public value: string, duration = ONE) {\n super(duration);\n }\n\n debugValue(): any {\n const out = { ...super.debugValue(), value: this.value };\n if (this.embelishments.length > 0) {\n out.embs = this.embelishments.map((e) => (\"debugValue\" in e ? e.debugValue() : e));\n }\n return out;\n }\n\n toString(): string {\n return `Lit(${this.duration}-${this.value})`;\n }\n\n equals(another: this): boolean {\n return super.equals(another) && this.value == another.value;\n }\n\n copyTo(another: this): void {\n super.copyTo(another);\n another.value = this.value;\n }\n}\n\nexport class Syllable extends Literal {\n static fromLit(lit: Literal): Syllable {\n if (lit.type == AtomType.SYLLABLE) return lit as Syllable;\n const out = new Syllable(lit.value, lit.duration);\n out.embelishments = lit.embelishments;\n out.beforeRest = lit.beforeRest;\n return out;\n }\n\n toString(): string {\n return `Syll(${this.duration}-${this.value})`;\n }\n}\n\nexport class Note extends Literal {\n /**\n * Which octave is the note in. Can be +ve or -ve to indicate higher or lower octaves.\n */\n octave = 0;\n\n /**\n * How is the note shifted - ie by shifted towards major or minore by # of semi-tones.\n */\n shift: number | boolean = 0;\n\n constructor(value: string, duration = ONE, octave = 0, shift = 0) {\n super(value, duration);\n this.octave = octave;\n this.shift = shift;\n }\n\n static fromLit(lit: Literal): Note {\n if (lit.type == AtomType.NOTE) return lit as Note;\n const out = new Note(lit.value, lit.duration);\n out.embelishments = lit.embelishments;\n out.beforeRest = lit.beforeRest;\n return out;\n }\n\n debugValue(): any {\n const out = { ...super.debugValue() };\n if (this.octave != 0) out.octave = this.octave;\n if (this.shift != 0) out.shift = this.shift;\n return out;\n }\n\n toString(): string {\n return `Note(${this.duration}-${this.value}-${this.octave})`;\n }\n\n equals(another: this): boolean {\n return super.equals(another) && this.octave == another.octave && this.shift == another.shift;\n }\n\n copyTo(another: this): void {\n super.copyTo(another);\n another.octave = this.octave;\n another.shift = this.shift;\n }\n}\n\nexport class Group extends Atom {\n /**\n * This indicates whether our duration is static or linear to number of\n * atoms in this group.\n */\n durationIsMultiplier = false;\n readonly atoms = new TSU.Lists.ValueList<Atom>();\n\n constructor(...atoms: Atom[]) {\n super(atoms.length == 0 ? ZERO : ONE);\n this.addAtoms(false, ...atoms);\n }\n\n equals(another: this, expect = false): boolean {\n if (!super.equals(another)) return false;\n return this.atoms.equals(another.atoms, (a1, a2) => a1.equals(a2));\n }\n\n copyTo(another: this): void {\n super.copyTo(another);\n another.durationIsMultiplier = this.durationIsMultiplier;\n this.atoms.forEach((atom) => another.atoms.add(atom.clone()));\n }\n\n get duration(): Fraction {\n if (this.durationIsMultiplier) {\n return this.totalChildDuration.divby(this._duration);\n } else {\n return this._duration;\n }\n }\n\n setDurationAsMultiplier(asMultiplier = true): this {\n this.durationIsMultiplier = asMultiplier;\n return this;\n }\n\n setDuration(d: Fraction, asMultiplier = false): this {\n this._duration = d;\n this.durationIsMultiplier = asMultiplier;\n return this;\n }\n // set duration(d: Fraction) { this._duration = d; }\n\n debugValue(): any {\n const out = { ...super.debugValue(), atoms: Array.from(this.atoms.values(), (a) => a.debugValue()) };\n // out.duration = this._duration.factorized.toString();\n // out.realDuration = this.duration.factorized.toString();\n if (this.durationIsMultiplier) out.durationIsMultiplier = true;\n return out;\n }\n\n /**\n * Splits this group into two parts such that first part (this group)\n * fits within the given duration and everything else longer than the\n * given duration then it is truncated to the given duration and a\n * continuation space is returned.\n */\n splitAt(requiredDuration: Fraction): TSU.Nullable<Group> {\n if (this.duration.isLTE(requiredDuration) || requiredDuration.isLTE(ZERO)) {\n return null;\n }\n const targetGroup = new Group();\n if (this.durationIsMultiplier) {\n targetGroup.durationIsMultiplier = true;\n targetGroup._duration = this._duration;\n }\n\n let remainingDur = this.duration;\n const totalChildDuration = this.totalChildDuration;\n const durationFactor = this.durationIsMultiplier\n ? ONE.divby(this._duration)\n : this._duration.divby(totalChildDuration, true);\n while (remainingDur.isGT(requiredDuration) && this.atoms.last) {\n const lastChild = this.atoms.last;\n // Child's duration is absolute in its own \"system\"\n // Its duration within the parent (this) group's frame of reference depends\n // on whether the parent's duration is absolute or as a multiplier\n //\n // realChildDuration = case (group.durationIsMultiper) {\n // | true => child.duration / this._duration\n // | false => child.duration * this._duration / total child duration\n // }\n const childDuration = lastChild.duration.times(durationFactor);\n const newDuration = remainingDur.minus(childDuration);\n if (newDuration.isGTE(requiredDuration)) {\n // remove ourselves and add to target\n // in both cases duration will be adjusted if need be\n this.removeAtoms(true, lastChild);\n targetGroup.insertAtomsAt(targetGroup.atoms.first, true, lastChild);\n if (newDuration.equals(requiredDuration)) {\n // we have reached the end so return\n return targetGroup;\n }\n } else {\n // our scenario is now this:\n //\n // totalParentDuration = 10\n // required = 8\n // lastChildDuration (relative to parent) is 5\n //\n // durWithoutLast = 10 - 5\n // newRequired = requiredDur - durWithoutLast = 3\n //\n // However 3 is a duration in the parent's frame of reference\n // this has to be converted back to the child's FoR\n const newRequiredDur = requiredDuration.minus(newDuration, true).divby(durationFactor, true);\n // console.log( \"newRequiredDur: \", newRequiredDur, \"requiedDur: \", requiredDuration, \"remainingDur: \", remainingDur,);\n // then the last item needs to be split, and by how much?\n const spillOver = lastChild.splitAt(newRequiredDur);\n if (spillOver == null) {\n throw new Error(\"Spill over cannot be null here\");\n }\n if (!this.durationIsMultiplier) {\n // Our own duration has also now changed\n this._duration = requiredDuration;\n } else {\n if (this._duration.isZero) throw new Error(\"How can this be?\");\n }\n spillOver.isContinuation = true;\n // Add spill over to the target\n targetGroup.insertAtomsAt(targetGroup.atoms.first, true, spillOver);\n return targetGroup;\n }\n remainingDur = newDuration;\n }\n return targetGroup;\n }\n\n get totalChildDuration(): Fraction {\n let out = ZERO;\n this.atoms.forEach((atom) => (out = out.plus(atom.duration)));\n return out;\n }\n\n /**\n * Inserts atom before a given cursor atom. If the cursor atom is null\n * then the atoms are appended at the end.\n */\n insertAtomsAt(beforeAtom: TSU.Nullable<Atom>, adjustDuration = false, ...atoms: Atom[]): this {\n adjustDuration = adjustDuration && !this.durationIsMultiplier;\n const oldChildDuration = adjustDuration ? this.totalChildDuration : ONE;\n // First form a chain of the given atoms\n for (const atom of atoms) {\n if (atom.parentGroup != null) {\n if (atom.parentGroup != this) {\n throw new Error(\"Atom belongs to another parent. Remove it first\");\n }\n atom.parentGroup.removeAtoms(false, atom);\n }\n if (atom.type == AtomType.REST) {\n const last = this.atoms.last;\n if (last && last.type != AtomType.GROUP && last.type != AtomType.LABEL) {\n (last as LeafAtom).beforeRest = true;\n }\n } else {\n atom.parentGroup = this;\n this.atoms.add(atom, beforeAtom);\n }\n }\n if (adjustDuration) {\n if (this._duration.isZero) {\n if (this.durationIsMultiplier) throw new Error(\"How can this be?\");\n this._duration = this.totalChildDuration;\n } else {\n const scaleFactor = this.totalChildDuration.divby(oldChildDuration);\n this._duration = this._duration.times(scaleFactor, true);\n }\n }\n return this;\n }\n\n /**\n * Adds atoms to the end of our atom list.\n */\n addAtoms(adjustDuration = false, ...atoms: Atom[]): this {\n return this.insertAtomsAt(null, adjustDuration, ...atoms);\n }\n\n /**\n * Removes atoms from our child list.\n *\n * @param adjustDuration If the duration is not a multiplier then it might\n * sometimes be useful to automatically adjust the duration\n * to accomodate the removal of the given atom.\n * @param atoms List of atoms to remove from this list.\n */\n removeAtoms(adjustDuration = false, ...atoms: Atom[]): this {\n adjustDuration = adjustDuration && !this.durationIsMultiplier;\n const oldChildDuration = adjustDuration ? this.totalChildDuration : ONE;\n for (const atom of atoms) {\n if (atom.parentGroup == this) {\n this.atoms.remove(atom);\n atom.parentGroup = null;\n } else if (atom.parentGroup != null) {\n throw new Error(\"Atom cannot be removed as it does not belong to this group\");\n }\n }\n if (adjustDuration) {\n if (this._duration.isZero) {\n if (this.durationIsMultiplier) throw new Error(\"How can this be?\");\n this._duration = this.totalChildDuration;\n } else {\n const scaleFactor = this.totalChildDuration.divby(oldChildDuration);\n this._duration = this._duration.times(scaleFactor, true);\n }\n }\n return this;\n }\n}\n\nexport class Line extends Entity {\n // Line can have atoms starting \"before\" the cycle. The offset tells how many notes\n // before or after the cycle this line's atoms start at.\n offset: Fraction = ZERO;\n roles: Role[] = [];\n\n // This is a very hacky solution to doing left side pre-margin text typically found\n // in notations - eg line X of a pallavi has this. This makes vertical space less\n // wasteful\n // A better solution is inter-beat annotation but it is very complex for now\n marginText = \"\";\n\n get isEmpty(): boolean {\n for (const r of this.roles) if (!r.isEmpty) return false;\n return true;\n }\n\n debugValue(): any {\n const out = {\n ...super.debugValue(),\n roles: this.roles.map((r) => r.debugValue()),\n // layoutParams: this.layoutParams?.uuid,\n };\n if (!this.offset.isZero) {\n out.offset = this.offset.toString();\n }\n return out;\n }\n\n copyTo(another: this): void {\n super.copyTo(another);\n another.roles = this.roles.map((r) => r.clone());\n }\n\n addAtoms(roleName: string, defaultToNotes: boolean, ...atoms: Atom[]): this {\n const role = this.ensureRole(roleName, defaultToNotes);\n role.addAtoms(...atoms);\n return this;\n }\n\n ensureRole(roleName: string, defaultToNotes: boolean): Role {\n // Ensure we have this many roles\n let ri = this.roles.findIndex((r) => r.name == roleName);\n if (ri < 0) {\n ri = this.roles.length;\n const role = new Role(this, roleName);\n role.defaultToNotes = defaultToNotes;\n this.roles.push(role);\n }\n return this.roles[ri];\n }\n\n /**\n * Returns the maximum duration of all roles in this line.\n */\n get duration(): Fraction {\n let max = ZERO;\n for (const role of this.roles) {\n max = TSU.Num.Fraction.max(role.duration, max);\n }\n return max;\n }\n}\n\nexport class Role extends Entity {\n defaultToNotes = true;\n atoms: Atom[] = [];\n\n constructor(public readonly line: Line, public readonly name: string) {\n super();\n }\n\n get isEmpty(): boolean {\n return this.atoms.length == 0;\n }\n\n debugValue(): any {\n return { name: this.name, atoms: this.atoms.map((a) => a.debugValue()) };\n }\n\n addAtoms(...atoms: Atom[]): void {\n let last: null | Atom = null;\n for (const atom of atoms) {\n if (atom.type == AtomType.REST) {\n if (last && last.type != AtomType.GROUP && last.type != AtomType.LABEL) {\n (last as LeafAtom).beforeRest = true;\n }\n } else {\n this.atoms.push(atom);\n }\n last = atom;\n }\n }\n\n copyTo(another: Role): void {\n another.addAtoms(...this.atoms);\n }\n\n /**\n * Duration for this role.\n */\n get duration(): Fraction {\n return this.atoms.reduce((a, b) => a.plus(b.duration), ZERO);\n }\n}\n"]}
@@ -0,0 +1,47 @@
1
+ import * as TSU from "@panyam/tsutils";
2
+ import { Entity, TimedEntity } from "./entity";
3
+ declare type Fraction = TSU.Num.Fraction;
4
+ export declare type CyclePosition = [number, number, number];
5
+ export declare type CycleIterator = Generator<[CyclePosition, Fraction]>;
6
+ export declare class CycleCursor {
7
+ readonly cycle: Cycle;
8
+ barIndex: number;
9
+ beatIndex: number;
10
+ instance: number;
11
+ constructor(cycle: Cycle, barIndex?: number, beatIndex?: number, instance?: number);
12
+ get next(): [CyclePosition, Fraction];
13
+ get prev(): [CyclePosition, Fraction];
14
+ }
15
+ export declare class Bar extends TimedEntity {
16
+ name: string;
17
+ beatLengths: Fraction[];
18
+ beatCounts: number[];
19
+ constructor(config?: any);
20
+ debugValue(): any;
21
+ equals(another: this): boolean;
22
+ copyTo(another: this): void;
23
+ instanceCount(beatIndex: number): number;
24
+ get beatCount(): number;
25
+ get totalBeatCount(): number;
26
+ get duration(): Fraction;
27
+ }
28
+ export declare class Cycle extends TimedEntity {
29
+ name: string;
30
+ bars: Bar[];
31
+ static readonly DEFAULT: Cycle;
32
+ constructor(config?: null | {
33
+ name?: string;
34
+ bars?: Bar[];
35
+ });
36
+ debugValue(): any;
37
+ children(): Entity[];
38
+ equals(another: this): boolean;
39
+ getAtIndex(globalIndex: number): [number, CyclePosition, Fraction];
40
+ getPosition(globalOffset: Fraction): [number, CyclePosition, Fraction, number];
41
+ iterateBeats(startBar?: number, startBeat?: number, startInstance?: number): CycleIterator;
42
+ copyTo(another: this): void;
43
+ get beatCount(): number;
44
+ get totalBeatCount(): number;
45
+ get duration(): Fraction;
46
+ }
47
+ export {};