@k-l-lambda/lilylet 0.1.30

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.
@@ -0,0 +1,205 @@
1
+ /**
2
+ * MusicXML Intermediate Types
3
+ *
4
+ * These types represent the parsed MusicXML structure before conversion to LilyletDoc.
5
+ * They closely mirror MusicXML elements for easier parsing.
6
+ */
7
+
8
+ // ============ Basic Types ============
9
+
10
+ export interface MusicXmlPitch {
11
+ step: string; // C, D, E, F, G, A, B
12
+ alter?: number; // -2, -1, 0, 1, 2 (double-flat to double-sharp)
13
+ octave: number; // MusicXML octave (4 = middle C octave)
14
+ }
15
+
16
+ export interface MusicXmlDuration {
17
+ divisions: number; // Duration in divisions
18
+ type?: string; // whole, half, quarter, eighth, 16th, 32nd, 64th
19
+ dots: number; // Number of dots
20
+ timeModification?: { // Tuplet info
21
+ actualNotes: number;
22
+ normalNotes: number;
23
+ };
24
+ }
25
+
26
+ // ============ Attributes (Key, Time, Clef) ============
27
+
28
+ export interface MusicXmlKey {
29
+ fifths: number; // Circle of fifths (-7 to 7)
30
+ mode?: string; // major, minor
31
+ }
32
+
33
+ export interface MusicXmlTime {
34
+ beats: number;
35
+ beatType: number;
36
+ }
37
+
38
+ export interface MusicXmlClef {
39
+ sign: string; // G, F, C
40
+ line?: number; // Line number
41
+ clefOctaveChange?: number; // -1, 0, 1
42
+ }
43
+
44
+ export interface MusicXmlAttributes {
45
+ divisions?: number; // Divisions per quarter note
46
+ key?: MusicXmlKey;
47
+ time?: MusicXmlTime;
48
+ clefs?: { staff: number; clef: MusicXmlClef }[]; // Clefs by staff number
49
+ staves?: number; // Number of staves
50
+ }
51
+
52
+ // ============ Note Types ============
53
+
54
+ export type MusicXmlStemDirection = 'up' | 'down';
55
+
56
+ export interface MusicXmlNotations {
57
+ ties?: { type: 'start' | 'stop' }[];
58
+ slurs?: { type: 'start' | 'stop'; number: number }[];
59
+ beams?: { type: 'begin' | 'continue' | 'end'; number: number }[];
60
+ articulations?: string[]; // staccato, accent, tenuto, etc.
61
+ ornaments?: string[]; // trill, turn, mordent, etc.
62
+ fermata?: boolean;
63
+ arpeggiate?: boolean;
64
+ tremolo?: { type: 'single' | 'start' | 'stop'; value: number };
65
+ tuplet?: { type: 'start' | 'stop'; number: number };
66
+ }
67
+
68
+ export interface MusicXmlNote {
69
+ isChord: boolean; // Has <chord/> tag
70
+ isRest: boolean; // Has <rest/> tag
71
+ isGrace: boolean; // Has <grace/> tag
72
+ pitch?: MusicXmlPitch;
73
+ duration: MusicXmlDuration;
74
+ voice: number; // Voice number (1-based)
75
+ staff?: number; // Staff number (for cross-staff)
76
+ stem?: MusicXmlStemDirection;
77
+ notations?: MusicXmlNotations;
78
+ fingering?: number; // 1-5
79
+ beams?: { type: 'begin' | 'continue' | 'end'; number: number }[];
80
+ }
81
+
82
+ // ============ Direction Types ============
83
+
84
+ export interface MusicXmlDynamic {
85
+ type: string; // pp, p, mp, mf, f, ff, sfz, etc.
86
+ }
87
+
88
+ export interface MusicXmlWedge {
89
+ type: 'crescendo' | 'diminuendo' | 'stop';
90
+ number?: number;
91
+ }
92
+
93
+ export interface MusicXmlPedal {
94
+ type: 'start' | 'stop' | 'change';
95
+ line?: boolean;
96
+ }
97
+
98
+ export interface MusicXmlMetronome {
99
+ beatUnit: string; // quarter, half, eighth, etc.
100
+ beatUnitDot?: boolean;
101
+ perMinute: number;
102
+ }
103
+
104
+ export interface MusicXmlWords {
105
+ text: string;
106
+ fontStyle?: string;
107
+ fontWeight?: string;
108
+ }
109
+
110
+ export interface MusicXmlOctaveShift {
111
+ type: 'up' | 'down' | 'stop';
112
+ size?: number; // 8, 15 (default 8)
113
+ }
114
+
115
+ export interface MusicXmlDirection {
116
+ placement?: 'above' | 'below';
117
+ staff?: number;
118
+ dynamics?: MusicXmlDynamic[];
119
+ wedge?: MusicXmlWedge;
120
+ pedal?: MusicXmlPedal;
121
+ metronome?: MusicXmlMetronome;
122
+ words?: MusicXmlWords[];
123
+ octaveShift?: MusicXmlOctaveShift;
124
+ coda?: boolean;
125
+ segno?: boolean;
126
+ }
127
+
128
+ // ============ Barline Types ============
129
+
130
+ export interface MusicXmlBarline {
131
+ location?: 'left' | 'right' | 'middle';
132
+ barStyle?: string; // regular, light-light, light-heavy, heavy-light, heavy-heavy, etc.
133
+ repeat?: {
134
+ direction: 'forward' | 'backward';
135
+ };
136
+ ending?: {
137
+ type: 'start' | 'stop' | 'discontinue';
138
+ number: string;
139
+ };
140
+ }
141
+
142
+ // ============ Harmony (Chord Symbols) ============
143
+
144
+ export interface MusicXmlHarmony {
145
+ root: {
146
+ step: string; // C, D, E, F, G, A, B
147
+ alter?: number;
148
+ };
149
+ kind: string; // major, minor, dominant, etc.
150
+ bass?: {
151
+ step: string;
152
+ alter?: number;
153
+ };
154
+ degrees?: {
155
+ value: number;
156
+ alter: number;
157
+ type: 'add' | 'alter' | 'subtract';
158
+ }[];
159
+ }
160
+
161
+ // ============ Measure and Part ============
162
+
163
+ export type MusicXmlMeasureContent =
164
+ | { type: 'attributes'; data: MusicXmlAttributes }
165
+ | { type: 'note'; data: MusicXmlNote }
166
+ | { type: 'direction'; data: MusicXmlDirection }
167
+ | { type: 'barline'; data: MusicXmlBarline }
168
+ | { type: 'harmony'; data: MusicXmlHarmony }
169
+ | { type: 'backup'; duration: number }
170
+ | { type: 'forward'; duration: number };
171
+
172
+ export interface MusicXmlMeasure {
173
+ number: string;
174
+ width?: number;
175
+ implicit?: boolean; // Pickup/anacrusis measure
176
+ contents: MusicXmlMeasureContent[];
177
+ }
178
+
179
+ export interface MusicXmlPart {
180
+ id: string;
181
+ name?: string;
182
+ measures: MusicXmlMeasure[];
183
+ }
184
+
185
+ // ============ Score Level ============
186
+
187
+ export interface MusicXmlMetadata {
188
+ workTitle?: string;
189
+ movementTitle?: string;
190
+ composer?: string;
191
+ arranger?: string;
192
+ lyricist?: string;
193
+ }
194
+
195
+ export interface MusicXmlPartInfo {
196
+ id: string;
197
+ name?: string;
198
+ abbreviation?: string;
199
+ }
200
+
201
+ export interface MusicXmlDocument {
202
+ metadata: MusicXmlMetadata;
203
+ partList: MusicXmlPartInfo[];
204
+ parts: MusicXmlPart[];
205
+ }