@leafo/lml 0.1.1 → 0.3.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.
package/dist/parser.js CHANGED
@@ -1,44 +1,188 @@
1
1
  // @ts-ignore - generated file
2
2
  import * as peg from "./grammar.js";
3
- import { KeySignature } from "./music.js";
3
+ import { parseNote, KeySignature, OFFSETS, OCTAVE_SIZE } from "./music.js";
4
4
  import { MultiTrackSong, SongNote } from "./song.js";
5
5
  import { AutoChords } from "./auto-chords.js";
6
- // tokens are separated by whitespace
7
- // a note is a5.1.2
8
- // - 5 is the octave
9
- // - 1 is the duration
10
- // - 2 is the start
11
- //
12
- // duration and start are optional
13
- // duration defaults to 1 beat (or the current duration)
14
- // start defaults to current cursor position
6
+ /**
7
+ * Internal tick resolution for timing calculations.
8
+ * 48 ticks per beat allows exact representation of common subdivisions
9
+ * including triplets, sixtuplets, and standard note values.
10
+ * Divisible by 1, 2, 3, 4, 6, 8, 12, 16, 24, 48.
11
+ */
12
+ const TICKS_PER_BEAT = 48;
13
+ /**
14
+ * Calculates the duration multiplier for dotted notes.
15
+ * Each dot adds half of the previous value to the note duration.
16
+ * @param dots - Number of dots (1, 2, 3, etc.)
17
+ * @returns Duration multiplier (1 dot = 1.5x, 2 dots = 1.75x, 3 dots = 1.875x)
18
+ * @example
19
+ * dottedMultiplier(1) // 1.5
20
+ * dottedMultiplier(2) // 1.75
21
+ * dottedMultiplier(3) // 1.875
22
+ */
23
+ function dottedMultiplier(dots) {
24
+ return (Math.pow(2, dots + 1) - 1) / Math.pow(2, dots);
25
+ }
26
+ /**
27
+ * Finds the octave that places a note closest to a reference pitch.
28
+ * Used for relative note entry where the octave is inferred from context.
29
+ * @param noteLetter - Note name without octave (e.g., "C", "F#", "Bb")
30
+ * @param referencePitch - MIDI pitch number to stay close to
31
+ * @returns Full note name with octave (e.g., "C4", "F#5")
32
+ * @throws Error if noteLetter is not a valid note name
33
+ * @example
34
+ * findClosestOctave("G", 60) // "G4" (closest G to middle C)
35
+ * findClosestOctave("C", 67) // "C5" (closest C to G4)
36
+ */
37
+ function findClosestOctave(noteLetter, referencePitch) {
38
+ const match = noteLetter.match(/^([A-G])(#|b)?$/);
39
+ if (!match) {
40
+ throw new Error(`Invalid note letter: ${noteLetter}`);
41
+ }
42
+ const [, letter] = match;
43
+ if (OFFSETS[letter] === undefined) {
44
+ throw new Error(`Invalid note letter: ${letter}`);
45
+ }
46
+ // Find the reference note's octave (MIDI: C4 = 60)
47
+ const refOctave = Math.floor(referencePitch / OCTAVE_SIZE) - 1;
48
+ // Calculate pitches for octaves around the reference using parseNote for spelling rules.
49
+ let bestOctave = refOctave;
50
+ let bestPitch = parseNote(`${noteLetter}${refOctave}`);
51
+ let bestDistance = Math.abs(bestPitch - referencePitch);
52
+ const belowOctave = refOctave - 1;
53
+ const pitchBelow = parseNote(`${noteLetter}${belowOctave}`);
54
+ const distBelow = Math.abs(pitchBelow - referencePitch);
55
+ if (distBelow < bestDistance) {
56
+ bestOctave = belowOctave;
57
+ bestPitch = pitchBelow;
58
+ bestDistance = distBelow;
59
+ }
60
+ const aboveOctave = refOctave + 1;
61
+ const pitchAbove = parseNote(`${noteLetter}${aboveOctave}`);
62
+ const distAbove = Math.abs(pitchAbove - referencePitch);
63
+ if (distAbove < bestDistance) {
64
+ bestOctave = aboveOctave;
65
+ }
66
+ return `${noteLetter}${bestOctave}`;
67
+ }
68
+ /**
69
+ * Parser and compiler for the LML (Leafo Music Language) notation format.
70
+ * Converts text-based music notation into a MultiTrackSong with note and timing data.
71
+ *
72
+ * @example
73
+ * // Quick load from string
74
+ * const song = SongParser.load("c d e f g")
75
+ *
76
+ * // Two-step parse and compile
77
+ * const parser = new SongParser()
78
+ * const ast = parser.parse("c d e | f g a")
79
+ * const song = parser.compile(ast)
80
+ */
15
81
  class SongParser {
82
+ /**
83
+ * Convenience method to parse and compile a song in one step.
84
+ * @param songText - LML notation string to parse
85
+ * @param opts - Optional parser configuration
86
+ * @returns Compiled MultiTrackSong
87
+ * @example
88
+ * const song = SongParser.load("c d e | f g a")
89
+ */
16
90
  static load(songText, opts) {
17
91
  const parser = new SongParser();
18
92
  const ast = parser.parse(songText);
19
93
  return parser.compile(ast, opts);
20
94
  }
21
- // convert song text to ast
95
+ /**
96
+ * Parses a single note string into its component parts.
97
+ * @param noteStr - Note string to parse (e.g., "c5", "c+5*2", "c5.")
98
+ * @returns ParsedNote object, or null if parsing fails
99
+ * @example
100
+ * SongParser.parseNote("c5") // { name: "C", octave: "5" }
101
+ * SongParser.parseNote("c+5*2") // { name: "C", accidental: "+", octave: "5", duration: 2 }
102
+ * SongParser.parseNote("c5.") // { name: "C", octave: "5", dots: 1 }
103
+ * SongParser.parseNote("c5@2") // { name: "C", octave: "5", start: 2 }
104
+ */
105
+ static parseNote(noteStr) {
106
+ try {
107
+ const result = peg.parse(noteStr, { startRule: 'note' });
108
+ const [, noteName, opts] = result;
109
+ const parsed = {
110
+ name: noteName[0], // Just the letter (already uppercase from grammar)
111
+ octave: noteName.slice(1) || undefined,
112
+ accidental: opts.sharp ? '+' : opts.flat ? '-' : opts.natural ? '=' : undefined,
113
+ duration: opts.duration,
114
+ start: opts.start,
115
+ };
116
+ if (opts.dots)
117
+ parsed.dots = opts.dots;
118
+ return parsed;
119
+ }
120
+ catch {
121
+ return null;
122
+ }
123
+ }
124
+ /**
125
+ * Parses LML notation text into an abstract syntax tree.
126
+ * @param songText - LML notation string to parse
127
+ * @returns Array of AST nodes representing the parsed song
128
+ * @throws SyntaxError if the input contains invalid syntax
129
+ * @example
130
+ * const parser = new SongParser()
131
+ * const ast = parser.parse("C4 D4 E4")
132
+ * // ast = [["note", "C", {...}], ["note", "D", {...}], ["note", "E", {...}]]
133
+ */
22
134
  parse(songText) {
23
- return peg.parse(songText);
135
+ return peg.parse(songText, { grammarSource: "input" });
24
136
  }
25
- // compile ast to song notes
137
+ /**
138
+ * Compiles an AST into a MultiTrackSong with note data.
139
+ * Processes all commands, resolves relative octaves, applies key signatures,
140
+ * and optionally generates auto-chords.
141
+ * @param ast - Abstract syntax tree from parse()
142
+ * @param opts - Optional compiler configuration
143
+ * @returns Compiled song with tracks, notes, and metadata
144
+ * @example
145
+ * const parser = new SongParser()
146
+ * const ast = parser.parse("$G | C D E | F G A |")
147
+ * const song = parser.compile(ast)
148
+ * // song.metadata.keySignature = 1 (G major)
149
+ */
26
150
  compile(ast, opts) {
151
+ // Extract frontmatter from AST
152
+ const frontmatter = {};
153
+ for (const node of ast) {
154
+ if (node[0] === "frontmatter") {
155
+ frontmatter[node[1]] = node[2];
156
+ }
157
+ }
158
+ const defaultOctave = opts?.defaultOctave ?? 4;
27
159
  const state = {
28
160
  startPosition: 0,
29
161
  position: 0,
30
- beatsPerNote: 1,
31
- beatsPerMeasure: 4,
162
+ ticksPerNote: TICKS_PER_BEAT, // 1 beat = 48 ticks
163
+ ticksPerMeasure: TICKS_PER_BEAT * 4, // 4 beats per measure default
32
164
  timeScale: 1,
33
165
  keySignature: new KeySignature(0),
34
166
  currentTrack: 0,
167
+ lastMeasure: -1,
168
+ nextMeasureStart: 0,
169
+ explicitMeasureUsed: false,
170
+ lastNotePitch: null,
171
+ defaultPitch: (defaultOctave + 1) * OCTAVE_SIZE, // C at the default octave (MIDI: C4 = 60)
35
172
  };
36
173
  const song = new MultiTrackSong();
37
174
  this.compileCommands(ast, state, song);
38
175
  song.metadata = {
39
176
  keySignature: state.keySignature.count,
40
- beatsPerMeasure: state.beatsPerMeasure,
177
+ beatsPerMeasure: state.ticksPerMeasure / TICKS_PER_BEAT,
178
+ ...(Object.keys(frontmatter).length > 0 && { frontmatter }),
41
179
  };
180
+ // Ensure default 4/4 time signature at position 0 for getMeasures()
181
+ if (!song.timeSignatures || song.timeSignatures.length === 0 || song.timeSignatures[0][0] > 0) {
182
+ if (!song.timeSignatures)
183
+ song.timeSignatures = [];
184
+ song.timeSignatures.unshift([0, 4]);
185
+ }
42
186
  if (song.autoChords) {
43
187
  const settings = opts ? opts.autoChordsSettings : {};
44
188
  if (opts && opts.autoChords) {
@@ -50,6 +194,12 @@ class SongParser {
50
194
  }
51
195
  return song;
52
196
  }
197
+ /**
198
+ * Recursively processes AST commands and updates song state.
199
+ * @param commands - Array of AST nodes to process
200
+ * @param state - Current compiler state (modified in place)
201
+ * @param song - Song being built (notes added to tracks)
202
+ */
53
203
  compileCommands(commands, state, song) {
54
204
  for (const command of commands) {
55
205
  const t = command[0];
@@ -67,23 +217,47 @@ class SongParser {
67
217
  Object.setPrototypeOf(blockState, state);
68
218
  this.compileCommands(blockCommands, blockState, song);
69
219
  state.position = blockState.position;
220
+ state.lastNotePitch = blockState.lastNotePitch;
221
+ // If time signature changed inside block, recalculate next measure boundary
222
+ if (blockState.ticksPerMeasure !== state.ticksPerMeasure) {
223
+ const measureStart = state.nextMeasureStart - state.ticksPerMeasure;
224
+ state.nextMeasureStart = measureStart + blockState.ticksPerMeasure;
225
+ state.ticksPerMeasure = blockState.ticksPerMeasure;
226
+ }
70
227
  break;
71
228
  }
72
229
  case "halfTime": {
73
- state.timeScale *= 2;
230
+ const [, count = 1] = command;
231
+ state.timeScale *= Math.pow(2, count);
74
232
  break;
75
233
  }
76
234
  case "doubleTime": {
77
- state.timeScale *= 0.5;
235
+ const [, count = 1] = command;
236
+ state.timeScale *= Math.pow(0.5, count);
78
237
  break;
79
238
  }
80
239
  case "tripleTime": {
81
- state.timeScale *= 1 / 3;
240
+ const [, count = 1] = command;
241
+ state.timeScale *= Math.pow(1 / 3, count);
82
242
  break;
83
243
  }
84
244
  case "measure": {
85
245
  const [, measure] = command;
86
- state.position = measure * state.beatsPerMeasure;
246
+ if (measure !== undefined) {
247
+ // Explicit measure number - calculate position (for jumps)
248
+ const measureNum = measure;
249
+ state.lastMeasure = measureNum;
250
+ state.position = measureNum * state.ticksPerMeasure;
251
+ state.nextMeasureStart = (measureNum + 1) * state.ticksPerMeasure;
252
+ state.explicitMeasureUsed = true;
253
+ }
254
+ else {
255
+ // Auto-increment - always jump to next measure boundary
256
+ state.lastMeasure += 1;
257
+ state.position = state.nextMeasureStart;
258
+ state.nextMeasureStart = state.position + state.ticksPerMeasure;
259
+ state.explicitMeasureUsed = false;
260
+ }
87
261
  break;
88
262
  }
89
263
  case "setTrack": {
@@ -97,20 +271,22 @@ class SongParser {
97
271
  if (!track.clefs) {
98
272
  track.clefs = [];
99
273
  }
100
- track.clefs.push([state.position, clef]);
274
+ // Convert ticks to beats for storage
275
+ track.clefs.push([state.position / TICKS_PER_BEAT, clef]);
101
276
  break;
102
277
  }
103
278
  case "note": {
104
279
  const [, name, noteOpts] = command;
105
280
  let noteName = name;
106
- let duration = state.beatsPerNote * state.timeScale;
107
- let start = null;
281
+ let durationTicks = state.ticksPerNote * state.timeScale;
108
282
  let hasAccidental = false;
109
283
  if (noteOpts) {
110
284
  if (noteOpts.duration) {
111
- duration *= noteOpts.duration;
285
+ durationTicks *= noteOpts.duration;
286
+ }
287
+ if (noteOpts.dots) {
288
+ durationTicks *= dottedMultiplier(noteOpts.dots);
112
289
  }
113
- start = noteOpts.start ?? null;
114
290
  if (noteOpts.sharp) {
115
291
  hasAccidental = true;
116
292
  noteName = noteName.substring(0, 1) + "#" + noteName.substring(1);
@@ -123,39 +299,71 @@ class SongParser {
123
299
  hasAccidental = true;
124
300
  }
125
301
  }
302
+ // Handle relative octave (note without octave number)
303
+ const hasOctave = /\d$/.test(noteName);
304
+ if (!hasOctave) {
305
+ const referencePitch = state.lastNotePitch ?? state.defaultPitch;
306
+ noteName = findClosestOctave(noteName, referencePitch);
307
+ }
126
308
  if (!hasAccidental) {
127
309
  // apply default accidental
128
310
  noteName = state.keySignature.unconvertNote(noteName);
129
311
  }
130
- if (start === null) {
131
- start = state.position;
132
- state.position += duration;
312
+ // Round duration to ensure integer ticks
313
+ durationTicks = Math.round(durationTicks);
314
+ // Determine start position
315
+ let startTicks;
316
+ if (noteOpts?.start != null) {
317
+ // Explicit @ position is in beats, convert to ticks
318
+ startTicks = noteOpts.start * TICKS_PER_BEAT;
133
319
  }
134
- song.pushWithTrack(new SongNote(noteName, start, duration), state.currentTrack);
320
+ else {
321
+ startTicks = state.position;
322
+ state.position += durationTicks;
323
+ }
324
+ // Update lastNotePitch for relative octave tracking
325
+ state.lastNotePitch = parseNote(noteName);
326
+ // Convert ticks to beats for SongNote
327
+ song.pushWithTrack(new SongNote(noteName, startTicks / TICKS_PER_BEAT, durationTicks / TICKS_PER_BEAT, noteOpts?.location), state.currentTrack);
135
328
  break;
136
329
  }
137
330
  case "rest": {
138
331
  const [, restTiming] = command;
139
- let duration = state.beatsPerNote * state.timeScale;
332
+ let durationTicks = state.ticksPerNote * state.timeScale;
140
333
  if (restTiming) {
141
334
  if (restTiming.start) {
142
335
  break; // do nothing
143
336
  }
144
337
  if (restTiming.duration) {
145
- duration *= restTiming.duration;
338
+ durationTicks *= restTiming.duration;
339
+ }
340
+ if (restTiming.dots) {
341
+ durationTicks *= dottedMultiplier(restTiming.dots);
146
342
  }
147
343
  }
148
- state.position += duration;
344
+ state.position += Math.round(durationTicks);
149
345
  break;
150
346
  }
151
347
  case "keySignature": {
152
- state.keySignature = new KeySignature(+command[1]);
348
+ const [, count, sourceLocation] = command;
349
+ state.keySignature = new KeySignature(count);
350
+ if (!song.keySignatures) {
351
+ song.keySignatures = [];
352
+ }
353
+ song.keySignatures.push([state.position / TICKS_PER_BEAT, count, sourceLocation]);
153
354
  break;
154
355
  }
155
356
  case "timeSignature": {
156
357
  const [, perBeat, noteValue] = command;
157
- state.beatsPerNote = 4 / noteValue;
158
- state.beatsPerMeasure = state.beatsPerNote * perBeat;
358
+ // Convert beat duration to ticks: 4/4 means quarter note = 1 beat = 48 ticks
359
+ // In 6/8, eighth note = 1 beat = 48 ticks, so ticksPerNote = 48 * (4/8) = 24
360
+ state.ticksPerNote = TICKS_PER_BEAT * (4 / noteValue);
361
+ state.ticksPerMeasure = state.ticksPerNote * perBeat;
362
+ // Track time signature changes for getMeasures()
363
+ if (!song.timeSignatures) {
364
+ song.timeSignatures = [];
365
+ }
366
+ song.timeSignatures.push([state.position / TICKS_PER_BEAT, perBeat]);
159
367
  break;
160
368
  }
161
369
  case "macro": {
@@ -165,8 +373,22 @@ class SongParser {
165
373
  if (!song.autoChords) {
166
374
  song.autoChords = [];
167
375
  }
168
- song.autoChords.push([state.position, chord]);
376
+ // Convert ticks to beats for storage
377
+ song.autoChords.push([state.position / TICKS_PER_BEAT, chord]);
378
+ }
379
+ break;
380
+ }
381
+ case "string": {
382
+ const [, text] = command;
383
+ if (!song.strings) {
384
+ song.strings = [];
169
385
  }
386
+ // Convert ticks to beats for storage
387
+ song.strings.push([state.position / TICKS_PER_BEAT, text]);
388
+ break;
389
+ }
390
+ case "frontmatter": {
391
+ // Handled separately before compileCommands
170
392
  break;
171
393
  }
172
394
  default: {
@@ -176,6 +398,7 @@ class SongParser {
176
398
  }
177
399
  }
178
400
  }
401
+ /** The PEG.js parser module for direct access to grammar */
179
402
  SongParser.peg = peg;
180
403
  export default SongParser;
181
404
  //# sourceMappingURL=parser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}