@libraz/libcantus 1.3.0 → 1.4.0

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 (130) hide show
  1. package/NOTICE +63 -0
  2. package/README.md +3 -1
  3. package/README_ja.md +13 -11
  4. package/dist/analyze/index.cjs +7 -7
  5. package/dist/analyze/index.cjs.map +1 -1
  6. package/dist/analyze/index.d.cts +14 -12
  7. package/dist/analyze/index.d.ts +14 -12
  8. package/dist/analyze/index.js +6 -6
  9. package/dist/{chunk-NB25P3EH.js → chunk-2G5MCGYU.js} +33 -11
  10. package/dist/chunk-2G5MCGYU.js.map +1 -0
  11. package/dist/{chunk-NM7UAMC3.cjs → chunk-3FDBMIPR.cjs} +64 -64
  12. package/dist/chunk-3FDBMIPR.cjs.map +1 -0
  13. package/dist/{chunk-YFA7X2F6.cjs → chunk-3MDOEFIQ.cjs} +411 -327
  14. package/dist/chunk-3MDOEFIQ.cjs.map +1 -0
  15. package/dist/{chunk-IPEF6NWB.js → chunk-5MWRBYAT.js} +278 -154
  16. package/dist/chunk-5MWRBYAT.js.map +1 -0
  17. package/dist/{chunk-B2PW6EHN.cjs → chunk-6TTBEON3.cjs} +1253 -889
  18. package/dist/chunk-6TTBEON3.cjs.map +1 -0
  19. package/dist/{chunk-UMWZ4ZET.js → chunk-7NQ6AL3H.js} +4 -4
  20. package/dist/chunk-7NQ6AL3H.js.map +1 -0
  21. package/dist/{chunk-PWC4CRWT.cjs → chunk-E3QO3UET.cjs} +31 -23
  22. package/dist/chunk-E3QO3UET.cjs.map +1 -0
  23. package/dist/{chunk-GNVN4PPJ.js → chunk-FJFULJZE.js} +531 -213
  24. package/dist/chunk-FJFULJZE.js.map +1 -0
  25. package/dist/{chunk-CPMB7P75.js → chunk-FK3DGAIZ.js} +608 -244
  26. package/dist/chunk-FK3DGAIZ.js.map +1 -0
  27. package/dist/chunk-GEDTJHAC.cjs.map +1 -1
  28. package/dist/{chunk-RFIBF2RR.js → chunk-H7FVMBUC.js} +138 -65
  29. package/dist/chunk-H7FVMBUC.js.map +1 -0
  30. package/dist/{chunk-4R2LWV7E.cjs → chunk-HYSVSFNI.cjs} +664 -540
  31. package/dist/chunk-HYSVSFNI.cjs.map +1 -0
  32. package/dist/{chunk-35NBV2FT.cjs → chunk-KMYGRFZ6.cjs} +47 -24
  33. package/dist/chunk-KMYGRFZ6.cjs.map +1 -0
  34. package/dist/{chunk-IFZDWIKM.cjs → chunk-LQZQDBCD.cjs} +1048 -730
  35. package/dist/chunk-LQZQDBCD.cjs.map +1 -0
  36. package/dist/{chunk-PM4XJE2Y.cjs → chunk-P3CPXAJ5.cjs} +76 -54
  37. package/dist/chunk-P3CPXAJ5.cjs.map +1 -0
  38. package/dist/{chunk-S5BKZZGM.cjs → chunk-S3QELJUE.cjs} +72 -56
  39. package/dist/chunk-S3QELJUE.cjs.map +1 -0
  40. package/dist/{chunk-PUKJP2Z5.js → chunk-TXFWSU5D.js} +31 -8
  41. package/dist/chunk-TXFWSU5D.js.map +1 -0
  42. package/dist/{chunk-76ZBTRG2.cjs → chunk-U4EQTDGN.cjs} +258 -218
  43. package/dist/chunk-U4EQTDGN.cjs.map +1 -0
  44. package/dist/chunk-UGLFDG7L.cjs.map +1 -1
  45. package/dist/{chunk-MLBPXA4Z.js → chunk-UTE5A36R.js} +198 -114
  46. package/dist/chunk-UTE5A36R.js.map +1 -0
  47. package/dist/{chunk-ZBUROTJQ.js → chunk-UZKQISRF.js} +17 -9
  48. package/dist/chunk-UZKQISRF.js.map +1 -0
  49. package/dist/{chunk-7KG3RTYS.js → chunk-VL5NXVCN.js} +281 -155
  50. package/dist/chunk-VL5NXVCN.js.map +1 -0
  51. package/dist/{chunk-CGBADIO5.cjs → chunk-WOMCXN2W.cjs} +328 -202
  52. package/dist/chunk-WOMCXN2W.cjs.map +1 -0
  53. package/dist/{chunk-3R3QVKY5.cjs → chunk-YDGMWH43.cjs} +397 -324
  54. package/dist/chunk-YDGMWH43.cjs.map +1 -0
  55. package/dist/{chunk-AGOVW7U6.js → chunk-YYVXRV3V.js} +72 -56
  56. package/dist/chunk-YYVXRV3V.js.map +1 -0
  57. package/dist/{chunk-M5RYMAFI.js → chunk-ZLNSH4UL.js} +71 -31
  58. package/dist/chunk-ZLNSH4UL.js.map +1 -0
  59. package/dist/{coerce-DRERzdve.d.cts → coerce-CUhHc3Tu.d.ts} +16 -8
  60. package/dist/{coerce-DP0vYu-x.d.ts → coerce-Ytt2Eiq9.d.cts} +16 -8
  61. package/dist/core/index.cjs +5 -5
  62. package/dist/core/index.cjs.map +1 -1
  63. package/dist/core/index.d.cts +9 -8
  64. package/dist/core/index.d.ts +9 -8
  65. package/dist/core/index.js +4 -4
  66. package/dist/generate/index.cjs +8 -8
  67. package/dist/generate/index.cjs.map +1 -1
  68. package/dist/generate/index.d.cts +28 -18
  69. package/dist/generate/index.d.ts +28 -18
  70. package/dist/generate/index.js +7 -7
  71. package/dist/{index-BMweUlm5.d.cts → index-5VJgKz_Q.d.cts} +6 -2
  72. package/dist/{index-BHIUyjhZ.d.ts → index-BLuDesVG.d.ts} +20 -13
  73. package/dist/{index-B9QLziDe.d.cts → index-BV6APVa6.d.cts} +20 -13
  74. package/dist/{index-CL4b4gUQ.d.ts → index-Bf0Sv8a9.d.ts} +6 -2
  75. package/dist/{index-Dw2DP7vm.d.ts → index-BkT21EMv.d.cts} +3 -2
  76. package/dist/{index-BL5N2Oyz.d.cts → index-C7KCaTRz.d.ts} +3 -2
  77. package/dist/{index-Cy15oTvh.d.ts → index-C9MYbuKS.d.cts} +7 -3
  78. package/dist/{index-Cy15oTvh.d.cts → index-C9MYbuKS.d.ts} +7 -3
  79. package/dist/{index-CY-3NVfy.d.cts → index-DVInzCDS.d.cts} +53 -29
  80. package/dist/{index-9eoQs2C1.d.ts → index-Dg-SAfhz.d.ts} +6 -4
  81. package/dist/{index-zaZdmnU4.d.ts → index-jgeug9EA.d.ts} +53 -29
  82. package/dist/{index-cHvbYgJI.d.cts → index-pQihL4z7.d.cts} +6 -4
  83. package/dist/index.cjs +13 -13
  84. package/dist/index.cjs.map +1 -1
  85. package/dist/index.d.cts +11 -11
  86. package/dist/index.d.ts +11 -11
  87. package/dist/index.js +12 -12
  88. package/dist/{masks-Cc7-MzzY.d.ts → masks-BnzXnBj0.d.cts} +3 -2
  89. package/dist/{masks-pADfTOiD.d.cts → masks-tycmkrgs.d.ts} +3 -2
  90. package/dist/model/index.cjs +12 -12
  91. package/dist/model/index.cjs.map +1 -1
  92. package/dist/model/index.d.cts +63 -48
  93. package/dist/model/index.d.ts +63 -48
  94. package/dist/model/index.js +11 -11
  95. package/dist/{positional-DJgs6ltD.d.ts → positional-CscpxtlE.d.cts} +3 -2
  96. package/dist/{positional-DMZer-FM.d.cts → positional-DLnfUgqG.d.ts} +3 -2
  97. package/dist/{profile-DLdlIpS9.d.ts → profile-B4WqcM4H.d.ts} +25 -17
  98. package/dist/{profile-CQMEqdH9.d.cts → profile-BJd1XkPB.d.cts} +25 -17
  99. package/dist/theory/index.cjs +5 -5
  100. package/dist/theory/index.cjs.map +1 -1
  101. package/dist/theory/index.d.cts +18 -14
  102. package/dist/theory/index.d.ts +18 -14
  103. package/dist/theory/index.js +4 -4
  104. package/dist/{types-D-XgxGvp.d.cts → types-7mGFwvMm.d.ts} +45 -22
  105. package/dist/{types-Dh7C064C.d.ts → types-_ofpb2be.d.cts} +45 -22
  106. package/package.json +13 -13
  107. package/dist/chunk-35NBV2FT.cjs.map +0 -1
  108. package/dist/chunk-3R3QVKY5.cjs.map +0 -1
  109. package/dist/chunk-4R2LWV7E.cjs.map +0 -1
  110. package/dist/chunk-76ZBTRG2.cjs.map +0 -1
  111. package/dist/chunk-7KG3RTYS.js.map +0 -1
  112. package/dist/chunk-AGOVW7U6.js.map +0 -1
  113. package/dist/chunk-B2PW6EHN.cjs.map +0 -1
  114. package/dist/chunk-CGBADIO5.cjs.map +0 -1
  115. package/dist/chunk-CPMB7P75.js.map +0 -1
  116. package/dist/chunk-GNVN4PPJ.js.map +0 -1
  117. package/dist/chunk-IFZDWIKM.cjs.map +0 -1
  118. package/dist/chunk-IPEF6NWB.js.map +0 -1
  119. package/dist/chunk-M5RYMAFI.js.map +0 -1
  120. package/dist/chunk-MLBPXA4Z.js.map +0 -1
  121. package/dist/chunk-NB25P3EH.js.map +0 -1
  122. package/dist/chunk-NM7UAMC3.cjs.map +0 -1
  123. package/dist/chunk-PM4XJE2Y.cjs.map +0 -1
  124. package/dist/chunk-PUKJP2Z5.js.map +0 -1
  125. package/dist/chunk-PWC4CRWT.cjs.map +0 -1
  126. package/dist/chunk-RFIBF2RR.js.map +0 -1
  127. package/dist/chunk-S5BKZZGM.cjs.map +0 -1
  128. package/dist/chunk-UMWZ4ZET.js.map +0 -1
  129. package/dist/chunk-YFA7X2F6.cjs.map +0 -1
  130. package/dist/chunk-ZBUROTJQ.js.map +0 -1
@@ -1,8 +1,8 @@
1
- import { e as KeyScale, h as NoteEvent, i as NoteLike, g as Note } from './index-Cy15oTvh.js';
2
- import { d as ChordQuality, k as KeyVariant, b as Chord, r as SpelledKeyLike, c as ChordLike, K as KeyLike, n as ResolvedKey, N as NoteSafety, o as SafetyProfile } from './coerce-DP0vYu-x.js';
3
- import { r as ScaleName } from './masks-Cc7-MzzY.js';
4
- import { p as KeyProfileName, q as KeyProfilePair, a6 as RejectedCandidate, r as KeyRegion, h as ChordTimeline, c as CadenceHit, a as AnalyzedNote, ab as TheoryLabel, K as KeyContext, d as CadenceResult, a5 as ReferenceProfile } from './types-Dh7C064C.js';
5
- import { b as MeterLike } from './index-CL4b4gUQ.js';
1
+ import { e as KeyScale, h as NoteEvent, i as NoteLike, g as Note } from './index-C9MYbuKS.js';
2
+ import { d as ChordQuality, k as KeyVariant, b as Chord, r as SpelledKeyLike, c as ChordLike, K as KeyLike, n as ResolvedKey, N as NoteSafety, o as SafetyProfile } from './coerce-CUhHc3Tu.js';
3
+ import { r as ScaleName } from './masks-tycmkrgs.js';
4
+ import { p as KeyProfileName, q as KeyProfilePair, a6 as RejectedCandidate, r as KeyRegion, h as ChordTimeline, c as CadenceHit, a as AnalyzedNote, ab as TheoryLabel, K as KeyContext, d as CadenceResult, a5 as ReferenceProfile } from './types-7mGFwvMm.js';
5
+ import { b as MeterLike } from './index-Bf0Sv8a9.js';
6
6
 
7
7
  /**
8
8
  * Church-mode candidates for {@link detectKey}.
@@ -243,7 +243,8 @@ type DetectKeyOptions = {
243
243
  * Every input pitch class is tried as a root against every known chord quality.
244
244
  * A match is reported when all of the chord's tones are present in the input, or
245
245
  * when the only absent tone is the perfect fifth (a common omission in shell
246
- * voicings); matches are ranked best-first by fewest extra notes, then fewest
246
+ * voicings) and at least two of the chord's tones still sound, so a single
247
+ * pitch class matches no chord; matches are ranked best-first by fewest extra notes, then fewest
247
248
  * missing notes, then root position over an inversion, then most specific
248
249
  * (largest) chord. An exact match (no extras, no missing) is flagged and ranked
249
250
  * first.
@@ -291,11 +292,11 @@ declare function detectChordBest(pitches: readonly number[], opts?: DetectChordO
291
292
  *
292
293
  * Choosing the minor variant is deliberately not part of the ranking. A minor
293
294
  * candidate is ranked once, on the minor profile, which already expects some
294
- * weight on the raised sixth and seventh; only then does it report whichever of
295
- * the natural, harmonic and melodic masks covers the most input weight, and
296
- * `fit` is measured against that mask. That split is why a harmonic-minor
297
- * cadence ranks its own tonic first without the harmonic variant having to win
298
- * a scoring contest against the natural one.
295
+ * weight on the raised seventh and treats the raised sixth as chromatic; only
296
+ * then does it report whichever of the natural, harmonic and melodic masks
297
+ * covers the most input weight, and `fit` is measured against that mask. That
298
+ * split is why a harmonic-minor cadence ranks its own tonic first without the
299
+ * harmonic variant having to win a scoring contest against the natural one.
299
300
  *
300
301
  * {@link DetectKeyOptions.modes} adds the church modes to the same contest, one
301
302
  * candidate per mode per tonic, each ranked on a profile derived from its
@@ -737,7 +738,8 @@ type ArrangementOptions = {
737
738
  *
738
739
  * The first downbeat is beat 0, so an upbeat is written at negative beats.
739
740
  * Declaring its length rejects a note that starts before the pickup does;
740
- * leave it unset to accept any finite onset.
741
+ * leave it unset to accept any onset within ±`Number.MAX_SAFE_INTEGER`
742
+ * (2^53 - 1).
741
743
  *
742
744
  * @defaultValue no declared pickup
743
745
  */
@@ -1307,8 +1309,8 @@ type StructuralCadence = {
1307
1309
  *
1308
1310
  * Three kinds of evidence are gathered independently and then reconciled. The
1309
1311
  * harmony contributes its cadences, each closing at the end of the chord it
1310
- * arrives on, and at the bar line where that chord is held across one — a tonic
1311
- * still sounding into the next phrase closed this one at the bar line. The
1312
+ * arrives on, and at every bar line that chord is held across — a tonic still
1313
+ * sounding into the next phrase closed this one at the bar line. The
1312
1314
  * cadence reported for a phrase is always one that arrived inside it. The
1313
1315
  * melody contributes the rests it breathes at and the notes it
1314
1316
  * holds long enough to read as arrivals. Repetition contributes the beats where
@@ -1436,7 +1438,10 @@ type ReferenceProfileOptions = {
1436
1438
  timeline?: ChordTimeline;
1437
1439
  /**
1438
1440
  * The melodic line. Omit it to read the top line of `notes`, where notes
1439
- * struck together are one event and the highest of them stands for it.
1441
+ * struck together are one event and the highest of them stands for it. Only
1442
+ * notes struck together are collapsed: a lower note struck while a higher
1443
+ * one still sounds — a broken-chord or Alberti accompaniment under a held
1444
+ * melody note — joins the line, so pass the melody of such a texture.
1440
1445
  *
1441
1446
  * @defaultValue the top line of the notes
1442
1447
  */
@@ -1461,7 +1466,9 @@ type ReferenceProfileOptions = {
1461
1466
  *
1462
1467
  * The melody is the `melody` option when given, and otherwise the top line of
1463
1468
  * the notes — notes struck together read as one event, the highest standing
1464
- * for it — so a piano part read whole answers for its upper voice. The harmony
1469
+ * for it. A lower note struck while a higher one still sounds stays in that
1470
+ * line, so a part whose accompaniment moves under a held melody note is read
1471
+ * as its melody only when the melody is passed. The harmony
1465
1472
  * is the `timeline` option when given, and otherwise inferred from all the
1466
1473
  * notes. The motif search expects quantized onsets.
1467
1474
  *
@@ -1494,4 +1501,5 @@ type ReferenceProfileOptions = {
1494
1501
  */
1495
1502
  declare function analyzeReference(notes: readonly NoteEvent[], opts?: ReferenceProfileOptions): ReferenceProfile;
1496
1503
 
1497
- export { type ArrangementAnalysis as A, detectKeyFromNotes as B, type ChordMatch as C, type DetectChordOptions as D, hypermeter as E, phrasesFromTimeline as F, spellAugmentedSixth as G, type Hypermeter as H, structuralCadences as I, tensionCurve as J, type KeyMatch as K, tensionCurveFrom as L, MODAL_SCALE_NAMES as M, type Phrase as P, type ReferenceProfileOptions as R, type StructuralCadence as S, type TensionPoint as T, type ArrangementOptions as a, type ArrangementSession as b, type ArrangementTrack as c, type AugmentedSixthKind as d, type Conflict as e, type ConflictPartner as f, type DetectKeyOptions as g, type HypermeterOptions as h, type ModalCandidate as i, type ModalScaleName as j, type PhraseOptions as k, type PhraseSignal as l, type TrackAnalysis as m, type TrackEdit as n, type TrackRole as o, analyzeArrangement as p, analyzePolyphony as q, analyzeReference as r, augmentedSixthChord as s, augmentedSixthFromPitchClasses as t, augmentedSixthKind as u, createArrangementSession as v, detectChord as w, detectChordBest as x, detectKey as y, detectKeyBest as z };
1504
+ export { detectKeyFromNotes as B, hypermeter as E, phrasesFromTimeline as F, spellAugmentedSixth as G, structuralCadences as I, tensionCurve as J, tensionCurveFrom as L, MODAL_SCALE_NAMES as M, analyzeArrangement as p, analyzePolyphony as q, analyzeReference as r, augmentedSixthChord as s, augmentedSixthFromPitchClasses as t, augmentedSixthKind as u, createArrangementSession as v, detectChord as w, detectChordBest as x, detectKey as y, detectKeyBest as z };
1505
+ export type { ArrangementAnalysis as A, ChordMatch as C, DetectChordOptions as D, Hypermeter as H, KeyMatch as K, Phrase as P, ReferenceProfileOptions as R, StructuralCadence as S, TensionPoint as T, ArrangementOptions as a, ArrangementSession as b, ArrangementTrack as c, AugmentedSixthKind as d, Conflict as e, ConflictPartner as f, DetectKeyOptions as g, HypermeterOptions as h, ModalCandidate as i, ModalScaleName as j, PhraseOptions as k, PhraseSignal as l, TrackAnalysis as m, TrackEdit as n, TrackRole as o };
@@ -1,8 +1,8 @@
1
- import { e as KeyScale, h as NoteEvent, i as NoteLike, g as Note } from './index-Cy15oTvh.cjs';
2
- import { d as ChordQuality, k as KeyVariant, b as Chord, r as SpelledKeyLike, c as ChordLike, K as KeyLike, n as ResolvedKey, N as NoteSafety, o as SafetyProfile } from './coerce-DRERzdve.cjs';
3
- import { r as ScaleName } from './masks-pADfTOiD.cjs';
4
- import { p as KeyProfileName, q as KeyProfilePair, a6 as RejectedCandidate, r as KeyRegion, h as ChordTimeline, c as CadenceHit, a as AnalyzedNote, ab as TheoryLabel, K as KeyContext, d as CadenceResult, a5 as ReferenceProfile } from './types-D-XgxGvp.cjs';
5
- import { b as MeterLike } from './index-BMweUlm5.cjs';
1
+ import { e as KeyScale, h as NoteEvent, i as NoteLike, g as Note } from './index-C9MYbuKS.cjs';
2
+ import { d as ChordQuality, k as KeyVariant, b as Chord, r as SpelledKeyLike, c as ChordLike, K as KeyLike, n as ResolvedKey, N as NoteSafety, o as SafetyProfile } from './coerce-Ytt2Eiq9.cjs';
3
+ import { r as ScaleName } from './masks-BnzXnBj0.cjs';
4
+ import { p as KeyProfileName, q as KeyProfilePair, a6 as RejectedCandidate, r as KeyRegion, h as ChordTimeline, c as CadenceHit, a as AnalyzedNote, ab as TheoryLabel, K as KeyContext, d as CadenceResult, a5 as ReferenceProfile } from './types-_ofpb2be.cjs';
5
+ import { b as MeterLike } from './index-5VJgKz_Q.cjs';
6
6
 
7
7
  /**
8
8
  * Church-mode candidates for {@link detectKey}.
@@ -243,7 +243,8 @@ type DetectKeyOptions = {
243
243
  * Every input pitch class is tried as a root against every known chord quality.
244
244
  * A match is reported when all of the chord's tones are present in the input, or
245
245
  * when the only absent tone is the perfect fifth (a common omission in shell
246
- * voicings); matches are ranked best-first by fewest extra notes, then fewest
246
+ * voicings) and at least two of the chord's tones still sound, so a single
247
+ * pitch class matches no chord; matches are ranked best-first by fewest extra notes, then fewest
247
248
  * missing notes, then root position over an inversion, then most specific
248
249
  * (largest) chord. An exact match (no extras, no missing) is flagged and ranked
249
250
  * first.
@@ -291,11 +292,11 @@ declare function detectChordBest(pitches: readonly number[], opts?: DetectChordO
291
292
  *
292
293
  * Choosing the minor variant is deliberately not part of the ranking. A minor
293
294
  * candidate is ranked once, on the minor profile, which already expects some
294
- * weight on the raised sixth and seventh; only then does it report whichever of
295
- * the natural, harmonic and melodic masks covers the most input weight, and
296
- * `fit` is measured against that mask. That split is why a harmonic-minor
297
- * cadence ranks its own tonic first without the harmonic variant having to win
298
- * a scoring contest against the natural one.
295
+ * weight on the raised seventh and treats the raised sixth as chromatic; only
296
+ * then does it report whichever of the natural, harmonic and melodic masks
297
+ * covers the most input weight, and `fit` is measured against that mask. That
298
+ * split is why a harmonic-minor cadence ranks its own tonic first without the
299
+ * harmonic variant having to win a scoring contest against the natural one.
299
300
  *
300
301
  * {@link DetectKeyOptions.modes} adds the church modes to the same contest, one
301
302
  * candidate per mode per tonic, each ranked on a profile derived from its
@@ -737,7 +738,8 @@ type ArrangementOptions = {
737
738
  *
738
739
  * The first downbeat is beat 0, so an upbeat is written at negative beats.
739
740
  * Declaring its length rejects a note that starts before the pickup does;
740
- * leave it unset to accept any finite onset.
741
+ * leave it unset to accept any onset within ±`Number.MAX_SAFE_INTEGER`
742
+ * (2^53 - 1).
741
743
  *
742
744
  * @defaultValue no declared pickup
743
745
  */
@@ -1307,8 +1309,8 @@ type StructuralCadence = {
1307
1309
  *
1308
1310
  * Three kinds of evidence are gathered independently and then reconciled. The
1309
1311
  * harmony contributes its cadences, each closing at the end of the chord it
1310
- * arrives on, and at the bar line where that chord is held across one — a tonic
1311
- * still sounding into the next phrase closed this one at the bar line. The
1312
+ * arrives on, and at every bar line that chord is held across — a tonic still
1313
+ * sounding into the next phrase closed this one at the bar line. The
1312
1314
  * cadence reported for a phrase is always one that arrived inside it. The
1313
1315
  * melody contributes the rests it breathes at and the notes it
1314
1316
  * holds long enough to read as arrivals. Repetition contributes the beats where
@@ -1436,7 +1438,10 @@ type ReferenceProfileOptions = {
1436
1438
  timeline?: ChordTimeline;
1437
1439
  /**
1438
1440
  * The melodic line. Omit it to read the top line of `notes`, where notes
1439
- * struck together are one event and the highest of them stands for it.
1441
+ * struck together are one event and the highest of them stands for it. Only
1442
+ * notes struck together are collapsed: a lower note struck while a higher
1443
+ * one still sounds — a broken-chord or Alberti accompaniment under a held
1444
+ * melody note — joins the line, so pass the melody of such a texture.
1440
1445
  *
1441
1446
  * @defaultValue the top line of the notes
1442
1447
  */
@@ -1461,7 +1466,9 @@ type ReferenceProfileOptions = {
1461
1466
  *
1462
1467
  * The melody is the `melody` option when given, and otherwise the top line of
1463
1468
  * the notes — notes struck together read as one event, the highest standing
1464
- * for it — so a piano part read whole answers for its upper voice. The harmony
1469
+ * for it. A lower note struck while a higher one still sounds stays in that
1470
+ * line, so a part whose accompaniment moves under a held melody note is read
1471
+ * as its melody only when the melody is passed. The harmony
1465
1472
  * is the `timeline` option when given, and otherwise inferred from all the
1466
1473
  * notes. The motif search expects quantized onsets.
1467
1474
  *
@@ -1494,4 +1501,5 @@ type ReferenceProfileOptions = {
1494
1501
  */
1495
1502
  declare function analyzeReference(notes: readonly NoteEvent[], opts?: ReferenceProfileOptions): ReferenceProfile;
1496
1503
 
1497
- export { type ArrangementAnalysis as A, detectKeyFromNotes as B, type ChordMatch as C, type DetectChordOptions as D, hypermeter as E, phrasesFromTimeline as F, spellAugmentedSixth as G, type Hypermeter as H, structuralCadences as I, tensionCurve as J, type KeyMatch as K, tensionCurveFrom as L, MODAL_SCALE_NAMES as M, type Phrase as P, type ReferenceProfileOptions as R, type StructuralCadence as S, type TensionPoint as T, type ArrangementOptions as a, type ArrangementSession as b, type ArrangementTrack as c, type AugmentedSixthKind as d, type Conflict as e, type ConflictPartner as f, type DetectKeyOptions as g, type HypermeterOptions as h, type ModalCandidate as i, type ModalScaleName as j, type PhraseOptions as k, type PhraseSignal as l, type TrackAnalysis as m, type TrackEdit as n, type TrackRole as o, analyzeArrangement as p, analyzePolyphony as q, analyzeReference as r, augmentedSixthChord as s, augmentedSixthFromPitchClasses as t, augmentedSixthKind as u, createArrangementSession as v, detectChord as w, detectChordBest as x, detectKey as y, detectKeyBest as z };
1504
+ export { detectKeyFromNotes as B, hypermeter as E, phrasesFromTimeline as F, spellAugmentedSixth as G, structuralCadences as I, tensionCurve as J, tensionCurveFrom as L, MODAL_SCALE_NAMES as M, analyzeArrangement as p, analyzePolyphony as q, analyzeReference as r, augmentedSixthChord as s, augmentedSixthFromPitchClasses as t, augmentedSixthKind as u, createArrangementSession as v, detectChord as w, detectChordBest as x, detectKey as y, detectKeyBest as z };
1505
+ export type { ArrangementAnalysis as A, ChordMatch as C, DetectChordOptions as D, Hypermeter as H, KeyMatch as K, Phrase as P, ReferenceProfileOptions as R, StructuralCadence as S, TensionPoint as T, ArrangementOptions as a, ArrangementSession as b, ArrangementTrack as c, AugmentedSixthKind as d, Conflict as e, ConflictPartner as f, DetectKeyOptions as g, HypermeterOptions as h, ModalCandidate as i, ModalScaleName as j, PhraseOptions as k, PhraseSignal as l, TrackAnalysis as m, TrackEdit as n, TrackRole as o };
@@ -16,7 +16,7 @@
16
16
 
17
17
 
18
18
 
19
- var _chunk76ZBTRG2cjs = require('../chunk-76ZBTRG2.cjs');
19
+ var _chunkU4EQTDGNcjs = require('../chunk-U4EQTDGN.cjs');
20
20
 
21
21
 
22
22
 
@@ -25,7 +25,7 @@ var _chunk76ZBTRG2cjs = require('../chunk-76ZBTRG2.cjs');
25
25
 
26
26
 
27
27
 
28
- var _chunkPM4XJE2Ycjs = require('../chunk-PM4XJE2Y.cjs');
28
+ var _chunkP3CPXAJ5cjs = require('../chunk-P3CPXAJ5.cjs');
29
29
 
30
30
 
31
31
 
@@ -142,13 +142,13 @@ var _chunkPM4XJE2Ycjs = require('../chunk-PM4XJE2Y.cjs');
142
142
 
143
143
 
144
144
 
145
- var _chunk3R3QVKY5cjs = require('../chunk-3R3QVKY5.cjs');
145
+ var _chunkYDGMWH43cjs = require('../chunk-YDGMWH43.cjs');
146
146
 
147
147
 
148
148
 
149
149
 
150
150
 
151
- var _chunkS5BKZZGMcjs = require('../chunk-S5BKZZGM.cjs');
151
+ var _chunkS3QELJUEcjs = require('../chunk-S3QELJUE.cjs');
152
152
 
153
153
 
154
154
 
@@ -292,5 +292,5 @@ var _chunkS5BKZZGMcjs = require('../chunk-S5BKZZGM.cjs');
292
292
 
293
293
 
294
294
 
295
- exports.ALTERED_MASK = _chunk3R3QVKY5cjs.ALTERED_MASK; exports.BLUES_MASK = _chunk3R3QVKY5cjs.BLUES_MASK; exports.BudgetExceededError = _chunkS5BKZZGMcjs.BudgetExceededError; exports.CHROMATIC_MASK = _chunk3R3QVKY5cjs.CHROMATIC_MASK; exports.ConsonanceClass = _chunkS5BKZZGMcjs.ConsonanceClass; exports.DORIAN_MASK = _chunk3R3QVKY5cjs.DORIAN_MASK; exports.DOUBLE_HARMONIC_MASK = _chunk3R3QVKY5cjs.DOUBLE_HARMONIC_MASK; exports.HARMONIC_MINOR_MASK = _chunk3R3QVKY5cjs.HARMONIC_MINOR_MASK; exports.InvalidInputError = _chunkS5BKZZGMcjs.InvalidInputError; exports.LOCRIAN_MASK = _chunk3R3QVKY5cjs.LOCRIAN_MASK; exports.LOCRIAN_NATURAL2_MASK = _chunk3R3QVKY5cjs.LOCRIAN_NATURAL2_MASK; exports.LYDIAN_DOMINANT_MASK = _chunk3R3QVKY5cjs.LYDIAN_DOMINANT_MASK; exports.LYDIAN_MASK = _chunk3R3QVKY5cjs.LYDIAN_MASK; exports.MAJOR_MASK = _chunk3R3QVKY5cjs.MAJOR_MASK; exports.MAJOR_PENTATONIC_MASK = _chunk3R3QVKY5cjs.MAJOR_PENTATONIC_MASK; exports.MARWA_MASK = _chunk3R3QVKY5cjs.MARWA_MASK; exports.MELODIC_MINOR_MASK = _chunk3R3QVKY5cjs.MELODIC_MINOR_MASK; exports.MINOR_PENTATONIC_MASK = _chunk3R3QVKY5cjs.MINOR_PENTATONIC_MASK; exports.MIXOLYDIAN_B13_MASK = _chunk3R3QVKY5cjs.MIXOLYDIAN_B13_MASK; exports.MIXOLYDIAN_MASK = _chunk3R3QVKY5cjs.MIXOLYDIAN_MASK; exports.MIYAKO_BUSHI_MASK = _chunk3R3QVKY5cjs.MIYAKO_BUSHI_MASK; exports.NAMED_SCALES = _chunk3R3QVKY5cjs.NAMED_SCALES; exports.NATURAL_MINOR_MASK = _chunk3R3QVKY5cjs.NATURAL_MINOR_MASK; exports.NoSolutionError = _chunkS5BKZZGMcjs.NoSolutionError; exports.NoteSafety = _chunk3R3QVKY5cjs.NoteSafety; exports.OCTATONIC_HALF_WHOLE_MASK = _chunk3R3QVKY5cjs.OCTATONIC_HALF_WHOLE_MASK; exports.OCTATONIC_WHOLE_HALF_MASK = _chunk3R3QVKY5cjs.OCTATONIC_WHOLE_HALF_MASK; exports.PHRYGIAN_DOMINANT_MASK = _chunk3R3QVKY5cjs.PHRYGIAN_DOMINANT_MASK; exports.PHRYGIAN_MASK = _chunk3R3QVKY5cjs.PHRYGIAN_MASK; exports.PROFILE_WEIGHTS = _chunk3R3QVKY5cjs.PROFILE_WEIGHTS; exports.PURVI_MASK = _chunk3R3QVKY5cjs.PURVI_MASK; exports.RITSU_MASK = _chunk3R3QVKY5cjs.RITSU_MASK; exports.RYUKYU_MASK = _chunk3R3QVKY5cjs.RYUKYU_MASK; exports.ReasonFlag = _chunk3R3QVKY5cjs.ReasonFlag; exports.SATB_RANGES = _chunk76ZBTRG2cjs.SATB_RANGES; exports.SCALE_ALIASES = _chunk3R3QVKY5cjs.SCALE_ALIASES; exports.SCALE_SYSTEMS = _chunk3R3QVKY5cjs.SCALE_SYSTEMS; exports.TODI_MASK = _chunk3R3QVKY5cjs.TODI_MASK; exports.TRANSPOSING_INSTRUMENTS = _chunk76ZBTRG2cjs.TRANSPOSING_INSTRUMENTS; exports.WHOLE_TONE_MASK = _chunk3R3QVKY5cjs.WHOLE_TONE_MASK; exports.WORLD_SCALES = _chunk3R3QVKY5cjs.WORLD_SCALES; exports.assertKeyVariant = _chunk3R3QVKY5cjs.assertKeyVariant; exports.assertModeMask = _chunk3R3QVKY5cjs.assertModeMask; exports.availableTensions = _chunkPM4XJE2Ycjs.availableTensions; exports.avoidNotes = _chunkPM4XJE2Ycjs.avoidNotes; exports.checkPartWriting = _chunk76ZBTRG2cjs.checkPartWriting; exports.checkSpecies = _chunk76ZBTRG2cjs.checkSpecies; exports.chordFromDegree = _chunk3R3QVKY5cjs.chordFromDegree; exports.chordFromSpan = _chunk3R3QVKY5cjs.chordFromSpan; exports.chordFromSpec = _chunk3R3QVKY5cjs.chordFromSpec; exports.chordPitchClasses = _chunk3R3QVKY5cjs.chordPitchClasses; exports.chordQualities = _chunk3R3QVKY5cjs.chordQualities; exports.chordScaleReport = _chunkPM4XJE2Ycjs.chordScaleReport; exports.chordScales = _chunkPM4XJE2Ycjs.chordScales; exports.chordSpecIntervals = _chunk3R3QVKY5cjs.chordSpecIntervals; exports.chordSpecOf = _chunk3R3QVKY5cjs.chordSpecOf; exports.chordSpecQuality = _chunk3R3QVKY5cjs.chordSpecQuality; exports.chordToneRole = _chunk3R3QVKY5cjs.chordToneRole; exports.classifySpelledInterval = _chunk3R3QVKY5cjs.classifySpelledInterval; exports.createsBattuta = _chunk3R3QVKY5cjs.createsBattuta; exports.createsHiddenParallelPerfect = _chunk3R3QVKY5cjs.createsHiddenParallelPerfect; exports.createsParallelOctave = _chunk3R3QVKY5cjs.createsParallelOctave; exports.createsParallelPerfect = _chunk3R3QVKY5cjs.createsParallelPerfect; exports.createsParallelUnison = _chunk3R3QVKY5cjs.createsParallelUnison; exports.createsVerticalDissonance = _chunk3R3QVKY5cjs.createsVerticalDissonance; exports.createsVoiceCrossing = _chunk3R3QVKY5cjs.createsVoiceCrossing; exports.createsVoiceOverlap = _chunk3R3QVKY5cjs.createsVoiceOverlap; exports.diatonicPitchClasses = _chunk3R3QVKY5cjs.diatonicPitchClasses; exports.diatonicSeventh = _chunk3R3QVKY5cjs.diatonicSeventh; exports.diatonicTriad = _chunk3R3QVKY5cjs.diatonicTriad; exports.dominantKeyOf = _chunk3R3QVKY5cjs.dominantKeyOf; exports.enharmonicKeyOf = _chunk3R3QVKY5cjs.enharmonicKeyOf; exports.enumerateSafePitches = _chunk3R3QVKY5cjs.enumerateSafePitches; exports.evaluateSafety = _chunk3R3QVKY5cjs.evaluateSafety; exports.exceedsSpacing = _chunk3R3QVKY5cjs.exceedsSpacing; exports.figuredBassOf = _chunk76ZBTRG2cjs.figuredBassOf; exports.figuredBassRealization = _chunk76ZBTRG2cjs.figuredBassRealization; exports.formatChordSymbol = _chunk3R3QVKY5cjs.formatChordSymbol; exports.instrumentTransposition = _chunk76ZBTRG2cjs.instrumentTransposition; exports.intervalAboveRoot = _chunk3R3QVKY5cjs.intervalAboveRoot; exports.isAugmentedMelodicInterval = _chunk3R3QVKY5cjs.isAugmentedMelodicInterval; exports.isChordMember = _chunk3R3QVKY5cjs.isChordMember; exports.isForbiddenMelodicLeap = _chunk3R3QVKY5cjs.isForbiddenMelodicLeap; exports.isLeadingToneResolution = _chunk3R3QVKY5cjs.isLeadingToneResolution; exports.isScaleTone = _chunk3R3QVKY5cjs.isScaleTone; exports.isSignatureKey = _chunk3R3QVKY5cjs.isSignatureKey; exports.keyFromFifths = _chunk3R3QVKY5cjs.keyFromFifths; exports.keyRelationBetween = _chunk3R3QVKY5cjs.keyRelationBetween; exports.keySignatureFifths = _chunk3R3QVKY5cjs.keySignatureFifths; exports.majorKey = _chunk3R3QVKY5cjs.majorKey; exports.makeChord = _chunk3R3QVKY5cjs.makeChord; exports.maskFromOffsets = _chunk3R3QVKY5cjs.maskFromOffsets; exports.minorKey = _chunk3R3QVKY5cjs.minorKey; exports.namedScaleMask = _chunk3R3QVKY5cjs.namedScaleMask; exports.nearestScaleTone = _chunk3R3QVKY5cjs.nearestScaleTone; exports.nextVoicing = _chunk76ZBTRG2cjs.nextVoicing; exports.noteNames = _chunk3R3QVKY5cjs.noteNames; exports.parallelKeyOf = _chunk3R3QVKY5cjs.parallelKeyOf; exports.parseChordSymbol = _chunk3R3QVKY5cjs.parseChordSymbol; exports.pitchToScaleDegree = _chunk3R3QVKY5cjs.pitchToScaleDegree; exports.profileWeights = _chunk3R3QVKY5cjs.profileWeights; exports.realizeFiguredBass = _chunk76ZBTRG2cjs.realizeFiguredBass; exports.relatedKeysOf = _chunk3R3QVKY5cjs.relatedKeysOf; exports.relativeKeyOf = _chunk3R3QVKY5cjs.relativeKeyOf; exports.requireScaleMask = _chunk3R3QVKY5cjs.requireScaleMask; exports.resolveKey = _chunk3R3QVKY5cjs.resolveKey; exports.resolveScaleName = _chunk3R3QVKY5cjs.resolveScaleName; exports.roleOf = _chunkPM4XJE2Ycjs.roleOf; exports.scaleByName = _chunk3R3QVKY5cjs.scaleByName; exports.scaleLadderPitch = _chunk3R3QVKY5cjs.scaleLadderPitch; exports.scaleLadderPosition = _chunk3R3QVKY5cjs.scaleLadderPosition; exports.scaleMatchesChord = _chunkPM4XJE2Ycjs.scaleMatchesChord; exports.scaleOf = _chunk3R3QVKY5cjs.scaleOf; exports.scaleSystemOf = _chunk3R3QVKY5cjs.scaleSystemOf; exports.scaleTonesInDegreeOrder = _chunk3R3QVKY5cjs.scaleTonesInDegreeOrder; exports.scalesForChanges = _chunkPM4XJE2Ycjs.scalesForChanges; exports.shiftByScaleDegrees = _chunk3R3QVKY5cjs.shiftByScaleDegrees; exports.spanFromChord = _chunk3R3QVKY5cjs.spanFromChord; exports.spellChord = _chunk3R3QVKY5cjs.spellChord; exports.spellChordFromRoot = _chunk3R3QVKY5cjs.spellChordFromRoot; exports.spellPitch = _chunk3R3QVKY5cjs.spellPitch; exports.spellPitchClass = _chunk3R3QVKY5cjs.spellPitchClass; exports.spellPitchClasses = _chunk3R3QVKY5cjs.spellPitchClasses; exports.spellScale = _chunk3R3QVKY5cjs.spellScale; exports.spellVoicing = _chunk76ZBTRG2cjs.spellVoicing; exports.spelledKeyOf = _chunk3R3QVKY5cjs.spelledKeyOf; exports.subdominantKeyOf = _chunk3R3QVKY5cjs.subdominantKeyOf; exports.supportsFunctionalHarmony = _chunk3R3QVKY5cjs.supportsFunctionalHarmony; exports.toChordData = _chunk3R3QVKY5cjs.toChordData; exports.toKeyScale = _chunk3R3QVKY5cjs.toKeyScale; exports.toSoundingPitch = _chunk76ZBTRG2cjs.toSoundingPitch; exports.toWrittenPitch = _chunk76ZBTRG2cjs.toWrittenPitch; exports.transposeChord = _chunk3R3QVKY5cjs.transposeChord; exports.transposeChordSymbol = _chunk3R3QVKY5cjs.transposeChordSymbol; exports.tryParseChordSymbol = _chunk3R3QVKY5cjs.tryParseChordSymbol; exports.tryResolveKeyName = _chunk3R3QVKY5cjs.tryResolveKeyName; exports.variantOfMask = _chunk3R3QVKY5cjs.variantOfMask; exports.voiceChord = _chunk76ZBTRG2cjs.voiceChord; exports.voiceChordStyled = _chunk76ZBTRG2cjs.voiceChordStyled; exports.voiceIndependence = _chunk3R3QVKY5cjs.voiceIndependence; exports.voiceLeadingCost = _chunk76ZBTRG2cjs.voiceLeadingCost; exports.voiceProgression = _chunk76ZBTRG2cjs.voiceProgression;
295
+ exports.ALTERED_MASK = _chunkYDGMWH43cjs.ALTERED_MASK; exports.BLUES_MASK = _chunkYDGMWH43cjs.BLUES_MASK; exports.BudgetExceededError = _chunkS3QELJUEcjs.BudgetExceededError; exports.CHROMATIC_MASK = _chunkYDGMWH43cjs.CHROMATIC_MASK; exports.ConsonanceClass = _chunkS3QELJUEcjs.ConsonanceClass; exports.DORIAN_MASK = _chunkYDGMWH43cjs.DORIAN_MASK; exports.DOUBLE_HARMONIC_MASK = _chunkYDGMWH43cjs.DOUBLE_HARMONIC_MASK; exports.HARMONIC_MINOR_MASK = _chunkYDGMWH43cjs.HARMONIC_MINOR_MASK; exports.InvalidInputError = _chunkS3QELJUEcjs.InvalidInputError; exports.LOCRIAN_MASK = _chunkYDGMWH43cjs.LOCRIAN_MASK; exports.LOCRIAN_NATURAL2_MASK = _chunkYDGMWH43cjs.LOCRIAN_NATURAL2_MASK; exports.LYDIAN_DOMINANT_MASK = _chunkYDGMWH43cjs.LYDIAN_DOMINANT_MASK; exports.LYDIAN_MASK = _chunkYDGMWH43cjs.LYDIAN_MASK; exports.MAJOR_MASK = _chunkYDGMWH43cjs.MAJOR_MASK; exports.MAJOR_PENTATONIC_MASK = _chunkYDGMWH43cjs.MAJOR_PENTATONIC_MASK; exports.MARWA_MASK = _chunkYDGMWH43cjs.MARWA_MASK; exports.MELODIC_MINOR_MASK = _chunkYDGMWH43cjs.MELODIC_MINOR_MASK; exports.MINOR_PENTATONIC_MASK = _chunkYDGMWH43cjs.MINOR_PENTATONIC_MASK; exports.MIXOLYDIAN_B13_MASK = _chunkYDGMWH43cjs.MIXOLYDIAN_B13_MASK; exports.MIXOLYDIAN_MASK = _chunkYDGMWH43cjs.MIXOLYDIAN_MASK; exports.MIYAKO_BUSHI_MASK = _chunkYDGMWH43cjs.MIYAKO_BUSHI_MASK; exports.NAMED_SCALES = _chunkYDGMWH43cjs.NAMED_SCALES; exports.NATURAL_MINOR_MASK = _chunkYDGMWH43cjs.NATURAL_MINOR_MASK; exports.NoSolutionError = _chunkS3QELJUEcjs.NoSolutionError; exports.NoteSafety = _chunkYDGMWH43cjs.NoteSafety; exports.OCTATONIC_HALF_WHOLE_MASK = _chunkYDGMWH43cjs.OCTATONIC_HALF_WHOLE_MASK; exports.OCTATONIC_WHOLE_HALF_MASK = _chunkYDGMWH43cjs.OCTATONIC_WHOLE_HALF_MASK; exports.PHRYGIAN_DOMINANT_MASK = _chunkYDGMWH43cjs.PHRYGIAN_DOMINANT_MASK; exports.PHRYGIAN_MASK = _chunkYDGMWH43cjs.PHRYGIAN_MASK; exports.PROFILE_WEIGHTS = _chunkYDGMWH43cjs.PROFILE_WEIGHTS; exports.PURVI_MASK = _chunkYDGMWH43cjs.PURVI_MASK; exports.RITSU_MASK = _chunkYDGMWH43cjs.RITSU_MASK; exports.RYUKYU_MASK = _chunkYDGMWH43cjs.RYUKYU_MASK; exports.ReasonFlag = _chunkYDGMWH43cjs.ReasonFlag; exports.SATB_RANGES = _chunkU4EQTDGNcjs.SATB_RANGES; exports.SCALE_ALIASES = _chunkYDGMWH43cjs.SCALE_ALIASES; exports.SCALE_SYSTEMS = _chunkYDGMWH43cjs.SCALE_SYSTEMS; exports.TODI_MASK = _chunkYDGMWH43cjs.TODI_MASK; exports.TRANSPOSING_INSTRUMENTS = _chunkU4EQTDGNcjs.TRANSPOSING_INSTRUMENTS; exports.WHOLE_TONE_MASK = _chunkYDGMWH43cjs.WHOLE_TONE_MASK; exports.WORLD_SCALES = _chunkYDGMWH43cjs.WORLD_SCALES; exports.assertKeyVariant = _chunkYDGMWH43cjs.assertKeyVariant; exports.assertModeMask = _chunkYDGMWH43cjs.assertModeMask; exports.availableTensions = _chunkP3CPXAJ5cjs.availableTensions; exports.avoidNotes = _chunkP3CPXAJ5cjs.avoidNotes; exports.checkPartWriting = _chunkU4EQTDGNcjs.checkPartWriting; exports.checkSpecies = _chunkU4EQTDGNcjs.checkSpecies; exports.chordFromDegree = _chunkYDGMWH43cjs.chordFromDegree; exports.chordFromSpan = _chunkYDGMWH43cjs.chordFromSpan; exports.chordFromSpec = _chunkYDGMWH43cjs.chordFromSpec; exports.chordPitchClasses = _chunkYDGMWH43cjs.chordPitchClasses; exports.chordQualities = _chunkYDGMWH43cjs.chordQualities; exports.chordScaleReport = _chunkP3CPXAJ5cjs.chordScaleReport; exports.chordScales = _chunkP3CPXAJ5cjs.chordScales; exports.chordSpecIntervals = _chunkYDGMWH43cjs.chordSpecIntervals; exports.chordSpecOf = _chunkYDGMWH43cjs.chordSpecOf; exports.chordSpecQuality = _chunkYDGMWH43cjs.chordSpecQuality; exports.chordToneRole = _chunkYDGMWH43cjs.chordToneRole; exports.classifySpelledInterval = _chunkYDGMWH43cjs.classifySpelledInterval; exports.createsBattuta = _chunkYDGMWH43cjs.createsBattuta; exports.createsHiddenParallelPerfect = _chunkYDGMWH43cjs.createsHiddenParallelPerfect; exports.createsParallelOctave = _chunkYDGMWH43cjs.createsParallelOctave; exports.createsParallelPerfect = _chunkYDGMWH43cjs.createsParallelPerfect; exports.createsParallelUnison = _chunkYDGMWH43cjs.createsParallelUnison; exports.createsVerticalDissonance = _chunkYDGMWH43cjs.createsVerticalDissonance; exports.createsVoiceCrossing = _chunkYDGMWH43cjs.createsVoiceCrossing; exports.createsVoiceOverlap = _chunkYDGMWH43cjs.createsVoiceOverlap; exports.diatonicPitchClasses = _chunkYDGMWH43cjs.diatonicPitchClasses; exports.diatonicSeventh = _chunkYDGMWH43cjs.diatonicSeventh; exports.diatonicTriad = _chunkYDGMWH43cjs.diatonicTriad; exports.dominantKeyOf = _chunkYDGMWH43cjs.dominantKeyOf; exports.enharmonicKeyOf = _chunkYDGMWH43cjs.enharmonicKeyOf; exports.enumerateSafePitches = _chunkYDGMWH43cjs.enumerateSafePitches; exports.evaluateSafety = _chunkYDGMWH43cjs.evaluateSafety; exports.exceedsSpacing = _chunkYDGMWH43cjs.exceedsSpacing; exports.figuredBassOf = _chunkU4EQTDGNcjs.figuredBassOf; exports.figuredBassRealization = _chunkU4EQTDGNcjs.figuredBassRealization; exports.formatChordSymbol = _chunkYDGMWH43cjs.formatChordSymbol; exports.instrumentTransposition = _chunkU4EQTDGNcjs.instrumentTransposition; exports.intervalAboveRoot = _chunkYDGMWH43cjs.intervalAboveRoot; exports.isAugmentedMelodicInterval = _chunkYDGMWH43cjs.isAugmentedMelodicInterval; exports.isChordMember = _chunkYDGMWH43cjs.isChordMember; exports.isForbiddenMelodicLeap = _chunkYDGMWH43cjs.isForbiddenMelodicLeap; exports.isLeadingToneResolution = _chunkYDGMWH43cjs.isLeadingToneResolution; exports.isScaleTone = _chunkYDGMWH43cjs.isScaleTone; exports.isSignatureKey = _chunkYDGMWH43cjs.isSignatureKey; exports.keyFromFifths = _chunkYDGMWH43cjs.keyFromFifths; exports.keyRelationBetween = _chunkYDGMWH43cjs.keyRelationBetween; exports.keySignatureFifths = _chunkYDGMWH43cjs.keySignatureFifths; exports.majorKey = _chunkYDGMWH43cjs.majorKey; exports.makeChord = _chunkYDGMWH43cjs.makeChord; exports.maskFromOffsets = _chunkYDGMWH43cjs.maskFromOffsets; exports.minorKey = _chunkYDGMWH43cjs.minorKey; exports.namedScaleMask = _chunkYDGMWH43cjs.namedScaleMask; exports.nearestScaleTone = _chunkYDGMWH43cjs.nearestScaleTone; exports.nextVoicing = _chunkU4EQTDGNcjs.nextVoicing; exports.noteNames = _chunkYDGMWH43cjs.noteNames; exports.parallelKeyOf = _chunkYDGMWH43cjs.parallelKeyOf; exports.parseChordSymbol = _chunkYDGMWH43cjs.parseChordSymbol; exports.pitchToScaleDegree = _chunkYDGMWH43cjs.pitchToScaleDegree; exports.profileWeights = _chunkYDGMWH43cjs.profileWeights; exports.realizeFiguredBass = _chunkU4EQTDGNcjs.realizeFiguredBass; exports.relatedKeysOf = _chunkYDGMWH43cjs.relatedKeysOf; exports.relativeKeyOf = _chunkYDGMWH43cjs.relativeKeyOf; exports.requireScaleMask = _chunkYDGMWH43cjs.requireScaleMask; exports.resolveKey = _chunkYDGMWH43cjs.resolveKey; exports.resolveScaleName = _chunkYDGMWH43cjs.resolveScaleName; exports.roleOf = _chunkP3CPXAJ5cjs.roleOf; exports.scaleByName = _chunkYDGMWH43cjs.scaleByName; exports.scaleLadderPitch = _chunkYDGMWH43cjs.scaleLadderPitch; exports.scaleLadderPosition = _chunkYDGMWH43cjs.scaleLadderPosition; exports.scaleMatchesChord = _chunkP3CPXAJ5cjs.scaleMatchesChord; exports.scaleOf = _chunkYDGMWH43cjs.scaleOf; exports.scaleSystemOf = _chunkYDGMWH43cjs.scaleSystemOf; exports.scaleTonesInDegreeOrder = _chunkYDGMWH43cjs.scaleTonesInDegreeOrder; exports.scalesForChanges = _chunkP3CPXAJ5cjs.scalesForChanges; exports.shiftByScaleDegrees = _chunkYDGMWH43cjs.shiftByScaleDegrees; exports.spanFromChord = _chunkYDGMWH43cjs.spanFromChord; exports.spellChord = _chunkYDGMWH43cjs.spellChord; exports.spellChordFromRoot = _chunkYDGMWH43cjs.spellChordFromRoot; exports.spellPitch = _chunkYDGMWH43cjs.spellPitch; exports.spellPitchClass = _chunkYDGMWH43cjs.spellPitchClass; exports.spellPitchClasses = _chunkYDGMWH43cjs.spellPitchClasses; exports.spellScale = _chunkYDGMWH43cjs.spellScale; exports.spellVoicing = _chunkU4EQTDGNcjs.spellVoicing; exports.spelledKeyOf = _chunkYDGMWH43cjs.spelledKeyOf; exports.subdominantKeyOf = _chunkYDGMWH43cjs.subdominantKeyOf; exports.supportsFunctionalHarmony = _chunkYDGMWH43cjs.supportsFunctionalHarmony; exports.toChordData = _chunkYDGMWH43cjs.toChordData; exports.toKeyScale = _chunkYDGMWH43cjs.toKeyScale; exports.toSoundingPitch = _chunkU4EQTDGNcjs.toSoundingPitch; exports.toWrittenPitch = _chunkU4EQTDGNcjs.toWrittenPitch; exports.transposeChord = _chunkYDGMWH43cjs.transposeChord; exports.transposeChordSymbol = _chunkYDGMWH43cjs.transposeChordSymbol; exports.tryParseChordSymbol = _chunkYDGMWH43cjs.tryParseChordSymbol; exports.tryResolveKeyName = _chunkYDGMWH43cjs.tryResolveKeyName; exports.variantOfMask = _chunkYDGMWH43cjs.variantOfMask; exports.voiceChord = _chunkU4EQTDGNcjs.voiceChord; exports.voiceChordStyled = _chunkU4EQTDGNcjs.voiceChordStyled; exports.voiceIndependence = _chunkYDGMWH43cjs.voiceIndependence; exports.voiceLeadingCost = _chunkU4EQTDGNcjs.voiceLeadingCost; exports.voiceProgression = _chunkU4EQTDGNcjs.voiceProgression;
296
296
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/libcantus/libcantus/dist/theory/index.cjs"],"names":[],"mappings":"AAAA,0GAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,+jRAAC","file":"/home/runner/work/libcantus/libcantus/dist/theory/index.cjs"}
1
+ {"version":3,"sources":["/home/runner/work/libcantus/libcantus/ts/dist/theory/index.cjs"],"names":[],"mappings":"AAAA,0GAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,+jRAAC","file":"/home/runner/work/libcantus/libcantus/ts/dist/theory/index.cjs"}
@@ -1,13 +1,13 @@
1
- import { e as KeyScale, j as NoteNameOptions, P as ParseResult, S as SpelledInterval, g as Note, i as NoteLike } from '../index-Cy15oTvh.cjs';
2
- export { B as BudgetExceededError, I as IntervalData, b as IntervalLike, c as IntervalQualityLabel, d as InvalidInputError, L as LibcantusError, N as NoSolutionError, k as NoteNameSystem } from '../index-Cy15oTvh.cjs';
1
+ import { e as KeyScale, j as NoteNameOptions, P as ParseResult, S as SpelledInterval, g as Note, i as NoteLike } from '../index-C9MYbuKS.cjs';
2
+ export { B as BudgetExceededError, I as IntervalData, b as IntervalLike, c as IntervalQualityLabel, d as InvalidInputError, L as LibcantusError, N as NoSolutionError, k as NoteNameSystem } from '../index-C9MYbuKS.cjs';
3
3
  import { C as ConsonanceClass } from '../index-DInQqT8Q.cjs';
4
- import { K as KeyLike, n as ResolvedKey, s as SpelledKeyScale, c as ChordLike, b as Chord, r as SpelledKeyLike } from '../coerce-DRERzdve.cjs';
5
- export { A as Alteration, a as AlteredDegree, C as ChordBase, d as ChordQuality, e as ChordSegment, f as ChordSeventh, g as ChordSpan, h as ChordSpec, i as ChordToneRole, E as EvaluateSafetyOptions, j as KeyRelation, k as KeyVariant, N as NoteSafety, P as PROFILE_WEIGHTS, l as PitchSpelling, m as ProfileWeights, R as ReasonFlag, S as SafetyPartner, o as SafetyProfile, p as SafetyQuery, q as SafetyResult, V as VoiceSnapshot, t as chordFromDegree, u as chordFromSpan, v as chordFromSpec, w as chordPitchClasses, x as chordQualities, y as chordSpecIntervals, z as chordSpecOf, B as chordSpecQuality, D as chordToneRole, F as diatonicSeventh, G as diatonicTriad, H as dominantKeyOf, I as enharmonicKeyOf, J as enumerateSafePitches, L as evaluateSafety, M as intervalAboveRoot, O as isChordMember, Q as keyRelationBetween, T as makeChord, U as parallelKeyOf, W as profileWeights, X as relatedKeysOf, Y as relativeKeyOf, Z as spanFromChord, _ as spelledKeyOf, $ as subdominantKeyOf, a0 as toChordData, a1 as toKeyScale, a2 as transposeChord } from '../coerce-DRERzdve.cjs';
6
- import { r as VoicingOptions } from '../index-B9QLziDe.cjs';
7
- export { A as AvailableTensionsOptions, a as AvoidNoteUse, b as AvoidNotesOptions, C as ChordScaleMatch, c as ChordScaleReportEntry, d as ChordSymbolOptions, K as KeyMode, P as PartWritingOptions, e as PartWritingViolation, f as PartWritingViolationKind, S as SATB_RANGES, g as SCALE_SYSTEMS, h as ScaleChoice, i as ScaleSystem, j as Species, k as SpeciesOptions, l as SpelledVoicing, m as StyledVoicingOptions, T as TRANSPOSING_INSTRUMENTS, n as TransposingInstrument, o as TransposingInstrumentName, V as VoiceIndependenceOptions, p as VoiceIndependenceReport, q as VoiceRange, s as VoicingStyle, t as availableTensions, u as avoidNotes, v as checkPartWriting, w as checkSpecies, x as chordScaleReport, y as chordScales, z as formatChordSymbol, B as instrumentTransposition, D as isSignatureKey, E as keyFromFifths, F as keySignatureFifths, G as parseChordSymbol, H as scaleMatchesChord, I as scaleSystemOf, J as scalesForChanges, L as spellVoicing, M as supportsFunctionalHarmony, N as toSoundingPitch, O as toWrittenPitch, Q as transposeChordSymbol, R as tryParseChordSymbol, U as voiceChord, W as voiceChordStyled, X as voiceIndependence, Y as voiceProgression } from '../index-B9QLziDe.cjs';
8
- export { H as HarmonyRole, L as LockLevel, V as VoicedRole, r as roleOf } from '../index-BL5N2Oyz.cjs';
9
- import { s as ScaleNameInput } from '../masks-pADfTOiD.cjs';
10
- export { A as ALTERED_MASK, B as BLUES_MASK, C as CHROMATIC_MASK, D as DORIAN_MASK, a as DOUBLE_HARMONIC_MASK, H as HARMONIC_MINOR_MASK, L as LOCRIAN_MASK, b as LOCRIAN_NATURAL2_MASK, c as LYDIAN_DOMINANT_MASK, d as LYDIAN_MASK, M as MAJOR_MASK, e as MAJOR_PENTATONIC_MASK, f as MARWA_MASK, g as MELODIC_MINOR_MASK, h as MINOR_PENTATONIC_MASK, i as MIXOLYDIAN_B13_MASK, j as MIXOLYDIAN_MASK, k as MIYAKO_BUSHI_MASK, N as NAMED_SCALES, l as NATURAL_MINOR_MASK, O as OCTATONIC_HALF_WHOLE_MASK, m as OCTATONIC_WHOLE_HALF_MASK, P as PHRYGIAN_DOMINANT_MASK, n as PHRYGIAN_MASK, o as PURVI_MASK, R as RITSU_MASK, p as RYUKYU_MASK, S as SCALE_ALIASES, q as ScaleAliasName, r as ScaleName, T as TODI_MASK, W as WHOLE_TONE_MASK, t as WORLD_SCALES, u as WorldScaleName, v as assertKeyVariant, w as assertModeMask, x as maskFromOffsets, y as namedScaleMask, z as requireScaleMask, E as resolveScaleName, F as variantOfMask } from '../masks-pADfTOiD.cjs';
4
+ import { K as KeyLike, n as ResolvedKey, s as SpelledKeyScale, c as ChordLike, b as Chord, r as SpelledKeyLike } from '../coerce-Ytt2Eiq9.cjs';
5
+ export { A as Alteration, a as AlteredDegree, C as ChordBase, d as ChordQuality, e as ChordSegment, f as ChordSeventh, g as ChordSpan, h as ChordSpec, i as ChordToneRole, E as EvaluateSafetyOptions, j as KeyRelation, k as KeyVariant, N as NoteSafety, P as PROFILE_WEIGHTS, l as PitchSpelling, m as ProfileWeights, R as ReasonFlag, S as SafetyPartner, o as SafetyProfile, p as SafetyQuery, q as SafetyResult, V as VoiceSnapshot, t as chordFromDegree, u as chordFromSpan, v as chordFromSpec, w as chordPitchClasses, x as chordQualities, y as chordSpecIntervals, z as chordSpecOf, B as chordSpecQuality, D as chordToneRole, F as diatonicSeventh, G as diatonicTriad, H as dominantKeyOf, I as enharmonicKeyOf, J as enumerateSafePitches, L as evaluateSafety, M as intervalAboveRoot, O as isChordMember, Q as keyRelationBetween, T as makeChord, U as parallelKeyOf, W as profileWeights, X as relatedKeysOf, Y as relativeKeyOf, Z as spanFromChord, _ as spelledKeyOf, $ as subdominantKeyOf, a0 as toChordData, a1 as toKeyScale, a2 as transposeChord } from '../coerce-Ytt2Eiq9.cjs';
6
+ import { r as VoicingOptions } from '../index-BV6APVa6.cjs';
7
+ export { A as AvailableTensionsOptions, a as AvoidNoteUse, b as AvoidNotesOptions, C as ChordScaleMatch, c as ChordScaleReportEntry, d as ChordSymbolOptions, K as KeyMode, P as PartWritingOptions, e as PartWritingViolation, f as PartWritingViolationKind, S as SATB_RANGES, g as SCALE_SYSTEMS, h as ScaleChoice, i as ScaleSystem, j as Species, k as SpeciesOptions, l as SpelledVoicing, m as StyledVoicingOptions, T as TRANSPOSING_INSTRUMENTS, n as TransposingInstrument, o as TransposingInstrumentName, V as VoiceIndependenceOptions, p as VoiceIndependenceReport, q as VoiceRange, s as VoicingStyle, t as availableTensions, u as avoidNotes, v as checkPartWriting, w as checkSpecies, x as chordScaleReport, y as chordScales, z as formatChordSymbol, B as instrumentTransposition, D as isSignatureKey, E as keyFromFifths, F as keySignatureFifths, G as parseChordSymbol, H as scaleMatchesChord, I as scaleSystemOf, J as scalesForChanges, L as spellVoicing, M as supportsFunctionalHarmony, N as toSoundingPitch, O as toWrittenPitch, Q as transposeChordSymbol, R as tryParseChordSymbol, U as voiceChord, W as voiceChordStyled, X as voiceIndependence, Y as voiceProgression } from '../index-BV6APVa6.cjs';
8
+ export { H as HarmonyRole, L as LockLevel, V as VoicedRole, r as roleOf } from '../index-BkT21EMv.cjs';
9
+ import { s as ScaleNameInput } from '../masks-BnzXnBj0.cjs';
10
+ export { A as ALTERED_MASK, B as BLUES_MASK, C as CHROMATIC_MASK, D as DORIAN_MASK, a as DOUBLE_HARMONIC_MASK, H as HARMONIC_MINOR_MASK, L as LOCRIAN_MASK, b as LOCRIAN_NATURAL2_MASK, c as LYDIAN_DOMINANT_MASK, d as LYDIAN_MASK, M as MAJOR_MASK, e as MAJOR_PENTATONIC_MASK, f as MARWA_MASK, g as MELODIC_MINOR_MASK, h as MINOR_PENTATONIC_MASK, i as MIXOLYDIAN_B13_MASK, j as MIXOLYDIAN_MASK, k as MIYAKO_BUSHI_MASK, N as NAMED_SCALES, l as NATURAL_MINOR_MASK, O as OCTATONIC_HALF_WHOLE_MASK, m as OCTATONIC_WHOLE_HALF_MASK, P as PHRYGIAN_DOMINANT_MASK, n as PHRYGIAN_MASK, o as PURVI_MASK, R as RITSU_MASK, p as RYUKYU_MASK, S as SCALE_ALIASES, q as ScaleAliasName, r as ScaleName, T as TODI_MASK, W as WHOLE_TONE_MASK, t as WORLD_SCALES, u as WorldScaleName, v as assertKeyVariant, w as assertModeMask, x as maskFromOffsets, y as namedScaleMask, z as requireScaleMask, E as resolveScaleName, F as variantOfMask } from '../masks-BnzXnBj0.cjs';
11
11
 
12
12
  /**
13
13
  * Test whether a pitch belongs to the scale.
@@ -744,10 +744,13 @@ declare function realizeFiguredBass(bass: NoteLike, figures: string, key: KeyLik
744
744
  * What this returns is read back before it is returned, so the two directions
745
745
  * cannot disagree: a chord the digits would name only approximately has no
746
746
  * figures rather than figures that fail to realize. What that excludes is a
747
- * stack, not a family of chords — the Italian and German sixths stack in thirds
748
- * over no root of their own and have no figures, while the French sixth stacks
749
- * from its lowered supertonic and is written `#643`, which realizes back to the
750
- * chord it was written from.
747
+ * stack, not a family of chords — the Italian and German sixths are
748
+ * conventionally figured `#6` and `#6/5/3`, but their tones do not stack in
749
+ * thirds into any chord quality, so this reads no figures for them (and
750
+ * {@link realizeFiguredBass} raises {@link NoSolutionError} for those figures).
751
+ * That is a limit of the quality vocabulary, not of the notation. The French
752
+ * sixth stacks from its lowered supertonic and is written `#643`, which
753
+ * realizes back to the chord it was written from.
751
754
  *
752
755
  * @param chord The chord to figure, as a chord symbol, chord data, or a
753
756
  * `Chord`; its `bassPc`, when present, is the bass the intervals are measured
@@ -985,4 +988,5 @@ declare function spellPitch(pitch: number, tonic: NoteLike, key: KeyLike, contex
985
988
  */
986
989
  declare function noteNames(notes: readonly NoteLike[]): string[];
987
990
 
988
- export { Chord as ChordData, ChordLike, ConsonanceClass, type FiguredBassRealization, type FiguredBassSuspension, type HiddenParallelReading, KeyLike, KeyScale, Note as NoteData, NoteLike, NoteNameOptions, ParseResult, ResolvedKey, type ScaleLadderPosition, ScaleNameInput, SpelledInterval, SpelledKeyLike, SpelledKeyScale, type SpellingContext, VoicingOptions, classifySpelledInterval, createsBattuta, createsHiddenParallelPerfect, createsParallelOctave, createsParallelPerfect, createsParallelUnison, createsVerticalDissonance, createsVoiceCrossing, createsVoiceOverlap, diatonicPitchClasses, exceedsSpacing, figuredBassOf, figuredBassRealization, isAugmentedMelodicInterval, isForbiddenMelodicLeap, isLeadingToneResolution, isScaleTone, majorKey, minorKey, nearestScaleTone, nextVoicing, noteNames, pitchToScaleDegree, realizeFiguredBass, resolveKey, scaleByName, scaleLadderPitch, scaleLadderPosition, scaleOf, scaleTonesInDegreeOrder, shiftByScaleDegrees, spellChord, spellChordFromRoot, spellPitch, spellPitchClass, spellPitchClasses, spellScale, tryResolveKeyName, voiceLeadingCost };
991
+ export { Chord as ChordData, ChordLike, ConsonanceClass, KeyLike, KeyScale, Note as NoteData, NoteLike, NoteNameOptions, ParseResult, ResolvedKey, ScaleNameInput, SpelledInterval, SpelledKeyLike, SpelledKeyScale, VoicingOptions, classifySpelledInterval, createsBattuta, createsHiddenParallelPerfect, createsParallelOctave, createsParallelPerfect, createsParallelUnison, createsVerticalDissonance, createsVoiceCrossing, createsVoiceOverlap, diatonicPitchClasses, exceedsSpacing, figuredBassOf, figuredBassRealization, isAugmentedMelodicInterval, isForbiddenMelodicLeap, isLeadingToneResolution, isScaleTone, majorKey, minorKey, nearestScaleTone, nextVoicing, noteNames, pitchToScaleDegree, realizeFiguredBass, resolveKey, scaleByName, scaleLadderPitch, scaleLadderPosition, scaleOf, scaleTonesInDegreeOrder, shiftByScaleDegrees, spellChord, spellChordFromRoot, spellPitch, spellPitchClass, spellPitchClasses, spellScale, tryResolveKeyName, voiceLeadingCost };
992
+ export type { FiguredBassRealization, FiguredBassSuspension, HiddenParallelReading, ScaleLadderPosition, SpellingContext };
@@ -1,13 +1,13 @@
1
- import { e as KeyScale, j as NoteNameOptions, P as ParseResult, S as SpelledInterval, g as Note, i as NoteLike } from '../index-Cy15oTvh.js';
2
- export { B as BudgetExceededError, I as IntervalData, b as IntervalLike, c as IntervalQualityLabel, d as InvalidInputError, L as LibcantusError, N as NoSolutionError, k as NoteNameSystem } from '../index-Cy15oTvh.js';
1
+ import { e as KeyScale, j as NoteNameOptions, P as ParseResult, S as SpelledInterval, g as Note, i as NoteLike } from '../index-C9MYbuKS.js';
2
+ export { B as BudgetExceededError, I as IntervalData, b as IntervalLike, c as IntervalQualityLabel, d as InvalidInputError, L as LibcantusError, N as NoSolutionError, k as NoteNameSystem } from '../index-C9MYbuKS.js';
3
3
  import { C as ConsonanceClass } from '../index-DInQqT8Q.js';
4
- import { K as KeyLike, n as ResolvedKey, s as SpelledKeyScale, c as ChordLike, b as Chord, r as SpelledKeyLike } from '../coerce-DP0vYu-x.js';
5
- export { A as Alteration, a as AlteredDegree, C as ChordBase, d as ChordQuality, e as ChordSegment, f as ChordSeventh, g as ChordSpan, h as ChordSpec, i as ChordToneRole, E as EvaluateSafetyOptions, j as KeyRelation, k as KeyVariant, N as NoteSafety, P as PROFILE_WEIGHTS, l as PitchSpelling, m as ProfileWeights, R as ReasonFlag, S as SafetyPartner, o as SafetyProfile, p as SafetyQuery, q as SafetyResult, V as VoiceSnapshot, t as chordFromDegree, u as chordFromSpan, v as chordFromSpec, w as chordPitchClasses, x as chordQualities, y as chordSpecIntervals, z as chordSpecOf, B as chordSpecQuality, D as chordToneRole, F as diatonicSeventh, G as diatonicTriad, H as dominantKeyOf, I as enharmonicKeyOf, J as enumerateSafePitches, L as evaluateSafety, M as intervalAboveRoot, O as isChordMember, Q as keyRelationBetween, T as makeChord, U as parallelKeyOf, W as profileWeights, X as relatedKeysOf, Y as relativeKeyOf, Z as spanFromChord, _ as spelledKeyOf, $ as subdominantKeyOf, a0 as toChordData, a1 as toKeyScale, a2 as transposeChord } from '../coerce-DP0vYu-x.js';
6
- import { r as VoicingOptions } from '../index-BHIUyjhZ.js';
7
- export { A as AvailableTensionsOptions, a as AvoidNoteUse, b as AvoidNotesOptions, C as ChordScaleMatch, c as ChordScaleReportEntry, d as ChordSymbolOptions, K as KeyMode, P as PartWritingOptions, e as PartWritingViolation, f as PartWritingViolationKind, S as SATB_RANGES, g as SCALE_SYSTEMS, h as ScaleChoice, i as ScaleSystem, j as Species, k as SpeciesOptions, l as SpelledVoicing, m as StyledVoicingOptions, T as TRANSPOSING_INSTRUMENTS, n as TransposingInstrument, o as TransposingInstrumentName, V as VoiceIndependenceOptions, p as VoiceIndependenceReport, q as VoiceRange, s as VoicingStyle, t as availableTensions, u as avoidNotes, v as checkPartWriting, w as checkSpecies, x as chordScaleReport, y as chordScales, z as formatChordSymbol, B as instrumentTransposition, D as isSignatureKey, E as keyFromFifths, F as keySignatureFifths, G as parseChordSymbol, H as scaleMatchesChord, I as scaleSystemOf, J as scalesForChanges, L as spellVoicing, M as supportsFunctionalHarmony, N as toSoundingPitch, O as toWrittenPitch, Q as transposeChordSymbol, R as tryParseChordSymbol, U as voiceChord, W as voiceChordStyled, X as voiceIndependence, Y as voiceProgression } from '../index-BHIUyjhZ.js';
8
- export { H as HarmonyRole, L as LockLevel, V as VoicedRole, r as roleOf } from '../index-Dw2DP7vm.js';
9
- import { s as ScaleNameInput } from '../masks-Cc7-MzzY.js';
10
- export { A as ALTERED_MASK, B as BLUES_MASK, C as CHROMATIC_MASK, D as DORIAN_MASK, a as DOUBLE_HARMONIC_MASK, H as HARMONIC_MINOR_MASK, L as LOCRIAN_MASK, b as LOCRIAN_NATURAL2_MASK, c as LYDIAN_DOMINANT_MASK, d as LYDIAN_MASK, M as MAJOR_MASK, e as MAJOR_PENTATONIC_MASK, f as MARWA_MASK, g as MELODIC_MINOR_MASK, h as MINOR_PENTATONIC_MASK, i as MIXOLYDIAN_B13_MASK, j as MIXOLYDIAN_MASK, k as MIYAKO_BUSHI_MASK, N as NAMED_SCALES, l as NATURAL_MINOR_MASK, O as OCTATONIC_HALF_WHOLE_MASK, m as OCTATONIC_WHOLE_HALF_MASK, P as PHRYGIAN_DOMINANT_MASK, n as PHRYGIAN_MASK, o as PURVI_MASK, R as RITSU_MASK, p as RYUKYU_MASK, S as SCALE_ALIASES, q as ScaleAliasName, r as ScaleName, T as TODI_MASK, W as WHOLE_TONE_MASK, t as WORLD_SCALES, u as WorldScaleName, v as assertKeyVariant, w as assertModeMask, x as maskFromOffsets, y as namedScaleMask, z as requireScaleMask, E as resolveScaleName, F as variantOfMask } from '../masks-Cc7-MzzY.js';
4
+ import { K as KeyLike, n as ResolvedKey, s as SpelledKeyScale, c as ChordLike, b as Chord, r as SpelledKeyLike } from '../coerce-CUhHc3Tu.js';
5
+ export { A as Alteration, a as AlteredDegree, C as ChordBase, d as ChordQuality, e as ChordSegment, f as ChordSeventh, g as ChordSpan, h as ChordSpec, i as ChordToneRole, E as EvaluateSafetyOptions, j as KeyRelation, k as KeyVariant, N as NoteSafety, P as PROFILE_WEIGHTS, l as PitchSpelling, m as ProfileWeights, R as ReasonFlag, S as SafetyPartner, o as SafetyProfile, p as SafetyQuery, q as SafetyResult, V as VoiceSnapshot, t as chordFromDegree, u as chordFromSpan, v as chordFromSpec, w as chordPitchClasses, x as chordQualities, y as chordSpecIntervals, z as chordSpecOf, B as chordSpecQuality, D as chordToneRole, F as diatonicSeventh, G as diatonicTriad, H as dominantKeyOf, I as enharmonicKeyOf, J as enumerateSafePitches, L as evaluateSafety, M as intervalAboveRoot, O as isChordMember, Q as keyRelationBetween, T as makeChord, U as parallelKeyOf, W as profileWeights, X as relatedKeysOf, Y as relativeKeyOf, Z as spanFromChord, _ as spelledKeyOf, $ as subdominantKeyOf, a0 as toChordData, a1 as toKeyScale, a2 as transposeChord } from '../coerce-CUhHc3Tu.js';
6
+ import { r as VoicingOptions } from '../index-BLuDesVG.js';
7
+ export { A as AvailableTensionsOptions, a as AvoidNoteUse, b as AvoidNotesOptions, C as ChordScaleMatch, c as ChordScaleReportEntry, d as ChordSymbolOptions, K as KeyMode, P as PartWritingOptions, e as PartWritingViolation, f as PartWritingViolationKind, S as SATB_RANGES, g as SCALE_SYSTEMS, h as ScaleChoice, i as ScaleSystem, j as Species, k as SpeciesOptions, l as SpelledVoicing, m as StyledVoicingOptions, T as TRANSPOSING_INSTRUMENTS, n as TransposingInstrument, o as TransposingInstrumentName, V as VoiceIndependenceOptions, p as VoiceIndependenceReport, q as VoiceRange, s as VoicingStyle, t as availableTensions, u as avoidNotes, v as checkPartWriting, w as checkSpecies, x as chordScaleReport, y as chordScales, z as formatChordSymbol, B as instrumentTransposition, D as isSignatureKey, E as keyFromFifths, F as keySignatureFifths, G as parseChordSymbol, H as scaleMatchesChord, I as scaleSystemOf, J as scalesForChanges, L as spellVoicing, M as supportsFunctionalHarmony, N as toSoundingPitch, O as toWrittenPitch, Q as transposeChordSymbol, R as tryParseChordSymbol, U as voiceChord, W as voiceChordStyled, X as voiceIndependence, Y as voiceProgression } from '../index-BLuDesVG.js';
8
+ export { H as HarmonyRole, L as LockLevel, V as VoicedRole, r as roleOf } from '../index-C7KCaTRz.js';
9
+ import { s as ScaleNameInput } from '../masks-tycmkrgs.js';
10
+ export { A as ALTERED_MASK, B as BLUES_MASK, C as CHROMATIC_MASK, D as DORIAN_MASK, a as DOUBLE_HARMONIC_MASK, H as HARMONIC_MINOR_MASK, L as LOCRIAN_MASK, b as LOCRIAN_NATURAL2_MASK, c as LYDIAN_DOMINANT_MASK, d as LYDIAN_MASK, M as MAJOR_MASK, e as MAJOR_PENTATONIC_MASK, f as MARWA_MASK, g as MELODIC_MINOR_MASK, h as MINOR_PENTATONIC_MASK, i as MIXOLYDIAN_B13_MASK, j as MIXOLYDIAN_MASK, k as MIYAKO_BUSHI_MASK, N as NAMED_SCALES, l as NATURAL_MINOR_MASK, O as OCTATONIC_HALF_WHOLE_MASK, m as OCTATONIC_WHOLE_HALF_MASK, P as PHRYGIAN_DOMINANT_MASK, n as PHRYGIAN_MASK, o as PURVI_MASK, R as RITSU_MASK, p as RYUKYU_MASK, S as SCALE_ALIASES, q as ScaleAliasName, r as ScaleName, T as TODI_MASK, W as WHOLE_TONE_MASK, t as WORLD_SCALES, u as WorldScaleName, v as assertKeyVariant, w as assertModeMask, x as maskFromOffsets, y as namedScaleMask, z as requireScaleMask, E as resolveScaleName, F as variantOfMask } from '../masks-tycmkrgs.js';
11
11
 
12
12
  /**
13
13
  * Test whether a pitch belongs to the scale.
@@ -744,10 +744,13 @@ declare function realizeFiguredBass(bass: NoteLike, figures: string, key: KeyLik
744
744
  * What this returns is read back before it is returned, so the two directions
745
745
  * cannot disagree: a chord the digits would name only approximately has no
746
746
  * figures rather than figures that fail to realize. What that excludes is a
747
- * stack, not a family of chords — the Italian and German sixths stack in thirds
748
- * over no root of their own and have no figures, while the French sixth stacks
749
- * from its lowered supertonic and is written `#643`, which realizes back to the
750
- * chord it was written from.
747
+ * stack, not a family of chords — the Italian and German sixths are
748
+ * conventionally figured `#6` and `#6/5/3`, but their tones do not stack in
749
+ * thirds into any chord quality, so this reads no figures for them (and
750
+ * {@link realizeFiguredBass} raises {@link NoSolutionError} for those figures).
751
+ * That is a limit of the quality vocabulary, not of the notation. The French
752
+ * sixth stacks from its lowered supertonic and is written `#643`, which
753
+ * realizes back to the chord it was written from.
751
754
  *
752
755
  * @param chord The chord to figure, as a chord symbol, chord data, or a
753
756
  * `Chord`; its `bassPc`, when present, is the bass the intervals are measured
@@ -985,4 +988,5 @@ declare function spellPitch(pitch: number, tonic: NoteLike, key: KeyLike, contex
985
988
  */
986
989
  declare function noteNames(notes: readonly NoteLike[]): string[];
987
990
 
988
- export { Chord as ChordData, ChordLike, ConsonanceClass, type FiguredBassRealization, type FiguredBassSuspension, type HiddenParallelReading, KeyLike, KeyScale, Note as NoteData, NoteLike, NoteNameOptions, ParseResult, ResolvedKey, type ScaleLadderPosition, ScaleNameInput, SpelledInterval, SpelledKeyLike, SpelledKeyScale, type SpellingContext, VoicingOptions, classifySpelledInterval, createsBattuta, createsHiddenParallelPerfect, createsParallelOctave, createsParallelPerfect, createsParallelUnison, createsVerticalDissonance, createsVoiceCrossing, createsVoiceOverlap, diatonicPitchClasses, exceedsSpacing, figuredBassOf, figuredBassRealization, isAugmentedMelodicInterval, isForbiddenMelodicLeap, isLeadingToneResolution, isScaleTone, majorKey, minorKey, nearestScaleTone, nextVoicing, noteNames, pitchToScaleDegree, realizeFiguredBass, resolveKey, scaleByName, scaleLadderPitch, scaleLadderPosition, scaleOf, scaleTonesInDegreeOrder, shiftByScaleDegrees, spellChord, spellChordFromRoot, spellPitch, spellPitchClass, spellPitchClasses, spellScale, tryResolveKeyName, voiceLeadingCost };
991
+ export { Chord as ChordData, ChordLike, ConsonanceClass, KeyLike, KeyScale, Note as NoteData, NoteLike, NoteNameOptions, ParseResult, ResolvedKey, ScaleNameInput, SpelledInterval, SpelledKeyLike, SpelledKeyScale, VoicingOptions, classifySpelledInterval, createsBattuta, createsHiddenParallelPerfect, createsParallelOctave, createsParallelPerfect, createsParallelUnison, createsVerticalDissonance, createsVoiceCrossing, createsVoiceOverlap, diatonicPitchClasses, exceedsSpacing, figuredBassOf, figuredBassRealization, isAugmentedMelodicInterval, isForbiddenMelodicLeap, isLeadingToneResolution, isScaleTone, majorKey, minorKey, nearestScaleTone, nextVoicing, noteNames, pitchToScaleDegree, realizeFiguredBass, resolveKey, scaleByName, scaleLadderPitch, scaleLadderPosition, scaleOf, scaleTonesInDegreeOrder, shiftByScaleDegrees, spellChord, spellChordFromRoot, spellPitch, spellPitchClass, spellPitchClasses, spellScale, tryResolveKeyName, voiceLeadingCost };
992
+ export type { FiguredBassRealization, FiguredBassSuspension, HiddenParallelReading, ScaleLadderPosition, SpellingContext };
@@ -16,7 +16,7 @@ import {
16
16
  voiceChordStyled,
17
17
  voiceLeadingCost,
18
18
  voiceProgression
19
- } from "../chunk-M5RYMAFI.js";
19
+ } from "../chunk-ZLNSH4UL.js";
20
20
  import {
21
21
  availableTensions,
22
22
  avoidNotes,
@@ -25,7 +25,7 @@ import {
25
25
  roleOf,
26
26
  scaleMatchesChord,
27
27
  scalesForChanges
28
- } from "../chunk-NB25P3EH.js";
28
+ } from "../chunk-2G5MCGYU.js";
29
29
  import {
30
30
  ALTERED_MASK,
31
31
  BLUES_MASK,
@@ -142,13 +142,13 @@ import {
142
142
  tryResolveKeyName,
143
143
  variantOfMask,
144
144
  voiceIndependence
145
- } from "../chunk-RFIBF2RR.js";
145
+ } from "../chunk-H7FVMBUC.js";
146
146
  import {
147
147
  BudgetExceededError,
148
148
  ConsonanceClass,
149
149
  InvalidInputError,
150
150
  NoSolutionError
151
- } from "../chunk-AGOVW7U6.js";
151
+ } from "../chunk-YYVXRV3V.js";
152
152
  export {
153
153
  ALTERED_MASK,
154
154
  BLUES_MASK,