@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.
- package/README.md +60 -0
- package/lib/grammar.jison.js +1263 -0
- package/lib/index.d.ts +6 -0
- package/lib/index.js +6 -0
- package/lib/meiEncoder.d.ts +8 -0
- package/lib/meiEncoder.js +1386 -0
- package/lib/musicXmlDecoder.d.ts +20 -0
- package/lib/musicXmlDecoder.js +1047 -0
- package/lib/musicXmlTypes.d.ts +199 -0
- package/lib/musicXmlTypes.js +7 -0
- package/lib/musicXmlUtils.d.ts +81 -0
- package/lib/musicXmlUtils.js +435 -0
- package/lib/parser.d.ts +3 -0
- package/lib/parser.js +151 -0
- package/lib/serializer.d.ts +11 -0
- package/lib/serializer.js +578 -0
- package/lib/types.d.ts +241 -0
- package/lib/types.js +99 -0
- package/package.json +57 -0
- package/source/lilylet/grammar.jison.js +1263 -0
- package/source/lilylet/index.ts +12 -0
- package/source/lilylet/lilylet.jison +593 -0
- package/source/lilylet/lilypondDecoder.ts +789 -0
- package/source/lilylet/meiEncoder.ts +1780 -0
- package/source/lilylet/musicXmlDecoder.ts +1311 -0
- package/source/lilylet/musicXmlTypes.ts +205 -0
- package/source/lilylet/musicXmlUtils.ts +532 -0
- package/source/lilylet/parser.ts +178 -0
- package/source/lilylet/serializer.ts +748 -0
- package/source/lilylet/types.ts +304 -0
|
@@ -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
|
+
}
|