tonus 0.9.1 → 0.10.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 (44) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/README.md +1 -1
  3. package/dist/census.d.ts +4 -0
  4. package/dist/census.js +23 -0
  5. package/dist/corpus.d.ts +4 -0
  6. package/dist/corpus.js +17 -0
  7. package/dist/data/am.js +10220 -3006
  8. package/dist/data/attestation.js +38640 -4568
  9. package/dist/data/attestation.json +38639 -4567
  10. package/dist/data/census.d.ts +2 -2
  11. package/dist/data/census.js +4 -4
  12. package/dist/data/corpus-overlap.js +5 -118
  13. package/dist/data/gr.d.ts +29 -2
  14. package/dist/data/gr.js +2436 -6411
  15. package/dist/data/kyriale.d.ts +1 -1
  16. package/dist/data/kyriale.js +38 -38
  17. package/dist/data/la.js +12369 -1103
  18. package/dist/data/lh.js +3139 -158
  19. package/dist/data/lu.js +17332 -2379
  20. package/dist/data/nocturnale-romanum.js +10656 -1899
  21. package/dist/data/psm.js +463 -33
  22. package/dist/data/types.d.ts +1 -0
  23. package/dist/engines/chant/chant.js +60 -13
  24. package/dist/engines/chant/data/masses.js +18 -18
  25. package/dist/engines/chant/ordinary.js +12 -5
  26. package/dist/engines/chant/psalm.js +4 -0
  27. package/dist/engines/chant/types.d.ts +32 -4
  28. package/dist/engines/chant/types.js +47 -4
  29. package/dist/engines/score/infer.js +1 -1
  30. package/dist/index.d.ts +5 -9
  31. package/dist/inscriptio.d.ts +5 -0
  32. package/dist/inscriptio.js +23 -0
  33. package/dist/score.d.ts +6 -0
  34. package/dist/score.js +20 -0
  35. package/docs/api/census.md +12 -3
  36. package/docs/api/chant.md +83 -63
  37. package/docs/api/index.md +35 -1
  38. package/package.json +19 -2
  39. package/dist/data/ams.d.ts +0 -5
  40. package/dist/data/ams.js +0 -122
  41. package/dist/data/cot.d.ts +0 -5
  42. package/dist/data/cot.js +0 -172
  43. package/dist/data/cse.d.ts +0 -5
  44. package/dist/data/cse.js +0 -122
package/docs/api/chant.md CHANGED
@@ -9,9 +9,9 @@ carries page-level provenance back to its book.
9
9
 
10
10
  - [Chant](#chant)
11
11
  - [The corpora](#the-corpora)
12
- - [The cut](#the-cut)
12
+ - [The shelf is the books](#the-shelf-is-the-books)
13
13
  - [The books — `corpus`](#the-books--corpus)
14
- - [The ledger of the cut — `full`](#the-ledger-of-the-cut--full)
14
+ - [What the book holds — `full`](#what-the-book-holds--full)
15
15
  - [Retrieval — `cantus`](#retrieval--cantus)
16
16
  - [Reaching the ordinary — `ordinary`](#reaching-the-ordinary--ordinary)
17
17
  - [On chant ids](#on-chant-ids)
@@ -30,33 +30,29 @@ carries page-level provenance back to its book.
30
30
 
31
31
  ## The corpora
32
32
 
33
- Nine Solesmes books, extracted from
33
+ Six Solesmes books, extracted from
34
34
  [GregoBase](https://gregobase.selapa.net/), joined by the Divinum Officium
35
35
  propers, office, and psalter, plus the Nocturnale Romanum for the night office:
36
36
 
37
- | Source | Book | Edition | Chants |
38
- | ------ | --------------------------------- | ------------------ | ------ |
39
- | `gr` | Graduale Romanum | Solesmes, 1961 | 780 |
40
- | `lu` | The Liber Usualis | Solesmes, 1961 | 707 |
41
- | `la` | Liber antiphonarius | Solesmes, 1960 | 160 |
42
- | `lh` | Liber Hymnarius | Solesmes, 1983 | 25 |
43
- | `am` | Antiphonale Monasticum | Solesmes, 1934 | 576 |
44
- | `ams` | Antiphonale Monasticum Solesmense | Solesmes, 1935 | 11 |
45
- | `psm` | Psalterium Monasticum | Solesmes, 1981 | 11 |
46
- | `cse` | Cantus selecti | Solesmes, 1957 | 11 |
47
- | `cot` | Chants of the Church | Solesmes, 1956 | 16 |
48
- | `nr` | Nocturnale Romanum | Sandhofe, 2002 | 470 |
49
-
50
- **2,187 chants in all**, plus the Mass ordinary (120 settings, reached by
51
- [`ordinary`](#reaching-the-ordinary--ordinary) rather than by book). The books
52
- hold 10,156 between them; tonus ships only what the calendar calls for on some
53
- day of the year, so a chant with no day to be sung on is not here. See
54
- [The cut](#the-cut) below.
55
-
56
- The ten books list 2,767 rows for those 2,187 chants: a melody printed in two
57
- books is stored once and listed under both.
58
-
59
- `am`, `ams`, and `psm` are the monastic (Benedictine) books; the rest are
37
+ | Source | Book | Edition | Chants |
38
+ | ------ | ----------------------- | -------------- | ------ |
39
+ | `gr` | Graduale Romanum | Solesmes, 1961 | 1,373 |
40
+ | `lu` | The Liber Usualis | Solesmes, 1961 | 2,446 |
41
+ | `la` | Liber antiphonarius | Solesmes, 1960 | 2,506 |
42
+ | `lh` | Liber Hymnarius | Solesmes, 1983 | 361 |
43
+ | `am` | Antiphonale Monasticum | Solesmes, 1934 | 1,448 |
44
+ | `psm` | Psalterium Monasticum | Solesmes, 1981 | 60 |
45
+ | `nr` | Nocturnale Romanum | Sandhofe, 2002 | 1,564 |
46
+
47
+ **7,840 chants in all**, the Mass ordinary among them (120 settings, reached by
48
+ [`ordinary`](#reaching-the-ordinary--ordinary) rather than by book). That is the
49
+ books themselves: tonus carries what they print, whether or not the calendar
50
+ reaches it.
51
+
52
+ The seven books list 9,758 rows for those 7,840 chants: a melody printed in two
53
+ books is stored once and listed under each, with each book's own page citation.
54
+
55
+ `am` and `psm` are the monastic (Benedictine) books; the rest are
60
56
  Roman. Every book here bears the rhythmic markings the score engine reads; that
61
57
  is the admission rule. `nr` is the night-office repertoire (responsories,
62
58
  antiphons) from the
@@ -64,15 +60,26 @@ antiphons) from the
64
60
  community restitution, the one non-Solesmes source, admitted because it carries
65
61
  those marks too.
66
62
 
67
- ### The cut
63
+ ### The shelf is the books
68
64
 
69
- The corpus is **assignment-driven**: a chant ships when some day of the
70
- liturgical year calls for it. The calendar is walked year by year until it stops
71
- finding new assignments (39 years, in the event), and what it never reaches is
72
- not shipped: 10,156 book chants become 2,187.
65
+ The corpus was **assignment-driven** until 2026-08-31: a chant shipped only when
66
+ some day of the liturgical year called for it, and 10,156 book chants became
67
+ 2,187. That gate is gone. The shelf now carries the books whole.
73
68
 
74
- Everything here answers "what was sung on this day". A query for a chant the
75
- calendar never calls for returns nothing.
69
+ The reason is that the gate answered four questions with one silence. A chant
70
+ absent from the shelf might be genuinely superseded repertoire, or printed in an
71
+ edition the calendar does not address, or proper to a sanctorale the calendar
72
+ does not enumerate, or simply missed by the matcher that places texts on days —
73
+ and nothing downstream could tell those apart, because the chant was not there
74
+ to ask about. Worse, the population every `census` measurement was taken against
75
+ was itself the product of that gate, so "how typical is this chant" quietly meant
76
+ "how typical among the chants one rite happened to call for".
77
+
78
+ Whether a day calls for a chant is now a question for the day verbs — `festum`,
79
+ `proprium`, `officium` — which answer it directly and say what their tables
80
+ hold. It is not a filter on the shelf. `cantus` and `corpus` ask what the books
81
+ print; that a chant has no day to be sung on is a fact about the calendar, not a
82
+ reason it should be unfindable.
76
83
 
77
84
  ## The books — `corpus`
78
85
 
@@ -86,12 +93,12 @@ book's ledger:
86
93
 
87
94
  ```js
88
95
  tonus.corpus();
89
- // { count: 2187, // chants tonus holds, each counted once
90
- // listings: 2767, // rows on the shelf — a chant in two books appears twice
91
- // total: 10156, // what the books hold, before the cut
92
- // genera: [ { office: "an", genus: "Antiphona", count: 693 }, … ],
93
- // modes: [ { mode: "1", modus: "Modus I", count: 392 }, … ],
94
- // books: [ …10 Corpus entries, in registry order ] }
96
+ // { count: 7840, // chants tonus holds, each counted once
97
+ // listings: 9758, // rows on the shelf — a chant in two books appears twice
98
+ // total: 9811, // what the books hold, before dedup
99
+ // genera: [ { office: "an", genus: "Antiphona", count: 3959 }, … ],
100
+ // modes: [ { mode: "1", modus: "Modus I", count: 1520 }, … ],
101
+ // books: [ …7 Corpus entries, in registry order ] }
95
102
  ```
96
103
 
97
104
  **`count` is the number of chants**, the one to quote. `listings` is how long
@@ -128,35 +135,37 @@ interface Corpus {
128
135
  }
129
136
  ```
130
137
 
131
- ### The ledger of the cut — `full`
138
+ ### What the book holds — `full`
132
139
 
133
- Every `Corpus` carries `full`: what the book HELD, before the keep set ran, in
140
+ Every `Corpus` carries `full`: what the book holds in GregoBase's catalogue, in
134
141
  the same genera/modes shape as the shipped counts.
135
142
 
136
143
  ```js
137
144
  const am = tonus.corpus("am");
138
- am.count; // 576 — antiphons and the rest tonus kept
139
- am.full.total; // 1456 — what the Antiphonale Monasticum holds
140
- am.genera[0]; // { office: "an", genus: "Antiphona", count: 458 }
145
+ am.count; // 1448 — chants tonus lists under the Antiphonale
146
+ am.full.total; // 1456 — what GregoBase catalogues for the book
147
+ am.genera[0]; // { office: "an", genus: "Antiphona", count: 1045 }
141
148
  am.full.genera[0]; // { office: "an", genus: "Antiphona", count: 1049 }
142
149
  ```
143
150
 
144
- Reading the two tallies side by side names what was left out: 1,049 antiphons
145
- in the book, 458 sung.
151
+ The two now sit close, because the shelf carries the book rather than a
152
+ selection from it. What remains between them is what the extractor drops for
153
+ reasons of its own — a chant GregoBase marks as a duplicate of another, or one
154
+ whose GABC will not parse — not a liturgical judgement.
146
155
 
147
- Only the extractor can measure this. By the time tonus loads, the keep set has
148
- already run, so the pre-cut tally is read from an artifact rather than derived.
149
- Every shelved book reports one, including the Nocturnale, whose tally comes
150
- from its own extract rather than from GregoBase.
156
+ Only the extractor can measure `full`. By the time tonus loads, its record is
157
+ one per chant, so the catalogue tally is read from an artifact rather than
158
+ derived. Every shelved book reports one, including the Nocturnale, whose tally
159
+ comes from its own extract rather than from GregoBase.
151
160
 
152
161
  The metadata is drawn from GregoBase's own catalogue. The `genera` list is the
153
162
  office distribution (descending by count); `modes` counts modes I–VIII, with a
154
163
  final `mode: null` bucket for chants outside the eight modes (psalm tones and the
155
164
  like) so the counts reconcile with `count`.
156
165
 
157
- **Overlap.** tonus keeps one copy of each chant (the Liber Usualis is the primary
158
- source; the Antiphonarius and Hymnarius fill gaps), so a book's stored `count`
159
- undercounts what it holds. `total` is the full pre-dedup count, `unique` the
166
+ **Overlap.** tonus stores one copy of each chant — the Liber Usualis owns the
167
+ record where several books print it — but LISTS it under every book that does,
168
+ so `count` is what a book prints rather than what it happens to store. `total` is the full pre-dedup count, `unique` the
160
169
  chants a book alone has, and `shared` how many it holds in common with each other
161
170
  book (by GregoBase chant id). These reveal, for instance, that the Liber Usualis
162
171
  is largely the Graduale and the Antiphonarius bound together (it shares hundreds
@@ -234,11 +243,20 @@ name:
234
243
 
235
244
  | `office` | `genus` | `office` | `genus` | `office` | `genus` |
236
245
  | -------- | --------- | -------- | ------------ | -------- | ------------------ |
237
- | `an` | Antiphona | `hy` | Hymnus | `rb` | Responsorium Breve |
238
- | `al` | Alleluia | `in` | Introitus | `se` | Sequentia |
239
- | `ca` | Canticum | `of` | Offertorium | `tr` | Tractus |
240
- | `co` | Communio | `ps` | Psalmus | `tp` | Tonus Peregrinus |
241
- | `gr` | Graduale | `re` | Responsorium | `or` | Ordinarium |
246
+ | `an` | Antiphona | `hy` | Hymnus | `se` | Sequentia |
247
+ | `al` | Alleluia | `in` | Introitus | `tr` | Tractus |
248
+ | `ca` | Canticum | `of` | Offertorium | `tp` | Tropa |
249
+ | `co` | Communio | `ps` | Psalmus | `or` | Toni Communes |
250
+ | `gr` | Graduale | `re` | Responsorium | `ky` | Kyriale |
251
+ | `im` | Improperia| `rb` | Resp. Breve | `va` | Varia |
252
+ | `pa` | Prosa | `su` | Supplicatio | | |
253
+
254
+ The labels are GregoBase's own vocabulary (`$txt['usage']`), not tonus's
255
+ gloss. Three were corrected in 0.10.0: `tp` reads **Tropa** (it had said
256
+ "Tonus Peregrinus"), `or` reads **Toni Communes** (it had said "Ordinarium"),
257
+ and `pa` reads **Prosa**. `ky` is the Mass ordinary's roll-up genus — the
258
+ part itself rides `ordinary` (`ke`, `gl`, `cr`, …), and `va` is the
259
+ catch-all for a chant whose office-part tonus does not recognise.
242
260
 
243
261
  ```ts
244
262
  interface Chant {
@@ -249,7 +267,9 @@ interface Chant {
249
267
  genus: string; // Latin genre name, "Antiphona", "Introitus" …
250
268
  mode: string | null; // raw from source: "1"–"8", differentia forms ("2d", "8g"), "p"/"d"/"e" …
251
269
  modus: string | null; // Latin mode name, "Modus I"–"Modus VIII"
252
- pages: { page: string; sequence: number; extent: number }[];
270
+ books: (ChantSource | "user" | "ky")[]; // every book that prints it
271
+ pages: { page: string; sequence: number; extent: number }[]; // the presented book's
272
+
253
273
  source: {
254
274
  book: string;
255
275
  year: number | null;
@@ -282,7 +302,7 @@ interface CantusQuery {
282
302
  The Mass ordinary is addressable but not shelved. `ordinary` is the door:
283
303
 
284
304
  ```js
285
- tonus.cantus({ ordinary: "ky" }); // all 31 Kyries
305
+ tonus.cantus({ ordinary: "ke" }); // all 31 Kyries
286
306
  tonus.cantus({ ordinary: "gl", mode: 4 }); // mode-4 Glorias
287
307
  tonus.cantus({ ordinary: ["as", "va"] }); // the sprinkle antiphons
288
308
  ```
@@ -302,7 +322,7 @@ is the verb, and it applies the Kyriale's own rubrics. This is flat retrieval.
302
322
  An id's prefix names **the catalogue the identifier came from**, not the book
303
323
  the chant is printed in, and not a claim about who the melody belongs to. A
304
324
  chant carrying `gregobase:1210` is a Solesmes book chant that GregoBase happens
305
- to have catalogued; the corpus is assembled from ten books, and GregoBase is
325
+ to have catalogued; the corpus is assembled from seven books, and GregoBase is
306
326
  one source among several.
307
327
 
308
328
  The prefix is therefore **not a namespace you can query against**. GregoBase
@@ -418,13 +438,13 @@ and selected by season: **Vidi aquam** (`va`) in Paschaltide, **Asperges
418
438
  me** (`as`) otherwise.
419
439
 
420
440
  ```js
421
- tonus.ordinarium({ ordinary: "ky" }); // every Kyrie
441
+ tonus.ordinarium({ ordinary: "ke" }); // every Kyrie
422
442
  tonus.ordinarium({ mass: 9, ordinary: "gl" }); // Gloria of Cum jubilo
423
443
  ```
424
444
 
425
445
  | `ordinary` | `ordinarium` |
426
446
  | ---------- | --------------------------------------------- |
427
- | `ky` | Kyrie eleison |
447
+ | `ke` | Kyrie eleison |
428
448
  | `gl` | Gloria |
429
449
  | `cr` | Credo |
430
450
  | `sa` | Sanctus |
package/docs/api/index.md CHANGED
@@ -12,6 +12,7 @@ import tonus from "tonus";
12
12
 
13
13
  - [The methods](#the-methods) — by engine
14
14
  - [The appendix](#the-appendix) — the canonical constant tables
15
+ - [The entries](#the-entries) — the four subpaths, and what each holds
15
16
  - [Full contents](#full-contents) — every method and section
16
17
  - [Conventions](#conventions) — Latin/English, dates, determinism, error contracts, bibliography
17
18
 
@@ -88,7 +89,7 @@ table of codes or English keeps English.
88
89
  | ----------- | -------------------------------------------------------------------------- |
89
90
  | `HORAE` | the eight canonical hours, Matins first — the order is the content |
90
91
  | `OFFICIA` | office code → the Latin genus (`an` → "Antiphona") |
91
- | `ORDINARIA` | ordinary code → the Latin name (`ky` → "Kyrie eleison") |
92
+ | `ORDINARIA` | ordinary code → the Latin name (`ke` → "Kyrie eleison") |
92
93
  | `MODI` | mode number → the Latin name (`"1"` → "Modus I") |
93
94
  | `SOURCES` | book code → its bibliographic record; the codes `cantus({ source })` takes |
94
95
 
@@ -126,6 +127,39 @@ is for.
126
127
  Use these to pool blocks without reproducing the distance rule. See [the census
127
128
  contract](census.md#distance-is-cosine-per-field-group).
128
129
 
130
+ ## The entries
131
+
132
+ The fourteen methods and every table above are on the root, and stay there. Four
133
+ subpath entries hold what the root index was carrying without being asked to:
134
+ the **anatomy** of a return value, and the types whose values a caller had to
135
+ spell by hand against a query or an option bag.
136
+
137
+ ```js
138
+ import { cantus, corpus } from "tonus/corpus";
139
+ import { inscriptio } from "tonus/inscriptio";
140
+ import type { Note, Phrase } from "tonus/score";
141
+ ```
142
+
143
+ | Entry | Holds |
144
+ | ------------------ | ------------------------------------------------------------------------- |
145
+ | `tonus/corpus` | the shelf and its vocabulary — `cantus`, `corpus`, `SOURCES`, `HORAE` … |
146
+ | `tonus/score` | what a `Score` is made of — `Note`, `Phrase`, `Syllable`, `Metrics` … |
147
+ | `tonus/inscriptio` | the drawing surface — `inscriptio`, `Theme`, `TrackName`, `NoteGeometry` |
148
+ | `tonus/census` | one chant against the corpus — `census`, `CENSUS_BLOCK_FLOATS` |
149
+
150
+ Nothing is hidden by the split. The verbs stay on the namespace — the export law
151
+ puts them there — and the types a root signature names (`Score`, `Chant`,
152
+ `Cadence`, `Metrics`, `Imprint`) stay on the root as well, because the root's own
153
+ signatures name them. What moved off is what only a caller already **holding** a
154
+ `Score` could reach.
155
+
156
+ Each entry also surfaces types that were reachable through a signature but
157
+ nameable nowhere: `ChantSource` and `OfficeCode` (the codes `cantus({ source })`
158
+ and `office` take), `Theme` and `TrackName` (what an `opts` bag accepts), and
159
+ `CENSUS_BLOCK_FLOATS` (the stride a caller decoding a block had to get by
160
+ counting `CENSUS_GROUPS`). That drift — a value you must pass but cannot name —
161
+ is what the entries exist to stop.
162
+
129
163
  ## Full contents
130
164
 
131
165
  Every method and every section, page by page, in dependency order. Pages later in
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tonus",
3
- "version": "0.9.1",
3
+ "version": "0.10.0",
4
4
  "type": "module",
5
5
  "description": "Medieval music analysis: GABC plainchant exports, liturgical calendar, tuning systems, ephemeris, and the harmony of the spheres",
6
6
  "author": "Jeffrey Pierce <jeffrey@jeffreypierce.net>",
@@ -32,6 +32,22 @@
32
32
  ".": {
33
33
  "import": "./dist/index.js",
34
34
  "types": "./dist/index.d.ts"
35
+ },
36
+ "./inscriptio": {
37
+ "import": "./dist/inscriptio.js",
38
+ "types": "./dist/inscriptio.d.ts"
39
+ },
40
+ "./census": {
41
+ "import": "./dist/census.js",
42
+ "types": "./dist/census.d.ts"
43
+ },
44
+ "./corpus": {
45
+ "import": "./dist/corpus.js",
46
+ "types": "./dist/corpus.d.ts"
47
+ },
48
+ "./score": {
49
+ "import": "./dist/score.js",
50
+ "types": "./dist/score.d.ts"
35
51
  }
36
52
  },
37
53
  "main": "./dist/index.js",
@@ -49,7 +65,8 @@
49
65
  "scripts": {
50
66
  "build": "tsc && cp src/data/psalms.json dist/data/psalms.json && cp src/data/smufl-glyphs.json dist/data/smufl-glyphs.json && cp src/data/office-ferial.json dist/data/office-ferial.json && cp src/data/commune-office.json dist/data/commune-office.json && cp src/data/seasonal-respbreve.json dist/data/seasonal-respbreve.json && cp src/data/attestation.json dist/data/attestation.json && node scripts/bake-data.mjs",
51
67
  "clean": "rm -rf dist",
52
- "test": "npm run build && node --test --test-reporter=spec tests/*.test.mjs",
68
+ "gate": "node scripts/gate-boundary.mjs",
69
+ "test": "npm run build && npm run gate && node --test --test-reporter=spec tests/*.test.mjs",
53
70
  "prepublishOnly": "npm run clean && npm run build",
54
71
  "lab": "npm run build && node scripts/render-lab.mjs",
55
72
  "stress": "npm run build && node scripts/render-stress.mjs",
@@ -1,5 +0,0 @@
1
- import type { Chant } from "./types.js";
2
- import type { ChantData } from "./gr.js";
3
- export declare const AMS_SOURCE: Chant["source"];
4
- export declare const AMS_DATA: ChantData[];
5
- //# sourceMappingURL=ams.d.ts.map
package/dist/data/ams.js DELETED
@@ -1,122 +0,0 @@
1
- export const AMS_SOURCE = {
2
- book: "Antiphonale Monasticum Solesmense",
3
- fullTitle: null,
4
- edition: "Proprium Sanctorum — offices proper to the Solesmes congregation",
5
- year: 1935,
6
- editor: "Solesmes",
7
- scanSource: "Scan courtesy of Dominique Crochu",
8
- code: "ams",
9
- };
10
- export const AMS_DATA = [
11
- {
12
- id: "gregobase:9299",
13
- incipit: "Gertrudis arca Numinis",
14
- gabc: "(c4)GEr(g)trú(hi)dis,(j) ar(ih)ca(g) Nú(h')mi(f)nis,(g'_) (,)\r\nSpon(i)só(k')que(j) junc(i)ta(k) Vír(ji)gi(h)num,(g.) (;)\r\nDa(g) nup(h')ti(f)á(g)lis(e) pán(fe)ge(d)re(c'_) (,)\r\nCas(g)tos(hi) a(j)mó(ih)res(g) fœ(h')́de(f)ris.(g.) (::)\r\n",
15
- office: "hy",
16
- mode: "8",
17
- pages: [
18
- { page: "1223", sequence: 1, extent: 1 }
19
- ],
20
- },
21
- {
22
- id: "gregobase:9301",
23
- incipit: "Annulis septem subarrhavit me",
24
- gabc: "(c3)AN(i)nu(i)lis(i) sep(i')tem(g) sub(i')ar(j>)rhá(i)vit(hi~) me(i.) *(,) Dó(ij)mi(i)nus(i) me(i')us(g) Je(hi)sus(g) Chris(e.)tus,(e.) (;) et(e) tam(g)quam(hf~) spon(h_)sam(g'_) (,) de(f)co(e')rá(f_)vit(f'_) me(h) co(g)ró(e.)na.(e.) (::)",
25
- office: "an",
26
- mode: "7",
27
- pages: [
28
- { page: "1225", sequence: 2, extent: 1 }
29
- ],
30
- },
31
- {
32
- id: "gregobase:9302",
33
- incipit: "Habuit Gertrudis potestatem",
34
- gabc: "(c4)HA(d)bu(e)it(c') Ger(d)trú(dh'!iv)dis(h.) *(,) pot(hg)es(gf)tá(ghg')tem(h_/iih.) (,) cláu(h>)de(j)re(jk) cæ(ji)lum(hg~) nú(h)bi(ij)bus,(h.) (;) et(h_ggo) a(e)pe(f')rí(g)re(g_e) por(gh)tas(fe) e(d!ewf_e)jus:(dc..) (;) qui(e)a(ed) lin(cd~)gua(d) e(e_f)jus(ghg/hiHGgo) (,) cla(e')vis(f) cæ(g)li(fe) fac(d)ta(cd) est.(d.) (::)",
35
- office: "an",
36
- mode: "1",
37
- pages: [
38
- { page: "1225", sequence: 3, extent: 2 }
39
- ],
40
- },
41
- {
42
- id: "gregobase:9304",
43
- incipit: "Ad sacros Virgo",
44
- gabc: "(f3)Ad(c) sa(f')cros(e) vir(f.)go(h.) (,) thá(g)la(f)mos(g') an(h)hé(g.)lans(f.) (;)\r\nNúp(ff)ti(f')as(g) cæ(h.)lo(e.) (,) ce(h)le(i)brá(j')re(kxk) ges(i.)tit,(j.) (:)\r\nEt(j) pi(i')is(h) vo(g.)tis(i.) (,) ní(f)mi(f)um(g') mo(e)rán(d.)tem(c.) (,)\r\nPró(h)vo(f')cat(g) ho(e.)ram.(f.) (::)\r\n",
45
- office: "hy",
46
- mode: "2",
47
- pages: [
48
- { page: "1226", sequence: 2, extent: 2 }
49
- ],
50
- },
51
- {
52
- id: "gregobase:9306",
53
- incipit: "Casta columba nidificans",
54
- gabc: "(c4)Cas(h)ta(f') co(g)lúm(gh)ba(g.) (,) ni(gh)dí(hg)fi(f)cans(g'_) in(f) ca(g')vér(h)na(g') ma(h)cé(hj)ri(h)æ(h.) (,) sa(i)cri(j) lá(k')te(j)ris(ji) Je(h)su(hi) Chris(h)ti,(g.) (;) mel(ghg') su(e)a(fg)vís(g)si(fe)mum(d.) (,) de(e_f) pe(gf)tra(gh) su(h)gé(g.)bat.(g.) (::)",
55
- office: "an",
56
- mode: "8",
57
- pages: [
58
- { page: "1229", sequence: 1, extent: 1 }
59
- ],
60
- },
61
- {
62
- id: "gregobase:9307",
63
- incipit: "Loquebatur Christus ad dilectam",
64
- gabc: "(c4)LO(d)que(e_f)bá(g)tur(g) Chris(gh)tus(g'_) *() ad(g) di(g')léc(g)tam(d') Ger(e)trú(fe)dem(e'_) (,) fá(f)ci(fe)e(f') ad(g) fá(gh)ci(g)em,(g.) (;) sic(i_j)ut(h) so(h)let(gf) lo(g)qui(d) ho(e_f)mo(g'_) (,) ad(g) a(gf)mí(g)cum(ghg) su(e.)um.(e.) (::)",
65
- office: "an",
66
- mode: "4",
67
- pages: [
68
- { page: "1229", sequence: 2, extent: 1 }
69
- ],
70
- },
71
- {
72
- id: "gregobase:9308",
73
- incipit: "Beatae Gertrudis verba",
74
- gabc: "(c3)BE(e)á(e)tæ(g') Ger(h)trú(i_h)dis(g_h) ver(i_j)ba(i'_) *(,) di(i)ví(j')ni(i) e(hi)rant(h') a(h)mó(hg)ris(fe) já(fe)cu(de)la:(e.) (;) lám(f')pa(e)des(d) e(e_f)jus,(f.) (,) lám(g')pa(h)des(i) i(hg)gnis(fe) at(d)que(f_h) flam(g)má(e.)rum.(e.) (::)",
75
- office: "an",
76
- mode: "7",
77
- pages: [
78
- { page: "1229", sequence: 3, extent: 1 }
79
- ],
80
- },
81
- {
82
- id: "gregobase:9309",
83
- incipit: "Dilectae animam e carcere corporis",
84
- gabc: "(c4)DI(f)léc(gh)tæ(f) á(g')ni(f)mam(f'_) *(,) e(f) cár(e')ce(f)re(d') cór(c)po(d)ris(fe) ex(gh)e(gh)ún(fv_2fv_2//ggf)tem(f.) (;) ac(f)cé(ixf!gwh!io)pit(h) Chris(hj)tus(h') in(h) ul(h')nas(g) su(hv_GF)as,(f.) (;) et(e) cor(fg~) su(gf)um(d_c) il(f)li(fg) a(g)mán(gf)ter(g) a(ghg)pé(f')ru(f)it.(f.) (::)",
85
- office: "an",
86
- mode: "6",
87
- pages: [
88
- { page: "1230", sequence: 1, extent: 1 }
89
- ],
90
- },
91
- {
92
- id: "gregobase:9321",
93
- incipit: "Damasci praepositus",
94
- gabc: "(c3)DA(e!fwh)má(f)sci,(fe) *() præ(d)pó(ef)si(f)tus(e.) (,) gen(g')tis(h) A(i')ré(h)tæ(f') re(h)gis(g.) (;) vó(h')lu(h)it(h') me(h) com(hg~)pre(f)hén(g_h)de(g)re :(e.) (:) a(e) frá(ef)tri(e)bus(ef) per(e) mu(e_fE'D)rum(d'_) (,) sub(d)mís(e')sus(d) sum(e') in(f) spor(h_i)ta:(htg/hih.) (;) et(h) sic(i) e(g')vá(h)si(f') ma(h)nus(e') e(f>)jus(e'_) (,) in(e>) nó(c_d)mi(ef)ne(f') Dó(e)mi(de)ni.(e.) (::)",
95
- office: "an",
96
- mode: "8",
97
- pages: [
98
- { page: "812", sequence: 3, extent: 2 }
99
- ],
100
- },
101
- {
102
- id: "gregobase:9322",
103
- incipit: "Ter virgis caesus sum",
104
- gabc: "(c3)TER(e!fwh) vir(f>)gis(ed) cæ(ef)sus(f) sum,(e.) *(,) se(g')mel(h) la(i)pi(hf)dá(h')tus(h) sum:(g.) (;) ter(i) nau(i)frá(h')gi(h)um(h) pér(ij)tu(i)li(hg/hih.) (,) pro(fe) Chris(f!gwh_f)ti(g') nó(e)mi(de)ne.(e.) (::) E(h) u(h) o(g) u(h) a(f) e.(e.) (::)",
105
- office: "an",
106
- mode: "8",
107
- pages: [
108
- { page: "813", sequence: 1, extent: 1 }
109
- ],
110
- },
111
- {
112
- id: "gregobase:10402",
113
- incipit: "Gratia Dei in me",
114
- gabc: "(c3)\r\nGRá(f)ti(e)a(f) De(h_i)i(ii) *(,)\r\nin(h) me(i) vá(j')cu(h)a(ij) non(j>) fu(i.)it:(i.) (;)\r\nsed(i) grá(f_i)ti(h')a(g) e(f_e~)jus(f_e) (,)\r\nsem(d')per(e) in(f') me(h) ma(f.)net.(f.) (::) E(i) u(h) o(i) u(j) a(h) e.(f.) (::)\r\n",
115
- office: "an",
116
- mode: "4",
117
- pages: [
118
- { page: "812", sequence: 2, extent: 1 }
119
- ],
120
- }
121
- ];
122
- //# sourceMappingURL=ams.js.map
@@ -1,5 +0,0 @@
1
- import type { Chant } from "./types.js";
2
- import type { ChantData } from "./gr.js";
3
- export declare const COT_SOURCE: Chant["source"];
4
- export declare const COT_DATA: ChantData[];
5
- //# sourceMappingURL=cot.d.ts.map