notations 0.0.44 → 0.0.47

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 (111) hide show
  1. package/README.md +38 -0
  2. package/lib/cjs/beats.d.ts +111 -0
  3. package/lib/cjs/beats.js +527 -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 +73 -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 +257 -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 +175 -138
  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 +58 -111
  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 +39 -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 +7 -1
  22. package/lib/cjs/carnatic/index.js.map +1 -1
  23. package/lib/cjs/commands.js +5 -1
  24. package/lib/cjs/commands.js.map +1 -1
  25. package/lib/cjs/core.d.ts +15 -73
  26. package/lib/cjs/core.js +201 -565
  27. package/lib/cjs/core.js.map +1 -1
  28. package/lib/cjs/cycle.d.ts +47 -0
  29. package/lib/cjs/cycle.js +496 -0
  30. package/lib/cjs/cycle.js.map +1 -0
  31. package/lib/cjs/entity.d.ts +24 -0
  32. package/lib/cjs/entity.js +135 -0
  33. package/lib/cjs/entity.js.map +1 -0
  34. package/lib/cjs/index.d.ts +3 -0
  35. package/lib/cjs/index.js +8 -1
  36. package/lib/cjs/index.js.map +1 -1
  37. package/lib/cjs/iterators.d.ts +14 -2
  38. package/lib/cjs/iterators.js +82 -6
  39. package/lib/cjs/iterators.js.map +1 -1
  40. package/lib/cjs/layouts.d.ts +7 -106
  41. package/lib/cjs/layouts.js +9 -479
  42. package/lib/cjs/layouts.js.map +1 -1
  43. package/lib/cjs/loader.d.ts +2 -1
  44. package/lib/cjs/loader.js +36 -27
  45. package/lib/cjs/loader.js.map +1 -1
  46. package/lib/cjs/notation.d.ts +3 -1
  47. package/lib/cjs/notation.js +6 -4
  48. package/lib/cjs/notation.js.map +1 -1
  49. package/lib/cjs/parser.js +10 -5
  50. package/lib/cjs/parser.js.map +1 -1
  51. package/lib/cjs/shapes.d.ts +35 -14
  52. package/lib/cjs/shapes.js +158 -44
  53. package/lib/cjs/shapes.js.map +1 -1
  54. package/lib/cjs/utils.d.ts +2 -1
  55. package/lib/cjs/utils.js +9 -4
  56. package/lib/cjs/utils.js.map +1 -1
  57. package/lib/esm/beats.d.ts +111 -0
  58. package/lib/esm/beats.js +501 -0
  59. package/lib/esm/beats.js.map +1 -0
  60. package/lib/esm/carnatic/LineView.d.ts +20 -0
  61. package/lib/esm/carnatic/LineView.js +47 -0
  62. package/lib/esm/carnatic/LineView.js.map +1 -0
  63. package/lib/esm/carnatic/NotationView.d.ts +31 -0
  64. package/lib/esm/carnatic/NotationView.js +231 -0
  65. package/lib/esm/carnatic/NotationView.js.map +1 -0
  66. package/lib/esm/carnatic/atomviews.d.ts +14 -7
  67. package/lib/esm/carnatic/atomviews.js +170 -137
  68. package/lib/esm/carnatic/atomviews.js.map +1 -1
  69. package/lib/esm/carnatic/beatviews.d.ts +10 -14
  70. package/lib/esm/carnatic/beatviews.js +54 -111
  71. package/lib/esm/carnatic/beatviews.js.map +1 -1
  72. package/lib/esm/carnatic/embelishments.d.ts +38 -32
  73. package/lib/esm/carnatic/embelishments.js +33 -18
  74. package/lib/esm/carnatic/embelishments.js.map +1 -1
  75. package/lib/esm/carnatic/index.d.ts +2 -0
  76. package/lib/esm/carnatic/index.js +2 -0
  77. package/lib/esm/carnatic/index.js.map +1 -1
  78. package/lib/esm/core.d.ts +15 -73
  79. package/lib/esm/core.js +192 -560
  80. package/lib/esm/core.js.map +1 -1
  81. package/lib/esm/cycle.d.ts +47 -0
  82. package/lib/esm/cycle.js +470 -0
  83. package/lib/esm/cycle.js.map +1 -0
  84. package/lib/esm/entity.d.ts +24 -0
  85. package/lib/esm/entity.js +132 -0
  86. package/lib/esm/entity.js.map +1 -0
  87. package/lib/esm/index.d.ts +3 -0
  88. package/lib/esm/index.js +3 -0
  89. package/lib/esm/index.js.map +1 -1
  90. package/lib/esm/iterators.d.ts +14 -2
  91. package/lib/esm/iterators.js +73 -1
  92. package/lib/esm/iterators.js.map +1 -1
  93. package/lib/esm/layouts.d.ts +7 -106
  94. package/lib/esm/layouts.js +1 -475
  95. package/lib/esm/layouts.js.map +1 -1
  96. package/lib/esm/loader.d.ts +2 -1
  97. package/lib/esm/loader.js +27 -23
  98. package/lib/esm/loader.js.map +1 -1
  99. package/lib/esm/notation.d.ts +3 -1
  100. package/lib/esm/notation.js +3 -1
  101. package/lib/esm/notation.js.map +1 -1
  102. package/lib/esm/parser.js +5 -4
  103. package/lib/esm/parser.js.map +1 -1
  104. package/lib/esm/shapes.d.ts +35 -14
  105. package/lib/esm/shapes.js +152 -42
  106. package/lib/esm/shapes.js.map +1 -1
  107. package/lib/esm/utils.d.ts +2 -1
  108. package/lib/esm/utils.js +3 -2
  109. package/lib/esm/utils.js.map +1 -1
  110. package/package.json +33 -28
  111. package/styles/NotationView.scss +35 -0
@@ -0,0 +1,496 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __assign = (this && this.__assign) || function () {
18
+ __assign = Object.assign || function(t) {
19
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
20
+ s = arguments[i];
21
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
22
+ t[p] = s[p];
23
+ }
24
+ return t;
25
+ };
26
+ return __assign.apply(this, arguments);
27
+ };
28
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
29
+ if (k2 === undefined) k2 = k;
30
+ var desc = Object.getOwnPropertyDescriptor(m, k);
31
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
32
+ desc = { enumerable: true, get: function() { return m[k]; } };
33
+ }
34
+ Object.defineProperty(o, k2, desc);
35
+ }) : (function(o, m, k, k2) {
36
+ if (k2 === undefined) k2 = k;
37
+ o[k2] = m[k];
38
+ }));
39
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
40
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
41
+ }) : function(o, v) {
42
+ o["default"] = v;
43
+ });
44
+ var __importStar = (this && this.__importStar) || function (mod) {
45
+ if (mod && mod.__esModule) return mod;
46
+ var result = {};
47
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
48
+ __setModuleDefault(result, mod);
49
+ return result;
50
+ };
51
+ var __generator = (this && this.__generator) || function (thisArg, body) {
52
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
53
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
54
+ function verb(n) { return function (v) { return step([n, v]); }; }
55
+ function step(op) {
56
+ if (f) throw new TypeError("Generator is already executing.");
57
+ while (_) try {
58
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
59
+ if (y = 0, t) op = [op[0] & 2, t.value];
60
+ switch (op[0]) {
61
+ case 0: case 1: t = op; break;
62
+ case 4: _.label++; return { value: op[1], done: false };
63
+ case 5: _.label++; y = op[1]; op = [0]; continue;
64
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
65
+ default:
66
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
67
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
68
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
69
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
70
+ if (t[2]) _.ops.pop();
71
+ _.trys.pop(); continue;
72
+ }
73
+ op = body.call(thisArg, _);
74
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
75
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
76
+ }
77
+ };
78
+ var __values = (this && this.__values) || function(o) {
79
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
80
+ if (m) return m.call(o);
81
+ if (o && typeof o.length === "number") return {
82
+ next: function () {
83
+ if (o && i >= o.length) o = void 0;
84
+ return { value: o && o[i++], done: !o };
85
+ }
86
+ };
87
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
88
+ };
89
+ var __read = (this && this.__read) || function (o, n) {
90
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
91
+ if (!m) return o;
92
+ var i = m.call(o), r, ar = [], e;
93
+ try {
94
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
95
+ }
96
+ catch (error) { e = { error: error }; }
97
+ finally {
98
+ try {
99
+ if (r && !r.done && (m = i["return"])) m.call(i);
100
+ }
101
+ finally { if (e) throw e.error; }
102
+ }
103
+ return ar;
104
+ };
105
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
106
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
107
+ if (ar || !(i in from)) {
108
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
109
+ ar[i] = from[i];
110
+ }
111
+ }
112
+ return to.concat(ar || Array.prototype.slice.call(from));
113
+ };
114
+ Object.defineProperty(exports, "__esModule", { value: true });
115
+ exports.Cycle = exports.Bar = exports.CycleCursor = void 0;
116
+ var TSU = __importStar(require("@panyam/tsutils"));
117
+ var entity_1 = require("./entity");
118
+ var ZERO = TSU.Num.Fraction.ZERO;
119
+ var ONE = TSU.Num.Fraction.ONE;
120
+ var CycleCursor = (function () {
121
+ function CycleCursor(cycle, barIndex, beatIndex, instance) {
122
+ if (barIndex === void 0) { barIndex = 0; }
123
+ if (beatIndex === void 0) { beatIndex = 0; }
124
+ if (instance === void 0) { instance = 0; }
125
+ this.cycle = cycle;
126
+ this.barIndex = barIndex;
127
+ this.beatIndex = beatIndex;
128
+ this.instance = instance;
129
+ }
130
+ Object.defineProperty(CycleCursor.prototype, "next", {
131
+ get: function () {
132
+ var currBar = this.cycle.bars[this.barIndex];
133
+ var result = [
134
+ [this.barIndex, this.beatIndex, this.instance],
135
+ currBar.beatLengths[this.beatIndex],
136
+ ];
137
+ this.instance++;
138
+ if (!currBar.beatCounts[this.beatIndex] || this.instance >= currBar.beatCounts[this.beatIndex]) {
139
+ this.instance = 0;
140
+ this.beatIndex++;
141
+ if (this.beatIndex >= currBar.beatLengths.length) {
142
+ this.beatIndex = 0;
143
+ this.barIndex++;
144
+ if (this.barIndex >= this.cycle.bars.length) {
145
+ this.barIndex = 0;
146
+ }
147
+ }
148
+ }
149
+ return result;
150
+ },
151
+ enumerable: false,
152
+ configurable: true
153
+ });
154
+ Object.defineProperty(CycleCursor.prototype, "prev", {
155
+ get: function () {
156
+ var currBar = this.cycle.bars[this.barIndex];
157
+ var result = [
158
+ [this.barIndex, this.beatIndex, this.instance],
159
+ currBar.beatLengths[this.beatIndex],
160
+ ];
161
+ this.instance--;
162
+ if (this.instance < 0) {
163
+ this.beatIndex--;
164
+ if (this.beatIndex < 0) {
165
+ this.barIndex--;
166
+ if (this.barIndex < 0) {
167
+ this.barIndex = this.cycle.bars.length - 1;
168
+ }
169
+ this.beatIndex = this.cycle.bars[this.barIndex].beatCount - 1;
170
+ }
171
+ this.instance = (this.cycle.bars[this.barIndex].beatCounts[this.beatIndex] || 1) - 1;
172
+ }
173
+ return result;
174
+ },
175
+ enumerable: false,
176
+ configurable: true
177
+ });
178
+ return CycleCursor;
179
+ }());
180
+ exports.CycleCursor = CycleCursor;
181
+ var Bar = (function (_super) {
182
+ __extends(Bar, _super);
183
+ function Bar(config) {
184
+ var e_1, _a, e_2, _b;
185
+ if (config === void 0) { config = null; }
186
+ var _this = _super.call(this, (config = config || {})) || this;
187
+ _this.beatLengths = [];
188
+ _this.beatCounts = [];
189
+ _this.name = config.name || "";
190
+ try {
191
+ for (var _c = __values(config.beatLengths || []), _d = _c.next(); !_d.done; _d = _c.next()) {
192
+ var bl = _d.value;
193
+ if (typeof bl === "number") {
194
+ _this.beatLengths.push(TSU.Num.Frac(bl));
195
+ }
196
+ else {
197
+ _this.beatLengths.push(bl);
198
+ }
199
+ }
200
+ }
201
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
202
+ finally {
203
+ try {
204
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
205
+ }
206
+ finally { if (e_1) throw e_1.error; }
207
+ }
208
+ try {
209
+ for (var _e = __values(config.beatCounts || []), _f = _e.next(); !_f.done; _f = _e.next()) {
210
+ var bc = _f.value;
211
+ _this.beatCounts.push(bc);
212
+ }
213
+ }
214
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
215
+ finally {
216
+ try {
217
+ if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
218
+ }
219
+ finally { if (e_2) throw e_2.error; }
220
+ }
221
+ while (_this.beatCounts.length < _this.beatLengths.length) {
222
+ _this.beatCounts.push(1);
223
+ }
224
+ return _this;
225
+ }
226
+ Bar.prototype.debugValue = function () {
227
+ return __assign(__assign({}, _super.prototype.debugValue.call(this)), { name: name, beatLengths: this.beatLengths });
228
+ };
229
+ Bar.prototype.equals = function (another) {
230
+ if (!_super.prototype.equals.call(this, another))
231
+ return false;
232
+ if (this.beatLengths.length != another.beatLengths.length)
233
+ return false;
234
+ if (this.beatCounts.length != another.beatCounts.length)
235
+ return false;
236
+ for (var i = 0; i < this.beatLengths.length; i++) {
237
+ if (!this.beatLengths[i].equals(another.beatLengths[i]))
238
+ return false;
239
+ }
240
+ for (var i = 0; i < this.beatCounts.length; i++) {
241
+ if (this.beatCounts[i] != another.beatCounts[i])
242
+ return false;
243
+ }
244
+ return true;
245
+ };
246
+ Bar.prototype.copyTo = function (another) {
247
+ _super.prototype.copyTo.call(this, another);
248
+ another.name = this.name;
249
+ another.beatLengths = __spreadArray([], __read(this.beatLengths), false);
250
+ another.beatCounts = __spreadArray([], __read(this.beatCounts), false);
251
+ };
252
+ Bar.prototype.instanceCount = function (beatIndex) {
253
+ if (beatIndex > this.beatCounts.length) {
254
+ return 1;
255
+ }
256
+ else {
257
+ return this.beatCounts[beatIndex];
258
+ }
259
+ };
260
+ Object.defineProperty(Bar.prototype, "beatCount", {
261
+ get: function () {
262
+ return this.beatLengths.length;
263
+ },
264
+ enumerable: false,
265
+ configurable: true
266
+ });
267
+ Object.defineProperty(Bar.prototype, "totalBeatCount", {
268
+ get: function () {
269
+ var out = 0;
270
+ for (var i = 0; i < this.beatLengths.length; i++) {
271
+ out += this.beatCounts[i] || 1;
272
+ }
273
+ return out;
274
+ },
275
+ enumerable: false,
276
+ configurable: true
277
+ });
278
+ Object.defineProperty(Bar.prototype, "duration", {
279
+ get: function () {
280
+ var total = ZERO;
281
+ for (var i = 0; i < this.beatLengths.length; i++) {
282
+ total = total.plus(this.beatLengths[i].timesNum(this.beatCounts[i] || 1));
283
+ }
284
+ return total;
285
+ },
286
+ enumerable: false,
287
+ configurable: true
288
+ });
289
+ return Bar;
290
+ }(entity_1.TimedEntity));
291
+ exports.Bar = Bar;
292
+ var Cycle = (function (_super) {
293
+ __extends(Cycle, _super);
294
+ function Cycle(config) {
295
+ if (config === void 0) { config = null; }
296
+ var _this = _super.call(this, (config = config || {})) || this;
297
+ _this.name = config.name || "";
298
+ _this.bars = config.bars || [];
299
+ return _this;
300
+ }
301
+ Cycle.prototype.debugValue = function () {
302
+ return __assign(__assign({}, _super.prototype.debugValue.call(this)), { name: name, bars: this.bars.map(function (p) { return p.debugValue(); }) });
303
+ };
304
+ Cycle.prototype.children = function () {
305
+ return this.bars;
306
+ };
307
+ Cycle.prototype.equals = function (another) {
308
+ if (!_super.prototype.equals.call(this, another)) {
309
+ return false;
310
+ }
311
+ if (this.bars.length != another.bars.length)
312
+ return false;
313
+ for (var i = 0; i < this.bars.length; i++) {
314
+ if (!this.bars[i].equals(another.bars[i]))
315
+ return false;
316
+ }
317
+ return true;
318
+ };
319
+ Cycle.prototype.getAtIndex = function (globalIndex) {
320
+ var cycle = 0;
321
+ while (globalIndex < 0) {
322
+ globalIndex += this.totalBeatCount;
323
+ cycle--;
324
+ }
325
+ if (globalIndex >= this.totalBeatCount) {
326
+ cycle = Math.floor(globalIndex / this.totalBeatCount);
327
+ }
328
+ globalIndex = globalIndex % this.totalBeatCount;
329
+ var offset = ZERO;
330
+ for (var barIndex = 0; barIndex < this.bars.length; barIndex++) {
331
+ var bar = this.bars[barIndex];
332
+ if (globalIndex >= bar.totalBeatCount) {
333
+ globalIndex -= bar.totalBeatCount;
334
+ offset = offset.plus(bar.duration);
335
+ }
336
+ else {
337
+ for (var beatIndex = 0; beatIndex < bar.beatCount; beatIndex++) {
338
+ var beatLength = bar.beatLengths[beatIndex];
339
+ var beatCount = bar.beatCounts[beatIndex] || 1;
340
+ if (globalIndex >= beatCount) {
341
+ globalIndex -= beatCount;
342
+ offset = offset.plus(beatLength.timesNum(beatCount));
343
+ }
344
+ else {
345
+ var instance = globalIndex;
346
+ return [cycle, [barIndex, beatIndex, instance], offset.plus(beatLength.timesNum(instance))];
347
+ }
348
+ }
349
+ }
350
+ }
351
+ throw new Error("Should not be here!");
352
+ };
353
+ Cycle.prototype.getPosition = function (globalOffset) {
354
+ var duration = this.duration;
355
+ var cycleNum = 0;
356
+ if (globalOffset.isLT(ZERO)) {
357
+ while (globalOffset.isLT(ZERO)) {
358
+ cycleNum--;
359
+ globalOffset = globalOffset.plus(duration);
360
+ }
361
+ }
362
+ else if (globalOffset.isGTE(duration)) {
363
+ var realOffset = globalOffset.mod(duration);
364
+ globalOffset = globalOffset.minus(realOffset).divby(duration);
365
+ TSU.assert(globalOffset.isWhole);
366
+ cycleNum = globalOffset.floor;
367
+ globalOffset = realOffset;
368
+ }
369
+ var globalIndex = 0;
370
+ for (var barIndex = 0; barIndex < this.bars.length; barIndex++) {
371
+ var bar = this.bars[barIndex];
372
+ var barDuration = bar.duration;
373
+ if (globalOffset.isGTE(barDuration)) {
374
+ globalOffset = globalOffset.minus(barDuration);
375
+ }
376
+ else {
377
+ for (var beatIndex = 0; beatIndex < bar.beatCount; beatIndex++) {
378
+ var beatLength = bar.beatLengths[beatIndex];
379
+ var beatCount = bar.beatCounts[beatIndex] || 1;
380
+ for (var instance = 0; instance < beatCount; instance++, globalIndex++) {
381
+ if (globalOffset.isGTE(beatLength)) {
382
+ globalOffset = globalOffset.minus(beatLength);
383
+ }
384
+ else {
385
+ return [cycleNum, [barIndex, beatIndex, instance], globalOffset, globalIndex];
386
+ }
387
+ }
388
+ }
389
+ }
390
+ globalIndex += bar.totalBeatCount;
391
+ }
392
+ throw new Error("Should not be here!");
393
+ };
394
+ Cycle.prototype.iterateBeats = function (startBar, startBeat, startInstance) {
395
+ var barIndex, beatIndex, instanceIndex, currBar;
396
+ if (startBar === void 0) { startBar = 0; }
397
+ if (startBeat === void 0) { startBeat = 0; }
398
+ if (startInstance === void 0) { startInstance = 0; }
399
+ return __generator(this, function (_a) {
400
+ switch (_a.label) {
401
+ case 0:
402
+ barIndex = startBar;
403
+ beatIndex = startBeat;
404
+ instanceIndex = startInstance;
405
+ _a.label = 1;
406
+ case 1:
407
+ if (!true) return [3, 3];
408
+ currBar = this.bars[barIndex];
409
+ return [4, [[barIndex, beatIndex, instanceIndex], currBar.beatLengths[beatIndex]]];
410
+ case 2:
411
+ _a.sent();
412
+ instanceIndex++;
413
+ if (!currBar.beatCounts[beatIndex] || instanceIndex >= currBar.beatCounts[beatIndex]) {
414
+ instanceIndex = 0;
415
+ beatIndex++;
416
+ if (beatIndex >= currBar.beatLengths.length) {
417
+ beatIndex = 0;
418
+ barIndex++;
419
+ if (barIndex >= this.bars.length) {
420
+ barIndex = 0;
421
+ }
422
+ }
423
+ }
424
+ return [3, 1];
425
+ case 3: return [2];
426
+ }
427
+ });
428
+ };
429
+ Cycle.prototype.copyTo = function (another) {
430
+ _super.prototype.copyTo.call(this, another);
431
+ another.name = this.name;
432
+ another.bars = this.bars.map(function (x) { return x.clone(); });
433
+ };
434
+ Object.defineProperty(Cycle.prototype, "beatCount", {
435
+ get: function () {
436
+ var e_3, _a;
437
+ var out = 0;
438
+ try {
439
+ for (var _b = __values(this.bars), _c = _b.next(); !_c.done; _c = _b.next()) {
440
+ var bar = _c.value;
441
+ out += bar.beatCount;
442
+ }
443
+ }
444
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
445
+ finally {
446
+ try {
447
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
448
+ }
449
+ finally { if (e_3) throw e_3.error; }
450
+ }
451
+ return out;
452
+ },
453
+ enumerable: false,
454
+ configurable: true
455
+ });
456
+ Object.defineProperty(Cycle.prototype, "totalBeatCount", {
457
+ get: function () {
458
+ var e_4, _a;
459
+ var out = 0;
460
+ try {
461
+ for (var _b = __values(this.bars), _c = _b.next(); !_c.done; _c = _b.next()) {
462
+ var bar = _c.value;
463
+ out += bar.totalBeatCount;
464
+ }
465
+ }
466
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
467
+ finally {
468
+ try {
469
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
470
+ }
471
+ finally { if (e_4) throw e_4.error; }
472
+ }
473
+ return out;
474
+ },
475
+ enumerable: false,
476
+ configurable: true
477
+ });
478
+ Object.defineProperty(Cycle.prototype, "duration", {
479
+ get: function () {
480
+ return this.bars.reduce(function (x, y) { return x.plus(y.duration); }, ZERO);
481
+ },
482
+ enumerable: false,
483
+ configurable: true
484
+ });
485
+ Cycle.DEFAULT = new Cycle({
486
+ name: "Adi Thalam",
487
+ bars: [
488
+ new Bar({ name: "Laghu", beatLengths: [1, 1, 1, 1] }),
489
+ new Bar({ name: "Dhrutam", beatLengths: [1, 1] }),
490
+ new Bar({ name: "Dhrutam", beatLengths: [1, 1] }),
491
+ ],
492
+ });
493
+ return Cycle;
494
+ }(entity_1.TimedEntity));
495
+ exports.Cycle = Cycle;
496
+ //# sourceMappingURL=cycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cycle.js","sourceRoot":"","sources":["../../src/cycle.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAAuC;AACvC,mCAA+C;AAS/C,IAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;AACnC,IAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;AAEjC;IACE,qBAA4B,KAAY,EAAS,QAAY,EAAS,SAAa,EAAS,QAAY;QAAvD,yBAAA,EAAA,YAAY;QAAS,0BAAA,EAAA,aAAa;QAAS,yBAAA,EAAA,YAAY;QAA5E,UAAK,GAAL,KAAK,CAAO;QAAS,aAAQ,GAAR,QAAQ,CAAI;QAAS,cAAS,GAAT,SAAS,CAAI;QAAS,aAAQ,GAAR,QAAQ,CAAI;IAAG,CAAC;IAE5G,sBAAI,6BAAI;aAAR;YACE,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAM,MAAM,GAA8B;gBACxC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC;gBAC9C,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;aACpC,CAAC;YACF,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;gBAC9F,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;gBAClB,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,IAAI,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE;oBAChD,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;oBACnB,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAChB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;wBAC3C,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;qBACnB;iBACF;aACF;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;;;OAAA;IAED,sBAAI,6BAAI;aAAR;YACE,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAM,MAAM,GAA8B;gBACxC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC;gBAC9C,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;aACpC,CAAC;YAGF,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE;gBACrB,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE;oBACtB,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAChB,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE;wBACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;qBAC5C;oBACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;iBAC/D;gBACD,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;aACtF;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;;;OAAA;IACH,kBAAC;AAAD,CAAC,AA9CD,IA8CC;AA9CY,kCAAW;AAgDxB;IAAyB,uBAAW;IAQlC,aAAY,MAAkB;;QAAlB,uBAAA,EAAA,aAAkB;QAA9B,YACE,kBAAM,CAAC,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC,CAAC,SAe/B;QArBD,iBAAW,GAAe,EAAE,CAAC;QAG7B,gBAAU,GAAa,EAAE,CAAC;QAIxB,KAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;;YAC9B,KAAiB,IAAA,KAAA,SAAA,MAAM,CAAC,WAAW,IAAI,EAAE,CAAA,gBAAA,4BAAE;gBAAtC,IAAM,EAAE,WAAA;gBACX,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE;oBAC1B,KAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;iBACzC;qBAAM;oBACL,KAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;iBAC3B;aACF;;;;;;;;;;YACD,KAAiB,IAAA,KAAA,SAAA,MAAM,CAAC,UAAU,IAAI,EAAE,CAAA,gBAAA,4BAAE;gBAArC,IAAM,EAAE,WAAA;gBACX,KAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAC1B;;;;;;;;;QACD,OAAO,KAAI,CAAC,UAAU,CAAC,MAAM,GAAG,KAAI,CAAC,WAAW,CAAC,MAAM,EAAE;YACvD,KAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACzB;;IACH,CAAC;IAED,wBAAU,GAAV;QACE,6BAAY,iBAAM,UAAU,WAAE,KAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,IAAG;IAC9E,CAAC;IAED,oBAAM,GAAN,UAAO,OAAa;QAClB,IAAI,CAAC,iBAAM,MAAM,YAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;QACzC,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QACxE,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QACtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAChD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;SACvE;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC/C,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;SAC/D;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oBAAM,GAAN,UAAO,OAAa;QAClB,iBAAM,MAAM,YAAC,OAAO,CAAC,CAAC;QACtB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACzB,OAAO,CAAC,WAAW,4BAAO,IAAI,CAAC,WAAW,SAAC,CAAC;QAC5C,OAAO,CAAC,UAAU,4BAAO,IAAI,CAAC,UAAU,SAAC,CAAC;IAC5C,CAAC;IAED,2BAAa,GAAb,UAAc,SAAiB;QAC7B,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;YAEtC,OAAO,CAAC,CAAC;SACV;aAAM;YACL,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;SACnC;IACH,CAAC;IAED,sBAAI,0BAAS;aAAb;YACE,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QACjC,CAAC;;;OAAA;IAED,sBAAI,+BAAc;aAAlB;YACE,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAChD,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aAChC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;;;OAAA;IAKD,sBAAI,yBAAQ;aAAZ;YACE,IAAI,KAAK,GAAG,IAAI,CAAC;YACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAChD,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAC3E;YACD,OAAO,KAAK,CAAC;QACf,CAAC;;;OAAA;IACH,UAAC;AAAD,CAAC,AAjFD,CAAyB,oBAAW,GAiFnC;AAjFY,kBAAG;AAoFhB;IAA2B,yBAAW;IAapC,eAAY,MAAqD;QAArD,uBAAA,EAAA,aAAqD;QAAjE,YACE,kBAAM,CAAC,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC,CAAC,SAG/B;QAFC,KAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QAC9B,KAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;;IAChC,CAAC;IAED,0BAAU,GAAV;QACE,6BAAY,iBAAM,UAAU,WAAE,KAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,UAAU,EAAE,EAAd,CAAc,CAAC,IAAG;IAC3F,CAAC;IAED,wBAAQ,GAAR;QACE,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,sBAAM,GAAN,UAAO,OAAa;QAClB,IAAI,CAAC,iBAAM,MAAM,YAAC,OAAO,CAAC,EAAE;YAC1B,OAAO,KAAK,CAAC;SACd;QACD,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACzC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;SACzD;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAeD,0BAAU,GAAV,UAAW,WAAmB;QAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,OAAO,WAAW,GAAG,CAAC,EAAE;YACtB,WAAW,IAAI,IAAI,CAAC,cAAc,CAAC;YACnC,KAAK,EAAE,CAAC;SACT;QACD,IAAI,WAAW,IAAI,IAAI,CAAC,cAAc,EAAE;YACtC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;SACvD;QACD,WAAW,GAAG,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC;QAChD,IAAI,MAAM,GAAG,IAAI,CAAC;QAClB,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;YAC9D,IAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAChC,IAAI,WAAW,IAAI,GAAG,CAAC,cAAc,EAAE;gBACrC,WAAW,IAAI,GAAG,CAAC,cAAc,CAAC;gBAClC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;aACpC;iBAAM;gBAEL,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE;oBAC9D,IAAM,UAAU,GAAG,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;oBAC9C,IAAM,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oBACjD,IAAI,WAAW,IAAI,SAAS,EAAE;wBAC5B,WAAW,IAAI,SAAS,CAAC;wBACzB,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;qBACtD;yBAAM;wBAEL,IAAM,QAAQ,GAAG,WAAW,CAAC;wBAC7B,OAAO,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;qBAC7F;iBACF;aACF;SACF;QACD,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;IAcD,2BAAW,GAAX,UAAY,YAAsB;QAChC,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC3B,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAC9B,QAAQ,EAAE,CAAC;gBACX,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC5C;SACF;aAAM,IAAI,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;YACvC,IAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC9C,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC9D,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YACjC,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC;YAC9B,YAAY,GAAG,UAAU,CAAC;SAC3B;QAGD,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;YAC9D,IAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAChC,IAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,CAAC;YACjC,IAAI,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;gBACnC,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;aAChD;iBAAM;gBAEL,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE;oBAC9D,IAAM,UAAU,GAAG,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;oBAC9C,IAAM,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oBACjD,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,SAAS,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,EAAE;wBACtE,IAAI,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE;4BAClC,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;yBAC/C;6BAAM;4BAEL,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;yBAC/E;qBACF;iBACF;aACF;YACD,WAAW,IAAI,GAAG,CAAC,cAAc,CAAC;SACnC;QAED,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;IAEA,4BAAY,GAAb,UAAc,QAAY,EAAE,SAAa,EAAE,aAAiB;;QAA9C,yBAAA,EAAA,YAAY;QAAE,0BAAA,EAAA,aAAa;QAAE,8BAAA,EAAA,iBAAiB;;;;oBACtD,QAAQ,GAAG,QAAQ,CAAC;oBACpB,SAAS,GAAG,SAAS,CAAC;oBACtB,aAAa,GAAG,aAAa,CAAC;;;yBAC3B,IAAI;oBACH,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACpC,WAAM,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAA;;oBAA5E,SAA4E,CAAC;oBAC7E,aAAa,EAAE,CAAC;oBAChB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;wBACpF,aAAa,GAAG,CAAC,CAAC;wBAClB,SAAS,EAAE,CAAC;wBACZ,IAAI,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE;4BAC3C,SAAS,GAAG,CAAC,CAAC;4BACd,QAAQ,EAAE,CAAC;4BACX,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gCAChC,QAAQ,GAAG,CAAC,CAAC;6BACd;yBACF;qBACF;;;;;KAEJ;IAED,sBAAM,GAAN,UAAO,OAAa;QAClB,iBAAM,MAAM,YAAC,OAAO,CAAC,CAAC;QACtB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACzB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,KAAK,EAAE,EAAT,CAAS,CAAC,CAAC;IACjD,CAAC;IAED,sBAAI,4BAAS;aAAb;;YACE,IAAI,GAAG,GAAG,CAAC,CAAC;;gBACZ,KAAkB,IAAA,KAAA,SAAA,IAAI,CAAC,IAAI,CAAA,gBAAA;oBAAtB,IAAM,GAAG,WAAA;oBAAe,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC;iBAAA;;;;;;;;;YAClD,OAAO,GAAG,CAAC;QACb,CAAC;;;OAAA;IAED,sBAAI,iCAAc;aAAlB;;YACE,IAAI,GAAG,GAAG,CAAC,CAAC;;gBACZ,KAAkB,IAAA,KAAA,SAAA,IAAI,CAAC,IAAI,CAAA,gBAAA;oBAAtB,IAAM,GAAG,WAAA;oBAAe,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC;iBAAA;;;;;;;;;YACvD,OAAO,GAAG,CAAC;QACb,CAAC;;;OAAA;IAKD,sBAAI,2BAAQ;aAAZ;YACE,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAlB,CAAkB,EAAE,IAAI,CAAC,CAAC;QAC9D,CAAC;;;OAAA;IAvLe,aAAO,GAAG,IAAI,KAAK,CAAC;QAClC,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACrD,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACjD,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;SAClD;KACF,CAAC,CAAC;IAiLL,YAAC;CAAA,AA5LD,CAA2B,oBAAW,GA4LrC;AA5LY,sBAAK","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;\nexport type CyclePosition = [number, number, number];\nexport type CycleIterator = Generator<[CyclePosition, Fraction]>;\n\nconst ZERO = TSU.Num.Fraction.ZERO;\nconst ONE = TSU.Num.Fraction.ONE;\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 instanceCount(beatIndex: number): number {\n if (beatIndex > this.beatCounts.length) {\n // by default each beat has 1 instance?\n return 1;\n } else {\n return this.beatCounts[beatIndex];\n }\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"]}
@@ -0,0 +1,24 @@
1
+ import * as TSU from "@panyam/tsutils";
2
+ export declare class Entity {
3
+ private static counter;
4
+ readonly uuid: number;
5
+ constructor(config?: any);
6
+ debugValue(): any;
7
+ children(): Entity[];
8
+ get childCount(): number;
9
+ addChild(child: Entity, index?: number): this;
10
+ childAt(index: number): Entity;
11
+ indexOfChild(entity: Entity): number;
12
+ removeChildAt(index: number): Entity;
13
+ setChildAt(index: number, entity: Entity): this;
14
+ get type(): unknown;
15
+ toString(): string;
16
+ equals(another: this, expect?: boolean): boolean;
17
+ clone(): this;
18
+ copyTo(another: this): void;
19
+ protected newInstance(): this;
20
+ }
21
+ export declare abstract class TimedEntity extends Entity {
22
+ abstract get duration(): TSU.Num.Fraction;
23
+ equals(another: this): boolean;
24
+ }