@libraz/libcantus 0.9.3 → 0.9.5
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.
- package/README.md +29 -20
- package/README_ja.md +268 -0
- package/dist/analyze/index.cjs +39 -1947
- package/dist/analyze/index.cjs.map +1 -1
- package/dist/analyze/index.d.cts +161 -91
- package/dist/analyze/index.d.ts +161 -91
- package/dist/analyze/index.js +19 -8
- package/dist/chunk-2A2QMA74.cjs +261 -0
- package/dist/chunk-2A2QMA74.cjs.map +1 -0
- package/dist/chunk-2PTFGVD7.js +261 -0
- package/dist/chunk-2PTFGVD7.js.map +1 -0
- package/dist/chunk-357ZDPVU.cjs +162 -0
- package/dist/chunk-357ZDPVU.cjs.map +1 -0
- package/dist/chunk-3KX76RLG.js +1548 -0
- package/dist/chunk-3KX76RLG.js.map +1 -0
- package/dist/chunk-4VZ5MZAM.cjs +889 -0
- package/dist/chunk-4VZ5MZAM.cjs.map +1 -0
- package/dist/{chunk-C5XYKUVG.js → chunk-7EONYVI5.js} +471 -171
- package/dist/chunk-7EONYVI5.js.map +1 -0
- package/dist/{chunk-IT2O4XFE.js → chunk-7JEP3MFY.js} +42 -34
- package/dist/chunk-7JEP3MFY.js.map +1 -0
- package/dist/{chunk-4MHA432G.js → chunk-AID75RN3.js} +572 -250
- package/dist/chunk-AID75RN3.js.map +1 -0
- package/dist/chunk-BSLTLGM3.cjs +497 -0
- package/dist/chunk-BSLTLGM3.cjs.map +1 -0
- package/dist/chunk-CU6VG2YM.cjs +109 -0
- package/dist/chunk-CU6VG2YM.cjs.map +1 -0
- package/dist/{chunk-EH6EM37U.js → chunk-DZMHIGI4.js} +81 -59
- package/dist/chunk-DZMHIGI4.js.map +1 -0
- package/dist/{chunk-AKLYPWIN.js → chunk-EDOTEABK.js} +45 -19
- package/dist/chunk-EDOTEABK.js.map +1 -0
- package/dist/{chunk-2ZWMSJH6.js → chunk-HN2OEUN2.js} +7 -4
- package/dist/chunk-HN2OEUN2.js.map +1 -0
- package/dist/{chunk-MIWO425M.js → chunk-KBTTEX7Q.js} +128 -43
- package/dist/chunk-KBTTEX7Q.js.map +1 -0
- package/dist/chunk-KQN2ZYND.cjs +724 -0
- package/dist/chunk-KQN2ZYND.cjs.map +1 -0
- package/dist/chunk-MPTVJIVG.cjs +3176 -0
- package/dist/chunk-MPTVJIVG.cjs.map +1 -0
- package/dist/chunk-MTMZTMWM.cjs +53 -0
- package/dist/chunk-MTMZTMWM.cjs.map +1 -0
- package/dist/{chunk-CHMXELDS.js → chunk-NNB67XA2.js} +372 -197
- package/dist/chunk-NNB67XA2.js.map +1 -0
- package/dist/chunk-OL3IHHSJ.cjs +1204 -0
- package/dist/chunk-OL3IHHSJ.cjs.map +1 -0
- package/dist/chunk-PI3UXRWK.cjs +528 -0
- package/dist/chunk-PI3UXRWK.cjs.map +1 -0
- package/dist/chunk-R2VVFAIN.js +528 -0
- package/dist/chunk-R2VVFAIN.js.map +1 -0
- package/dist/chunk-T64C7ZD7.cjs +1 -0
- package/dist/chunk-T64C7ZD7.cjs.map +1 -0
- package/dist/chunk-WFDXOLUB.cjs +337 -0
- package/dist/chunk-WFDXOLUB.cjs.map +1 -0
- package/dist/chunk-WTAN4ACG.cjs +1548 -0
- package/dist/chunk-WTAN4ACG.cjs.map +1 -0
- package/dist/chunk-YFJXS3AU.cjs +33 -0
- package/dist/chunk-YFJXS3AU.cjs.map +1 -0
- package/dist/{chunk-GOAW4VYL.js → chunk-YUE6TJ4M.js} +315 -145
- package/dist/chunk-YUE6TJ4M.js.map +1 -0
- package/dist/{chunk-62QZKCJQ.js → chunk-ZGLJM4A4.js} +10 -6
- package/dist/chunk-ZGLJM4A4.js.map +1 -0
- package/dist/core/index.cjs +140 -647
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.cts +313 -41
- package/dist/core/index.d.ts +313 -41
- package/dist/core/index.js +64 -16
- package/dist/{function-DVH4Eusr.d.ts → function-CxixTB02.d.cts} +122 -10
- package/dist/{function-DYt4iKsn.d.cts → function-DTCt675z.d.ts} +122 -10
- package/dist/generate/index.cjs +28 -4085
- package/dist/generate/index.cjs.map +1 -1
- package/dist/generate/index.d.cts +374 -66
- package/dist/generate/index.d.ts +374 -66
- package/dist/generate/index.js +23 -9
- package/dist/{index-Jc0Ryi79.d.ts → index-B2Ulxxpo.d.cts} +21 -5
- package/dist/{index-CpOsP1y9.d.cts → index-BkYJ0xMq.d.cts} +18 -17
- package/dist/{index-CxqBQtH1.d.cts → index-BuaB-ypt.d.ts} +21 -5
- package/dist/index-CAN7v-kw.d.ts +199 -0
- package/dist/{index-Bt4tOUD9.d.ts → index-COw1Ky9g.d.ts} +93 -8
- package/dist/{index-Dikst44v.d.cts → index-Cfx8xgH0.d.ts} +14 -11
- package/dist/{index-DxvARIP2.d.ts → index-DRtIhlJj.d.ts} +18 -17
- package/dist/{index-Cl7mhOFM.d.cts → index-DXd9JikN.d.cts} +92 -10
- package/dist/{index-Cl7mhOFM.d.ts → index-DXd9JikN.d.ts} +92 -10
- package/dist/index-alrRninU.d.cts +199 -0
- package/dist/{index-BNlGP86A.d.cts → index-oTQbYYIs.d.cts} +93 -8
- package/dist/index-tR9jTn26.d.cts +275 -0
- package/dist/index-tR9jTn26.d.ts +275 -0
- package/dist/{index-Bg5dYMmZ.d.ts → index-x2vcsduE.d.cts} +14 -11
- package/dist/index.cjs +429 -7383
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +15 -15
- package/dist/index.d.ts +15 -15
- package/dist/index.js +121 -27
- package/dist/model/index.cjs +8 -2562
- package/dist/model/index.cjs.map +1 -1
- package/dist/model/index.d.cts +471 -81
- package/dist/model/index.d.ts +471 -81
- package/dist/model/index.js +6 -7
- package/dist/styled-Bl0ZK28h.d.ts +543 -0
- package/dist/styled-Crv6SA4S.d.cts +543 -0
- package/dist/theory/index.cjs +172 -1822
- package/dist/theory/index.cjs.map +1 -1
- package/dist/theory/index.d.cts +151 -233
- package/dist/theory/index.d.ts +151 -233
- package/dist/theory/index.js +30 -7
- package/dist/{types-MGP29r3t.d.cts → types-BN6_Q9Kl.d.cts} +11 -2
- package/dist/{types-MGP29r3t.d.ts → types-BN6_Q9Kl.d.ts} +11 -2
- package/package.json +34 -13
- package/dist/chunk-2ZWMSJH6.js.map +0 -1
- package/dist/chunk-4MHA432G.js.map +0 -1
- package/dist/chunk-62QZKCJQ.js.map +0 -1
- package/dist/chunk-AKLYPWIN.js.map +0 -1
- package/dist/chunk-C5XYKUVG.js.map +0 -1
- package/dist/chunk-CHMXELDS.js.map +0 -1
- package/dist/chunk-DYWFNC4A.js +0 -152
- package/dist/chunk-DYWFNC4A.js.map +0 -1
- package/dist/chunk-EH6EM37U.js.map +0 -1
- package/dist/chunk-FBQK3ZQN.js +0 -131
- package/dist/chunk-FBQK3ZQN.js.map +0 -1
- package/dist/chunk-GOAW4VYL.js.map +0 -1
- package/dist/chunk-I5R7ZBJS.js +0 -202
- package/dist/chunk-I5R7ZBJS.js.map +0 -1
- package/dist/chunk-IT2O4XFE.js.map +0 -1
- package/dist/chunk-MIWO425M.js.map +0 -1
- package/dist/chunk-SGU7SPLK.js +0 -924
- package/dist/chunk-SGU7SPLK.js.map +0 -1
- package/dist/index-CGMZNCx6.d.cts +0 -140
- package/dist/index-CGMZNCx6.d.ts +0 -140
- package/dist/index-CnZCo29u.d.cts +0 -108
- package/dist/index-JnF4v9bx.d.ts +0 -108
- package/dist/styled-DZ7GjShb.d.ts +0 -282
- package/dist/styled-ZTbdaVFM.d.cts +0 -282
- package/src/analyze/arrange/index.ts +0 -21
- package/src/analyze/arrange/internal.ts +0 -127
- package/src/analyze/arrange/tension.ts +0 -199
- package/src/analyze/arrange/tracks.ts +0 -312
- package/src/analyze/detect/index.ts +0 -272
- package/src/analyze/functional/borrowed.ts +0 -84
- package/src/analyze/functional/cadence.ts +0 -66
- package/src/analyze/functional/function.ts +0 -184
- package/src/analyze/functional/index.ts +0 -23
- package/src/analyze/functional/internal.ts +0 -29
- package/src/analyze/functional/roman.ts +0 -402
- package/src/analyze/index.ts +0 -49
- package/src/analyze/timeline/index.ts +0 -451
- package/src/analyze/voice/index.ts +0 -339
- package/src/core/event-index/index.ts +0 -104
- package/src/core/index.ts +0 -61
- package/src/core/interval/index.ts +0 -81
- package/src/core/meter/index.ts +0 -302
- package/src/core/pitch/index.ts +0 -311
- package/src/core/random/index.ts +0 -76
- package/src/core/tuning/index.ts +0 -186
- package/src/core/types.ts +0 -29
- package/src/core/validation/index.ts +0 -119
- package/src/generate/bass/index.ts +0 -373
- package/src/generate/countermelody/index.ts +0 -470
- package/src/generate/drums/beat.ts +0 -266
- package/src/generate/drums/euclid.ts +0 -65
- package/src/generate/drums/fills.ts +0 -356
- package/src/generate/drums/ghost.ts +0 -119
- package/src/generate/drums/hihat.ts +0 -285
- package/src/generate/drums/hit.ts +0 -31
- package/src/generate/drums/index.ts +0 -361
- package/src/generate/drums/internal.ts +0 -257
- package/src/generate/drums/kick.ts +0 -160
- package/src/generate/drums/percussion.ts +0 -121
- package/src/generate/drums/rng.ts +0 -7
- package/src/generate/drums/swing.ts +0 -71
- package/src/generate/groove/index.ts +0 -351
- package/src/generate/harmonize/index.ts +0 -451
- package/src/generate/index.ts +0 -58
- package/src/generate/motif/index.ts +0 -422
- package/src/generate/progression/index.ts +0 -362
- package/src/generate/reharmony/index.ts +0 -323
- package/src/generate/rhythm/index.ts +0 -175
- package/src/index.ts +0 -13
- package/src/model/chord.ts +0 -442
- package/src/model/index.ts +0 -15
- package/src/model/interval.ts +0 -82
- package/src/model/key.ts +0 -266
- package/src/model/note.ts +0 -176
- package/src/model/progression.ts +0 -161
- package/src/model/shared.ts +0 -12
- package/src/theory/chord/index.ts +0 -375
- package/src/theory/chordscale/index.ts +0 -374
- package/src/theory/counterpoint/index.ts +0 -230
- package/src/theory/harmony/index.ts +0 -77
- package/src/theory/index.ts +0 -112
- package/src/theory/safety/index.ts +0 -488
- package/src/theory/scale/degrees.ts +0 -123
- package/src/theory/scale/index.ts +0 -28
- package/src/theory/scale/key.ts +0 -56
- package/src/theory/scale/masks.ts +0 -153
- package/src/theory/spelling/index.ts +0 -249
- package/src/theory/symbol/index.ts +0 -268
- package/src/theory/voicing/index.ts +0 -5
- package/src/theory/voicing/internal.ts +0 -168
- package/src/theory/voicing/leading.ts +0 -112
- package/src/theory/voicing/satb.ts +0 -216
- package/src/theory/voicing/styled.ts +0 -199
- package/tsconfig.json +0 -23
package/dist/core/index.cjs
CHANGED
|
@@ -1,648 +1,141 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
var
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
return events;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
// src/core/event-index/index.ts
|
|
147
|
-
var EPS = 1e-9;
|
|
148
|
-
function upperBound(values, beat) {
|
|
149
|
-
let low = 0;
|
|
150
|
-
let high = values.length;
|
|
151
|
-
while (low < high) {
|
|
152
|
-
const middle = Math.floor((low + high) / 2);
|
|
153
|
-
if ((values[middle]?.note.startBeat ?? Number.POSITIVE_INFINITY) <= beat) {
|
|
154
|
-
low = middle + 1;
|
|
155
|
-
} else {
|
|
156
|
-
high = middle;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
return low;
|
|
160
|
-
}
|
|
161
|
-
function createNoteEventIndex(events, options = {}) {
|
|
162
|
-
assertNoteEvents(events, "note events", options);
|
|
163
|
-
const notes = events.map((note, originalIndex) => ({
|
|
164
|
-
note,
|
|
165
|
-
originalIndex,
|
|
166
|
-
endBeat: note.startBeat + note.durationBeat
|
|
167
|
-
})).sort((a, b) => a.note.startBeat - b.note.startBeat || a.originalIndex - b.originalIndex);
|
|
168
|
-
const prefixMaxEnd = [];
|
|
169
|
-
let maxEnd = Number.NEGATIVE_INFINITY;
|
|
170
|
-
for (const indexed of notes) {
|
|
171
|
-
maxEnd = Math.max(maxEnd, indexed.endBeat);
|
|
172
|
-
prefixMaxEnd.push(maxEnd);
|
|
173
|
-
}
|
|
174
|
-
return {
|
|
175
|
-
notes,
|
|
176
|
-
at(beat) {
|
|
177
|
-
let index = upperBound(notes, beat + EPS) - 1;
|
|
178
|
-
while (index >= 0) {
|
|
179
|
-
if ((prefixMaxEnd[index] ?? Number.NEGATIVE_INFINITY) <= beat + EPS) {
|
|
180
|
-
return void 0;
|
|
181
|
-
}
|
|
182
|
-
const indexed = notes[index];
|
|
183
|
-
if (indexed && indexed.note.durationBeat > 0 && indexed.note.startBeat - EPS <= beat && beat < indexed.endBeat - EPS) {
|
|
184
|
-
return indexed;
|
|
185
|
-
}
|
|
186
|
-
index -= 1;
|
|
187
|
-
}
|
|
188
|
-
return void 0;
|
|
189
|
-
},
|
|
190
|
-
attacksAt(beat) {
|
|
191
|
-
const firstAfter = upperBound(notes, beat + EPS);
|
|
192
|
-
const candidate = notes[firstAfter - 1];
|
|
193
|
-
return candidate !== void 0 && Math.abs(candidate.note.startBeat - beat) < EPS;
|
|
194
|
-
},
|
|
195
|
-
onsetsBetween(startBeat, endBeat) {
|
|
196
|
-
const result = [];
|
|
197
|
-
let index = upperBound(notes, startBeat + EPS);
|
|
198
|
-
while (index < notes.length) {
|
|
199
|
-
const onset = notes[index]?.note.startBeat;
|
|
200
|
-
if (onset === void 0 || onset >= endBeat - EPS) {
|
|
201
|
-
break;
|
|
202
|
-
}
|
|
203
|
-
if (result[result.length - 1] !== onset) {
|
|
204
|
-
result.push(onset);
|
|
205
|
-
}
|
|
206
|
-
index += 1;
|
|
207
|
-
}
|
|
208
|
-
return result;
|
|
209
|
-
}
|
|
210
|
-
};
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
// src/core/interval/index.ts
|
|
214
|
-
var IntervalQuality = /* @__PURE__ */ ((IntervalQuality2) => {
|
|
215
|
-
IntervalQuality2[IntervalQuality2["PerfectConsonance"] = 0] = "PerfectConsonance";
|
|
216
|
-
IntervalQuality2[IntervalQuality2["ImperfectConsonance"] = 1] = "ImperfectConsonance";
|
|
217
|
-
IntervalQuality2[IntervalQuality2["Dissonance"] = 2] = "Dissonance";
|
|
218
|
-
return IntervalQuality2;
|
|
219
|
-
})(IntervalQuality || {});
|
|
220
|
-
function simpleInterval(semitones) {
|
|
221
|
-
return Math.abs(semitones) % 12;
|
|
222
|
-
}
|
|
223
|
-
function classifyInterval(semitones, twoVoice = true) {
|
|
224
|
-
const pc = simpleInterval(semitones);
|
|
225
|
-
if (pc === 0 || pc === 7) {
|
|
226
|
-
return 0 /* PerfectConsonance */;
|
|
227
|
-
}
|
|
228
|
-
if (pc === 3 || pc === 4 || pc === 8 || pc === 9) {
|
|
229
|
-
return 1 /* ImperfectConsonance */;
|
|
230
|
-
}
|
|
231
|
-
if (pc === 5) {
|
|
232
|
-
return twoVoice ? 2 /* Dissonance */ : 1 /* ImperfectConsonance */;
|
|
233
|
-
}
|
|
234
|
-
return 2 /* Dissonance */;
|
|
235
|
-
}
|
|
236
|
-
function isPerfectInterval(semitones) {
|
|
237
|
-
const pc = simpleInterval(semitones);
|
|
238
|
-
return pc === 0 || pc === 7;
|
|
239
|
-
}
|
|
240
|
-
function isConsonantInterval(semitones, twoVoice = true) {
|
|
241
|
-
const pc = simpleInterval(semitones);
|
|
242
|
-
if (pc === 5) {
|
|
243
|
-
return !twoVoice;
|
|
244
|
-
}
|
|
245
|
-
return pc === 0 || pc === 3 || pc === 4 || pc === 7 || pc === 8 || pc === 9;
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
// src/core/meter/index.ts
|
|
249
|
-
var EPS2 = 1e-9;
|
|
250
|
-
function isMultiple(value, unit) {
|
|
251
|
-
if (unit === 0) {
|
|
252
|
-
return false;
|
|
253
|
-
}
|
|
254
|
-
const ratio = value / unit;
|
|
255
|
-
return Math.abs(ratio - Math.round(ratio)) < EPS2;
|
|
256
|
-
}
|
|
257
|
-
function parseTimeSignature(text) {
|
|
258
|
-
const match = /^\s*(\d+)\s*\/\s*(\d+)\s*$/.exec(text);
|
|
259
|
-
if (!match) {
|
|
260
|
-
throw new Error(`Invalid time signature: ${text}`);
|
|
261
|
-
}
|
|
262
|
-
const numerator = Number.parseInt(match[1] ?? "", 10);
|
|
263
|
-
const denominator = Number.parseInt(match[2] ?? "", 10);
|
|
264
|
-
if (!Number.isSafeInteger(numerator) || !Number.isSafeInteger(denominator) || numerator <= 0 || denominator <= 0) {
|
|
265
|
-
throw new Error(`Invalid time signature: ${text}`);
|
|
266
|
-
}
|
|
267
|
-
return { numerator, denominator };
|
|
268
|
-
}
|
|
269
|
-
function formatTimeSignature(ts) {
|
|
270
|
-
assertTimeSignature(ts);
|
|
271
|
-
return `${ts.numerator}/${ts.denominator}`;
|
|
272
|
-
}
|
|
273
|
-
function isCompound(ts) {
|
|
274
|
-
assertTimeSignature(ts);
|
|
275
|
-
return ts.numerator % 3 === 0 && ts.numerator > 3;
|
|
276
|
-
}
|
|
277
|
-
function unitBeats(ts) {
|
|
278
|
-
return 4 / ts.denominator;
|
|
279
|
-
}
|
|
280
|
-
function beatsPerBar(ts) {
|
|
281
|
-
assertTimeSignature(ts);
|
|
282
|
-
return ts.numerator * unitBeats(ts);
|
|
283
|
-
}
|
|
284
|
-
function pulseBeats(ts) {
|
|
285
|
-
return isCompound(ts) ? 3 * unitBeats(ts) : unitBeats(ts);
|
|
286
|
-
}
|
|
287
|
-
function pulsesPerBar(ts) {
|
|
288
|
-
return beatsPerBar(ts) / pulseBeats(ts);
|
|
289
|
-
}
|
|
290
|
-
function isValidGrouping(grouping, pulses) {
|
|
291
|
-
if (grouping.length === 0) {
|
|
292
|
-
return false;
|
|
293
|
-
}
|
|
294
|
-
let sum = 0;
|
|
295
|
-
for (const g of grouping) {
|
|
296
|
-
if (!Number.isInteger(g) || g <= 0) {
|
|
297
|
-
return false;
|
|
298
|
-
}
|
|
299
|
-
sum += g;
|
|
300
|
-
}
|
|
301
|
-
return sum === pulses;
|
|
302
|
-
}
|
|
303
|
-
function isGroupHead(grouping, pulseIndex) {
|
|
304
|
-
let acc = 0;
|
|
305
|
-
for (const g of grouping) {
|
|
306
|
-
if (acc === pulseIndex) {
|
|
307
|
-
return true;
|
|
308
|
-
}
|
|
309
|
-
acc += g;
|
|
310
|
-
}
|
|
311
|
-
return false;
|
|
312
|
-
}
|
|
313
|
-
function beatToBarPosition(beatInQuarters, ts) {
|
|
314
|
-
assertFiniteNumber(beatInQuarters, "beat");
|
|
315
|
-
const barLen = beatsPerBar(ts);
|
|
316
|
-
const bar = Math.floor(beatInQuarters / barLen);
|
|
317
|
-
return { bar, beat: beatInQuarters - bar * barLen };
|
|
318
|
-
}
|
|
319
|
-
function barPositionToBeat(pos, ts) {
|
|
320
|
-
assertInteger(pos.bar, "bar position bar");
|
|
321
|
-
assertFiniteNumber(pos.beat, "bar position beat");
|
|
322
|
-
return pos.bar * beatsPerBar(ts) + pos.beat;
|
|
323
|
-
}
|
|
324
|
-
function metricWeight(beatInQuarters, ts) {
|
|
325
|
-
assertFiniteNumber(beatInQuarters, "beat");
|
|
326
|
-
assertTimeSignature(ts);
|
|
327
|
-
const { beat } = beatToBarPosition(beatInQuarters, ts);
|
|
328
|
-
const pulse = pulseBeats(ts);
|
|
329
|
-
if (!isMultiple(beat, pulse)) {
|
|
330
|
-
return 0;
|
|
331
|
-
}
|
|
332
|
-
const pulses = pulsesPerBar(ts);
|
|
333
|
-
const pulseIndex = Math.round(beat / pulse) % pulses;
|
|
334
|
-
if (pulseIndex === 0) {
|
|
335
|
-
return 3;
|
|
336
|
-
}
|
|
337
|
-
const grouping = ts.grouping;
|
|
338
|
-
if (grouping !== void 0) {
|
|
339
|
-
if (!isValidGrouping(grouping, pulses)) {
|
|
340
|
-
throw new Error(
|
|
341
|
-
`Invalid grouping [${grouping.join(", ")}] for ${formatTimeSignature(ts)}: entries must be positive integers summing to ${pulses}`
|
|
342
|
-
);
|
|
343
|
-
}
|
|
344
|
-
return isGroupHead(grouping, pulseIndex) ? 2 : 1;
|
|
345
|
-
}
|
|
346
|
-
if (pulses % 2 === 0 && pulseIndex === pulses / 2) {
|
|
347
|
-
return 2;
|
|
348
|
-
}
|
|
349
|
-
return 1;
|
|
350
|
-
}
|
|
351
|
-
function isStrongBeat(beatInQuarters, ts) {
|
|
352
|
-
return metricWeight(beatInQuarters, ts) >= 2;
|
|
353
|
-
}
|
|
354
|
-
function tuplet(totalBeats, count) {
|
|
355
|
-
assertRange(totalBeats, 0, Number.MAX_SAFE_INTEGER, "tuplet total beats");
|
|
356
|
-
assertPositiveInt(count, "tuplet count");
|
|
357
|
-
return new Array(count).fill(totalBeats / count);
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
// src/core/pitch/index.ts
|
|
361
|
-
var LETTER_SEMITONES = [0, 2, 4, 5, 7, 9, 11];
|
|
362
|
-
var LETTER_NAMES = ["C", "D", "E", "F", "G", "A", "B"];
|
|
363
|
-
function mod12(n) {
|
|
364
|
-
return (n % 12 + 12) % 12;
|
|
365
|
-
}
|
|
366
|
-
function mod7(n) {
|
|
367
|
-
return (n % 7 + 7) % 7;
|
|
368
|
-
}
|
|
369
|
-
function parseNote(text) {
|
|
370
|
-
const match = /^([A-Ga-g])([#x]*|b*)(-?\d+)?$/.exec(text.trim());
|
|
371
|
-
if (!match) {
|
|
372
|
-
throw new Error(`Invalid note: ${text}`);
|
|
373
|
-
}
|
|
374
|
-
const letterGlyph = (match[1] ?? "").toUpperCase();
|
|
375
|
-
const letter = LETTER_NAMES.indexOf(letterGlyph);
|
|
376
|
-
let alter = 0;
|
|
377
|
-
for (const ch of match[2] ?? "") {
|
|
378
|
-
if (ch === "#") {
|
|
379
|
-
alter += 1;
|
|
380
|
-
} else if (ch === "x") {
|
|
381
|
-
alter += 2;
|
|
382
|
-
} else if (ch === "b") {
|
|
383
|
-
alter -= 1;
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
const note = { letter, alter };
|
|
387
|
-
if (match[3] !== void 0) {
|
|
388
|
-
note.octave = Number.parseInt(match[3], 10);
|
|
389
|
-
}
|
|
390
|
-
return note;
|
|
391
|
-
}
|
|
392
|
-
function formatAlter(alter) {
|
|
393
|
-
if (alter > 0) {
|
|
394
|
-
return "#".repeat(alter);
|
|
395
|
-
}
|
|
396
|
-
if (alter < 0) {
|
|
397
|
-
return "b".repeat(-alter);
|
|
398
|
-
}
|
|
399
|
-
return "";
|
|
400
|
-
}
|
|
401
|
-
function formatNote(note) {
|
|
402
|
-
const glyph = LETTER_NAMES[mod7(note.letter)] ?? "C";
|
|
403
|
-
const octave = note.octave === void 0 ? "" : String(note.octave);
|
|
404
|
-
return `${glyph}${formatAlter(note.alter)}${octave}`;
|
|
405
|
-
}
|
|
406
|
-
function noteToPitchClass(note) {
|
|
407
|
-
const natural = LETTER_SEMITONES[mod7(note.letter)] ?? 0;
|
|
408
|
-
return mod12(natural + note.alter);
|
|
409
|
-
}
|
|
410
|
-
function noteToMidi(note) {
|
|
411
|
-
if (note.octave === void 0) {
|
|
412
|
-
throw new Error("noteToMidi requires an octave");
|
|
413
|
-
}
|
|
414
|
-
const natural = LETTER_SEMITONES[mod7(note.letter)] ?? 0;
|
|
415
|
-
return (note.octave + 1) * 12 + natural + note.alter;
|
|
416
|
-
}
|
|
417
|
-
var SHARP_SPELLING = [
|
|
418
|
-
[0, 0],
|
|
419
|
-
[0, 1],
|
|
420
|
-
[1, 0],
|
|
421
|
-
[1, 1],
|
|
422
|
-
[2, 0],
|
|
423
|
-
[3, 0],
|
|
424
|
-
[3, 1],
|
|
425
|
-
[4, 0],
|
|
426
|
-
[4, 1],
|
|
427
|
-
[5, 0],
|
|
428
|
-
[5, 1],
|
|
429
|
-
[6, 0]
|
|
430
|
-
];
|
|
431
|
-
var FLAT_SPELLING = [
|
|
432
|
-
[0, 0],
|
|
433
|
-
[1, -1],
|
|
434
|
-
[1, 0],
|
|
435
|
-
[2, -1],
|
|
436
|
-
[2, 0],
|
|
437
|
-
[3, 0],
|
|
438
|
-
[4, -1],
|
|
439
|
-
[4, 0],
|
|
440
|
-
[5, -1],
|
|
441
|
-
[5, 0],
|
|
442
|
-
[6, -1],
|
|
443
|
-
[6, 0]
|
|
444
|
-
];
|
|
445
|
-
function midiToNote(midi, spelling = "sharp") {
|
|
446
|
-
const rounded = Math.round(midi);
|
|
447
|
-
const pc = mod12(rounded);
|
|
448
|
-
const octave = Math.floor(rounded / 12) - 1;
|
|
449
|
-
const table = spelling === "sharp" ? SHARP_SPELLING : FLAT_SPELLING;
|
|
450
|
-
const entry = table[pc] ?? [0, 0];
|
|
451
|
-
return { letter: entry[0], alter: entry[1], octave };
|
|
452
|
-
}
|
|
453
|
-
var SIMPLE_REFERENCE = [0, 0, 2, 4, 5, 7, 9, 11];
|
|
454
|
-
function isPerfectNumber(simpleNumber) {
|
|
455
|
-
return simpleNumber === 1 || simpleNumber === 4 || simpleNumber === 5;
|
|
456
|
-
}
|
|
457
|
-
function qualityFromSpan(numberValue, semitones) {
|
|
458
|
-
const octaves = Math.floor((numberValue - 1) / 7);
|
|
459
|
-
const simple = numberValue - 7 * octaves;
|
|
460
|
-
const reference = (SIMPLE_REFERENCE[simple] ?? 0) + 12 * octaves;
|
|
461
|
-
const delta = semitones - reference;
|
|
462
|
-
if (isPerfectNumber(simple)) {
|
|
463
|
-
if (delta === 0) {
|
|
464
|
-
return "P";
|
|
465
|
-
}
|
|
466
|
-
return delta > 0 ? "A".repeat(delta) : "d".repeat(-delta);
|
|
467
|
-
}
|
|
468
|
-
if (delta === 0) {
|
|
469
|
-
return "M";
|
|
470
|
-
}
|
|
471
|
-
if (delta === -1) {
|
|
472
|
-
return "m";
|
|
473
|
-
}
|
|
474
|
-
return delta > 0 ? "A".repeat(delta) : "d".repeat(-delta - 1);
|
|
475
|
-
}
|
|
476
|
-
function diatonicIndex(note) {
|
|
477
|
-
return mod7(note.letter) + 7 * (note.octave ?? 0);
|
|
478
|
-
}
|
|
479
|
-
function spelledInterval(a, b) {
|
|
480
|
-
const octaved = a.octave !== void 0 && b.octave !== void 0;
|
|
481
|
-
let letterSteps;
|
|
482
|
-
let semitones;
|
|
483
|
-
if (octaved) {
|
|
484
|
-
letterSteps = diatonicIndex(b) - diatonicIndex(a);
|
|
485
|
-
semitones = noteToMidi(b) - noteToMidi(a);
|
|
486
|
-
} else {
|
|
487
|
-
letterSteps = mod7(b.letter - a.letter);
|
|
488
|
-
let rawSemis = mod12(noteToPitchClass(b) - noteToPitchClass(a));
|
|
489
|
-
const reference = SIMPLE_REFERENCE[letterSteps + 1] ?? 0;
|
|
490
|
-
if (reference - rawSemis > 6) {
|
|
491
|
-
rawSemis += 12;
|
|
492
|
-
} else if (rawSemis - reference > 6) {
|
|
493
|
-
rawSemis -= 12;
|
|
494
|
-
}
|
|
495
|
-
semitones = rawSemis;
|
|
496
|
-
}
|
|
497
|
-
const absSteps = Math.abs(letterSteps);
|
|
498
|
-
const number = absSteps + 1;
|
|
499
|
-
const quality = qualityFromSpan(number, Math.abs(semitones));
|
|
500
|
-
return { number, quality, semitones };
|
|
501
|
-
}
|
|
502
|
-
|
|
503
|
-
// src/core/random/index.ts
|
|
504
|
-
function createRng(seed) {
|
|
505
|
-
assertFiniteNumber(seed, "seed");
|
|
506
|
-
let state = seed >>> 0;
|
|
507
|
-
const next = () => {
|
|
508
|
-
state = state + 1831565813 >>> 0;
|
|
509
|
-
let t = state;
|
|
510
|
-
t = Math.imul(t ^ t >>> 15, t | 1);
|
|
511
|
-
t ^= t + Math.imul(t ^ t >>> 7, t | 61);
|
|
512
|
-
return ((t ^ t >>> 14) >>> 0) / 4294967296;
|
|
513
|
-
};
|
|
514
|
-
return {
|
|
515
|
-
next,
|
|
516
|
-
prob: (p) => next() < assertRange(p, 0, 1, "probability"),
|
|
517
|
-
range: (lo, hi) => {
|
|
518
|
-
assertInteger(lo, "range lower bound");
|
|
519
|
-
assertInteger(hi, "range upper bound");
|
|
520
|
-
if (lo > hi) {
|
|
521
|
-
throw new RangeError(
|
|
522
|
-
`range lower bound must not exceed upper bound; received ${lo} > ${hi}`
|
|
523
|
-
);
|
|
524
|
-
}
|
|
525
|
-
assertInteger(hi - lo, "range span", 0);
|
|
526
|
-
return lo + Math.floor(next() * (hi - lo + 1));
|
|
527
|
-
},
|
|
528
|
-
float: (lo, hi) => {
|
|
529
|
-
assertFiniteNumber(lo, "float lower bound");
|
|
530
|
-
assertFiniteNumber(hi, "float upper bound");
|
|
531
|
-
if (lo > hi) {
|
|
532
|
-
throw new RangeError(
|
|
533
|
-
`float lower bound must not exceed upper bound; received ${lo} > ${hi}`
|
|
534
|
-
);
|
|
535
|
-
}
|
|
536
|
-
assertFiniteNumber(hi - lo, "float span");
|
|
537
|
-
return lo + next() * (hi - lo);
|
|
538
|
-
}
|
|
539
|
-
};
|
|
540
|
-
}
|
|
541
|
-
|
|
542
|
-
// src/core/tuning/index.ts
|
|
543
|
-
var TWELVE_TET = { refStep: 69, refFreq: 440, divisions: 12 };
|
|
544
|
-
function assertTuning(tuning) {
|
|
545
|
-
assertFiniteNumber(tuning.refStep, "tuning.refStep");
|
|
546
|
-
assertRange(tuning.refFreq, Number.MIN_VALUE, Number.MAX_VALUE, "tuning.refFreq");
|
|
547
|
-
assertPositiveInt(tuning.divisions, "tuning.divisions");
|
|
548
|
-
return tuning;
|
|
549
|
-
}
|
|
550
|
-
function edo(n, refFreq = 440, refStep = 69) {
|
|
551
|
-
assertPositiveInt(n, "EDO divisions");
|
|
552
|
-
assertRange(refFreq, Number.MIN_VALUE, Number.MAX_VALUE, "reference frequency");
|
|
553
|
-
assertFiniteNumber(refStep, "reference step");
|
|
554
|
-
return { refStep, refFreq, divisions: n };
|
|
555
|
-
}
|
|
556
|
-
function frequencyOf(step, tuning = TWELVE_TET) {
|
|
557
|
-
assertFiniteNumber(step, "step");
|
|
558
|
-
assertTuning(tuning);
|
|
559
|
-
const result = tuning.refFreq * 2 ** ((step - tuning.refStep) / tuning.divisions);
|
|
560
|
-
return assertRange(result, Number.MIN_VALUE, Number.MAX_VALUE, "frequency result");
|
|
561
|
-
}
|
|
562
|
-
function nearestStep(freq, tuning = TWELVE_TET) {
|
|
563
|
-
assertRange(freq, Number.MIN_VALUE, Number.MAX_VALUE, "frequency");
|
|
564
|
-
assertTuning(tuning);
|
|
565
|
-
return Math.round(tuning.refStep + tuning.divisions * Math.log2(freq / tuning.refFreq));
|
|
566
|
-
}
|
|
567
|
-
function centsBetweenFreq(a, b) {
|
|
568
|
-
assertRange(a, Number.MIN_VALUE, Number.MAX_VALUE, "first frequency");
|
|
569
|
-
assertRange(b, Number.MIN_VALUE, Number.MAX_VALUE, "second frequency");
|
|
570
|
-
return 1200 * (Math.log2(b) - Math.log2(a));
|
|
571
|
-
}
|
|
572
|
-
function centsOfSteps(steps, tuning = TWELVE_TET) {
|
|
573
|
-
assertFiniteNumber(steps, "steps");
|
|
574
|
-
assertTuning(tuning);
|
|
575
|
-
return assertFiniteNumber(steps * 1200 / tuning.divisions, "cents result");
|
|
576
|
-
}
|
|
577
|
-
function ratioToCents(numerator, denominator) {
|
|
578
|
-
assertRange(numerator, Number.MIN_VALUE, Number.MAX_VALUE, "ratio numerator");
|
|
579
|
-
assertRange(denominator, Number.MIN_VALUE, Number.MAX_VALUE, "ratio denominator");
|
|
580
|
-
return 1200 * (Math.log2(numerator) - Math.log2(denominator));
|
|
581
|
-
}
|
|
582
|
-
var JUST_RATIOS = {
|
|
583
|
-
0: [1, 1],
|
|
584
|
-
1: [16, 15],
|
|
585
|
-
2: [9, 8],
|
|
586
|
-
3: [6, 5],
|
|
587
|
-
4: [5, 4],
|
|
588
|
-
5: [4, 3],
|
|
589
|
-
6: [45, 32],
|
|
590
|
-
7: [3, 2],
|
|
591
|
-
8: [8, 5],
|
|
592
|
-
9: [5, 3],
|
|
593
|
-
10: [9, 5],
|
|
594
|
-
11: [15, 8],
|
|
595
|
-
12: [2, 1]
|
|
596
|
-
};
|
|
597
|
-
function justDeviationCents(semitoneClass) {
|
|
598
|
-
assertInteger(semitoneClass, "semitone class", 0, 12);
|
|
599
|
-
const ratio = JUST_RATIOS[semitoneClass];
|
|
600
|
-
if (!ratio) {
|
|
601
|
-
throw new RangeError(`semitone class has no just ratio: ${semitoneClass}`);
|
|
602
|
-
}
|
|
603
|
-
return ratioToCents(ratio[0], ratio[1]) - semitoneClass * 100;
|
|
604
|
-
}
|
|
605
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
606
|
-
0 && (module.exports = {
|
|
607
|
-
DEFAULT_GENERATION_BUDGET,
|
|
608
|
-
IntervalQuality,
|
|
609
|
-
JUST_RATIOS,
|
|
610
|
-
TWELVE_TET,
|
|
611
|
-
assertFiniteNumber,
|
|
612
|
-
assertGenerationBudget,
|
|
613
|
-
assertInteger,
|
|
614
|
-
assertNoteEvent,
|
|
615
|
-
assertNoteEvents,
|
|
616
|
-
assertPositiveInt,
|
|
617
|
-
assertRange,
|
|
618
|
-
assertTimeSignature,
|
|
619
|
-
barPositionToBeat,
|
|
620
|
-
beatToBarPosition,
|
|
621
|
-
beatsPerBar,
|
|
622
|
-
centsBetweenFreq,
|
|
623
|
-
centsOfSteps,
|
|
624
|
-
classifyInterval,
|
|
625
|
-
createNoteEventIndex,
|
|
626
|
-
createRng,
|
|
627
|
-
edo,
|
|
628
|
-
formatNote,
|
|
629
|
-
formatTimeSignature,
|
|
630
|
-
frequencyOf,
|
|
631
|
-
isCompound,
|
|
632
|
-
isConsonantInterval,
|
|
633
|
-
isPerfectInterval,
|
|
634
|
-
isStrongBeat,
|
|
635
|
-
justDeviationCents,
|
|
636
|
-
metricWeight,
|
|
637
|
-
midiToNote,
|
|
638
|
-
nearestStep,
|
|
639
|
-
noteToMidi,
|
|
640
|
-
noteToPitchClass,
|
|
641
|
-
parseNote,
|
|
642
|
-
parseTimeSignature,
|
|
643
|
-
pulsesPerBar,
|
|
644
|
-
ratioToCents,
|
|
645
|
-
spelledInterval,
|
|
646
|
-
tuplet
|
|
647
|
-
});
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
var _chunkCU6VG2YMcjs = require('../chunk-CU6VG2YM.cjs');
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
var _chunkMTMZTMWMcjs = require('../chunk-MTMZTMWM.cjs');
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
var _chunk2A2QMA74cjs = require('../chunk-2A2QMA74.cjs');
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
var _chunkPI3UXRWKcjs = require('../chunk-PI3UXRWK.cjs');
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
exports.BudgetExceededError = _chunkPI3UXRWKcjs.BudgetExceededError; exports.ConsonanceClass = _chunkPI3UXRWKcjs.ConsonanceClass; exports.DEFAULT_GENERATION_BUDGET = _chunkPI3UXRWKcjs.DEFAULT_GENERATION_BUDGET; exports.InvalidInputError = _chunkPI3UXRWKcjs.InvalidInputError; exports.JUST_RATIOS = _chunkCU6VG2YMcjs.JUST_RATIOS; exports.NoSolutionError = _chunkPI3UXRWKcjs.NoSolutionError; exports.TWELVE_TET = _chunkCU6VG2YMcjs.TWELVE_TET; exports.assertDegree = _chunkPI3UXRWKcjs.assertDegree; exports.assertFiniteNumber = _chunkPI3UXRWKcjs.assertFiniteNumber; exports.assertFiniteSemitones = _chunkPI3UXRWKcjs.assertFiniteSemitones; exports.assertGenerationBudget = _chunkPI3UXRWKcjs.assertGenerationBudget; exports.assertInteger = _chunkPI3UXRWKcjs.assertInteger; exports.assertMidiPitch = _chunkPI3UXRWKcjs.assertMidiPitch; exports.assertNoteEvent = _chunkPI3UXRWKcjs.assertNoteEvent; exports.assertNoteEvents = _chunkPI3UXRWKcjs.assertNoteEvents; exports.assertOneOf = _chunkPI3UXRWKcjs.assertOneOf; exports.assertPositiveInt = _chunkPI3UXRWKcjs.assertPositiveInt; exports.assertRange = _chunkPI3UXRWKcjs.assertRange; exports.assertTimeSignature = _chunkPI3UXRWKcjs.assertTimeSignature; exports.barPositionToBeat = _chunk2A2QMA74cjs.barPositionToBeat; exports.barPositionToPulse = _chunk2A2QMA74cjs.barPositionToPulse; exports.beatToBarPosition = _chunk2A2QMA74cjs.beatToBarPosition; exports.beatsPerBar = _chunk2A2QMA74cjs.beatsPerBar; exports.centsBetweenFreq = _chunkCU6VG2YMcjs.centsBetweenFreq; exports.centsFromNearestStep = _chunkCU6VG2YMcjs.centsFromNearestStep; exports.centsOfSteps = _chunkCU6VG2YMcjs.centsOfSteps; exports.centsToRatio = _chunkCU6VG2YMcjs.centsToRatio; exports.clampToMidi = _chunkPI3UXRWKcjs.clampToMidi; exports.classifyInterval = _chunkPI3UXRWKcjs.classifyInterval; exports.createNoteEventIndex = _chunk2A2QMA74cjs.createNoteEventIndex; exports.createRng = _chunkMTMZTMWMcjs.createRng; exports.diatonicLetterOf = _chunkPI3UXRWKcjs.diatonicLetterOf; exports.dropSilentNotes = _chunkPI3UXRWKcjs.dropSilentNotes; exports.edo = _chunkCU6VG2YMcjs.edo; exports.formatBarPosition = _chunk2A2QMA74cjs.formatBarPosition; exports.formatNote = _chunkPI3UXRWKcjs.formatNote; exports.formatTimeSignature = _chunk2A2QMA74cjs.formatTimeSignature; exports.frequencyOf = _chunkCU6VG2YMcjs.frequencyOf; exports.intervalSemitones = _chunkPI3UXRWKcjs.intervalSemitones; exports.isCompound = _chunk2A2QMA74cjs.isCompound; exports.isConsonantInterval = _chunkPI3UXRWKcjs.isConsonantInterval; exports.isLibcantusError = _chunkPI3UXRWKcjs.isLibcantusError; exports.isPerfectInterval = _chunkPI3UXRWKcjs.isPerfectInterval; exports.isStrongBeat = _chunk2A2QMA74cjs.isStrongBeat; exports.justDeviationCents = _chunkCU6VG2YMcjs.justDeviationCents; exports.metricWeight = _chunk2A2QMA74cjs.metricWeight; exports.midiToNote = _chunkPI3UXRWKcjs.midiToNote; exports.naturalPitchClassOf = _chunkPI3UXRWKcjs.naturalPitchClassOf; exports.nearestStep = _chunkCU6VG2YMcjs.nearestStep; exports.noteToMidi = _chunkPI3UXRWKcjs.noteToMidi; exports.noteToPitchClass = _chunkPI3UXRWKcjs.noteToPitchClass; exports.parseInterval = _chunkPI3UXRWKcjs.parseInterval; exports.parseNote = _chunkPI3UXRWKcjs.parseNote; exports.parseTimeSignature = _chunk2A2QMA74cjs.parseTimeSignature; exports.pitchClassOf = _chunkPI3UXRWKcjs.pitchClassOf; exports.pulseBeats = _chunk2A2QMA74cjs.pulseBeats; exports.pulsesPerBar = _chunk2A2QMA74cjs.pulsesPerBar; exports.ratioToCents = _chunkCU6VG2YMcjs.ratioToCents; exports.soundingNotesOnly = _chunkPI3UXRWKcjs.soundingNotesOnly; exports.spelledInterval = _chunkPI3UXRWKcjs.spelledInterval; exports.stepOf = _chunkCU6VG2YMcjs.stepOf; exports.stepsOfCents = _chunkCU6VG2YMcjs.stepsOfCents; exports.transposeByInterval = _chunkPI3UXRWKcjs.transposeByInterval; exports.transposeNote = _chunkPI3UXRWKcjs.transposeNote; exports.tuplet = _chunk2A2QMA74cjs.tuplet;
|
|
648
141
|
//# sourceMappingURL=index.cjs.map
|