@leafo/lml 0.2.0 → 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
@@ -3,67 +3,150 @@ import * as peg from "./grammar.js";
3
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
- // 48 ticks per beat - divisible by 1,2,3,4,6,8,12,16,24,48
7
- // Allows exact representation of triplets, sixtuplets, etc.
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
+ */
8
12
  const TICKS_PER_BEAT = 48;
9
13
  /**
10
- * Given a note name without octave (e.g., "C", "F#") and a reference pitch,
11
- * find the octave that places the note closest to the reference.
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)
12
36
  */
13
37
  function findClosestOctave(noteLetter, referencePitch) {
14
38
  const match = noteLetter.match(/^([A-G])(#|b)?$/);
15
39
  if (!match) {
16
40
  throw new Error(`Invalid note letter: ${noteLetter}`);
17
41
  }
18
- const [, letter, accidental] = match;
19
- let noteOffset = OFFSETS[letter];
20
- if (accidental === "#")
21
- noteOffset += 1;
22
- if (accidental === "b")
23
- noteOffset -= 1;
24
- // Normalize to 0-11 range (handles Cb = 11, B# = 0)
25
- noteOffset = ((noteOffset % OCTAVE_SIZE) + OCTAVE_SIZE) % OCTAVE_SIZE;
26
- // Find the reference note's octave
27
- const refOctave = Math.floor(referencePitch / OCTAVE_SIZE);
28
- // Calculate pitches for octaves around the reference
29
- let bestPitch = refOctave * OCTAVE_SIZE + noteOffset;
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}`);
30
51
  let bestDistance = Math.abs(bestPitch - referencePitch);
31
- // Check octave below
32
- const pitchBelow = (refOctave - 1) * OCTAVE_SIZE + noteOffset;
52
+ const belowOctave = refOctave - 1;
53
+ const pitchBelow = parseNote(`${noteLetter}${belowOctave}`);
33
54
  const distBelow = Math.abs(pitchBelow - referencePitch);
34
55
  if (distBelow < bestDistance) {
56
+ bestOctave = belowOctave;
35
57
  bestPitch = pitchBelow;
36
58
  bestDistance = distBelow;
37
59
  }
38
- // Check octave above
39
- const pitchAbove = (refOctave + 1) * OCTAVE_SIZE + noteOffset;
60
+ const aboveOctave = refOctave + 1;
61
+ const pitchAbove = parseNote(`${noteLetter}${aboveOctave}`);
40
62
  const distAbove = Math.abs(pitchAbove - referencePitch);
41
63
  if (distAbove < bestDistance) {
42
- bestPitch = pitchAbove;
64
+ bestOctave = aboveOctave;
43
65
  }
44
- const finalOctave = Math.floor(bestPitch / OCTAVE_SIZE) - 1;
45
- return `${noteLetter}${finalOctave}`;
66
+ return `${noteLetter}${bestOctave}`;
46
67
  }
47
- // tokens are separated by whitespace
48
- // a note is a5.1.2
49
- // - 5 is the octave
50
- // - 1 is the duration
51
- // - 2 is the start
52
- //
53
- // duration and start are optional
54
- // duration defaults to 1 beat (or the current duration)
55
- // start defaults to current cursor position
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
+ */
56
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
+ */
57
90
  static load(songText, opts) {
58
91
  const parser = new SongParser();
59
92
  const ast = parser.parse(songText);
60
93
  return parser.compile(ast, opts);
61
94
  }
62
- // 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
+ */
63
134
  parse(songText) {
64
- return peg.parse(songText);
135
+ return peg.parse(songText, { grammarSource: "input" });
65
136
  }
66
- // 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
+ */
67
150
  compile(ast, opts) {
68
151
  // Extract frontmatter from AST
69
152
  const frontmatter = {};
@@ -111,6 +194,12 @@ class SongParser {
111
194
  }
112
195
  return song;
113
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
+ */
114
203
  compileCommands(commands, state, song) {
115
204
  for (const command of commands) {
116
205
  const t = command[0];
@@ -195,6 +284,9 @@ class SongParser {
195
284
  if (noteOpts.duration) {
196
285
  durationTicks *= noteOpts.duration;
197
286
  }
287
+ if (noteOpts.dots) {
288
+ durationTicks *= dottedMultiplier(noteOpts.dots);
289
+ }
198
290
  if (noteOpts.sharp) {
199
291
  hasAccidental = true;
200
292
  noteName = noteName.substring(0, 1) + "#" + noteName.substring(1);
@@ -245,12 +337,20 @@ class SongParser {
245
337
  if (restTiming.duration) {
246
338
  durationTicks *= restTiming.duration;
247
339
  }
340
+ if (restTiming.dots) {
341
+ durationTicks *= dottedMultiplier(restTiming.dots);
342
+ }
248
343
  }
249
344
  state.position += Math.round(durationTicks);
250
345
  break;
251
346
  }
252
347
  case "keySignature": {
253
- 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]);
254
354
  break;
255
355
  }
256
356
  case "timeSignature": {
@@ -298,6 +398,7 @@ class SongParser {
298
398
  }
299
399
  }
300
400
  }
401
+ /** The PEG.js parser module for direct access to grammar */
301
402
  SongParser.peg = peg;
302
403
  export default SongParser;
303
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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"}
package/dist/song.d.ts CHANGED
@@ -1,59 +1,255 @@
1
+ import { type ChordShapeName } from "./music.js";
2
+ /**
3
+ * Represents a single musical note with pitch, timing, and duration.
4
+ * @example
5
+ * const note = new SongNote("C4", 0, 1) // Middle C at beat 0, duration 1 beat
6
+ * const note2 = new SongNote("D#5", 4, 0.5) // D#5 at beat 4, half beat duration
7
+ */
1
8
  export declare class SongNote {
9
+ /** Unique identifier for this note instance */
2
10
  id: symbol;
11
+ /** Note name with octave (e.g., "C4", "D#5", "Bb3") */
3
12
  note: string;
13
+ /** Start position in beats */
4
14
  start: number;
15
+ /** Duration in beats */
5
16
  duration: number;
17
+ /** Source location in LML text as [startOffset, endOffset], used for editor features */
6
18
  sourceLocation?: [number, number];
19
+ /**
20
+ * Creates a new SongNote.
21
+ * @param note - Note name with octave (e.g., "C4", "D#5")
22
+ * @param start - Start position in beats
23
+ * @param duration - Duration in beats
24
+ * @param sourceLocation - Optional source location in LML text [startOffset, endOffset]
25
+ */
7
26
  constructor(note: string, start: number, duration: number, sourceLocation?: [number, number]);
27
+ /**
28
+ * Creates a copy of this note.
29
+ * @returns A new SongNote with the same properties
30
+ */
8
31
  clone(): SongNote;
32
+ /**
33
+ * Checks if this note overlaps with a time range.
34
+ * @param min - Start of the range in beats
35
+ * @param max - End of the range in beats
36
+ * @returns True if the note overlaps with the range
37
+ */
9
38
  inRange(min: number, max: number): boolean;
39
+ /**
40
+ * Creates a new note transposed by a number of semitones.
41
+ * @param semitones - Number of semitones to transpose (positive = up, negative = down)
42
+ * @returns A new SongNote with the transposed pitch
43
+ * @example
44
+ * const c4 = new SongNote("C4", 0, 1)
45
+ * const d4 = c4.transpose(2) // D4
46
+ * const b3 = c4.transpose(-1) // B3
47
+ */
10
48
  transpose(semitones: number): SongNote;
49
+ /** Returns the start position in beats. */
11
50
  getStart(): number;
51
+ /** Returns the end position in beats (start + duration). */
12
52
  getStop(): number;
53
+ /** Returns the end position for rendering purposes. */
13
54
  getRenderStop(): number;
55
+ /** Returns a string representation of the note. */
14
56
  toString(): string;
15
57
  }
58
+ /**
59
+ * Metadata associated with a parsed song.
60
+ */
16
61
  export interface SongMetadata {
62
+ /** Key signature as number of accidentals (positive = sharps, negative = flats) */
17
63
  keySignature?: number;
64
+ /** Number of beats per measure */
18
65
  beatsPerMeasure?: number;
66
+ /** Frontmatter key-value pairs from the LML source */
19
67
  frontmatter?: Record<string, string>;
20
68
  }
69
+ /**
70
+ * A list of notes representing a song or track, with associated metadata.
71
+ * Extends Array<SongNote> to allow direct indexing and array methods.
72
+ * @example
73
+ * const song = SongNoteList.newSong([
74
+ * ["C4", 0, 1],
75
+ * ["E4", 1, 1],
76
+ * ["G4", 2, 1],
77
+ * ])
78
+ * song.transpose(2) // Transpose up a whole step
79
+ */
21
80
  export declare class SongNoteList extends Array<SongNote> {
81
+ /** Bucket size in beats for spatial indexing optimization */
22
82
  static bucketSize: number;
83
+ /** Song metadata including key signature and time signature */
23
84
  metadata?: SongMetadata;
24
- autoChords?: [number, [string, string]][];
85
+ /** Auto chord markers as [beat_position, [root, chord_shape]][] */
86
+ autoChords?: [number, [string, ChordShapeName]][];
87
+ /** Clef changes as [beat_position, clef_name][] */
25
88
  clefs?: [number, string][];
89
+ /** String annotations as [beat_position, text][] */
26
90
  strings?: [number, string][];
91
+ /** Time signature changes as [beat_position, beats_per_measure][] */
27
92
  timeSignatures?: [number, number][];
93
+ /** Key signature changes as [beat_position, accidental_count, source_location][] */
94
+ keySignatures?: [number, number, [number, number]][];
95
+ /** Optional track name */
28
96
  trackName?: string;
97
+ /** Cached spatial index buckets for fast note lookup */
29
98
  private buckets?;
30
99
  constructor();
100
+ /**
101
+ * Creates a new SongNoteList from an array of note tuples.
102
+ * @param noteTuples - Array of [note, start, duration] tuples
103
+ * @returns A new SongNoteList containing the notes
104
+ * @example
105
+ * const song = SongNoteList.newSong([
106
+ * ["C4", 0, 1],
107
+ * ["D4", 1, 1],
108
+ * ])
109
+ */
31
110
  static newSong(noteTuples: [string, number, number][]): SongNoteList;
111
+ /**
112
+ * Creates a deep copy of this song (notes are cloned).
113
+ * @returns A new SongNoteList with cloned notes
114
+ */
32
115
  clone(): SongNoteList;
116
+ /**
117
+ * Clears the spatial index cache. Call this after modifying notes.
118
+ */
33
119
  clearCache(): void;
120
+ /**
121
+ * Creates a new song with all notes and key signatures transposed.
122
+ * Uses circle of fifths for key signature transposition.
123
+ * Returns `this` if amount is 0.
124
+ * @param amount - Number of semitones to transpose (positive = up, negative = down)
125
+ * @returns A new SongNoteList with transposed notes, or `this` if amount is 0
126
+ * @example
127
+ * const song = parser.compile(parser.parse("ks0 c d e"))
128
+ * const transposed = song.transpose(1) // Transposes to Db major
129
+ * // transposed.metadata.keySignature === -5
130
+ */
34
131
  transpose(amount?: number): SongNoteList;
132
+ /**
133
+ * Transposes notes from this song into the target song.
134
+ * Override in subclasses for custom note handling (e.g., multi-track).
135
+ * @param target - The song to add transposed notes to
136
+ * @param amount - Number of semitones to transpose
137
+ */
138
+ protected transposeNotesInto(target: SongNoteList, amount: number): void;
139
+ /**
140
+ * Finds all notes that overlap with a time range.
141
+ * @param start - Start of the range in beats
142
+ * @param stop - End of the range in beats
143
+ * @returns Array of notes that overlap with the range
144
+ */
35
145
  notesInRange(start: number, stop: number): SongNote[];
146
+ /**
147
+ * Finds indices of notes whose source location overlaps with a text selection.
148
+ * Used for editor features like transposition of selected notes.
149
+ * @param start - Start offset in source text
150
+ * @param end - End offset in source text
151
+ * @returns Set of note indices that overlap with the selection
152
+ */
36
153
  findNotesForSelection(start: number, end: number): Set<number>;
154
+ /**
155
+ * Finds key signatures whose source location overlaps with a text selection.
156
+ * Used for editor features like transposition of selected key signatures.
157
+ * @param start - Start offset in source text
158
+ * @param end - End offset in source text
159
+ * @returns Array of key signature entries that overlap with the selection
160
+ */
161
+ findKeySignaturesForSelection(start: number, end: number): [number, number, [number, number]][];
162
+ /**
163
+ * Returns the end position of the last note in beats.
164
+ * @returns End position in beats, or 0 if empty
165
+ */
37
166
  getStopInBeats(): number;
167
+ /**
168
+ * Returns the start position of the first note in beats.
169
+ * @returns Start position in beats, or 0 if empty
170
+ */
38
171
  getStartInBeats(): number;
172
+ /**
173
+ * Calculates measure boundaries based on time signatures.
174
+ * @returns Array of measure objects with start position and beat count
175
+ */
39
176
  getMeasures(): {
40
177
  start: number;
41
178
  beats: number;
42
179
  }[];
180
+ /**
181
+ * Returns the pitch range of all notes in the song.
182
+ * @returns Tuple of [lowest, highest] note names, or undefined if empty
183
+ */
43
184
  noteRange(): [string, string] | undefined;
185
+ /**
186
+ * Determines the best staff type for displaying this song.
187
+ * @returns "treble", "bass", or "grand" based on note range and clef settings
188
+ */
44
189
  fittingStaff(): "treble" | "bass" | "grand";
190
+ /** Calculates the bucket range for a time span. */
45
191
  private getBucketRange;
192
+ /** Builds the spatial index buckets for fast note lookup. */
46
193
  private buildBuckets;
194
+ /** Gets the buckets to scan when matching notes near a beat. */
47
195
  private adjacentBuckets;
196
+ /** Gets or builds the spatial index buckets. */
48
197
  private getBuckets;
198
+ /**
199
+ * Finds the note closest to a beat position using spatial indexing.
200
+ * Faster than matchNote for large songs.
201
+ * @param findNote - Note name to search for (e.g., "C4")
202
+ * @param beat - Beat position to search near
203
+ * @param wrapRight - Optional right boundary for wrap-around search
204
+ * @param wrapLeft - Optional left boundary for wrap-around search
205
+ * @returns Index of the matching note, or null if not found
206
+ */
49
207
  matchNoteFast(findNote: string, beat: number, wrapRight?: number, wrapLeft?: number): number | null;
208
+ /**
209
+ * Finds the note closest to a beat position using linear search.
210
+ * Use matchNoteFast for better performance on large songs.
211
+ * @param findNote - Note name to search for (e.g., "C4")
212
+ * @param beat - Beat position to search near
213
+ * @returns Index of the matching note, or null if not found
214
+ */
50
215
  matchNote(findNote: string, beat: number): number | null;
51
216
  }
217
+ /**
218
+ * A song containing multiple tracks, where each track is a SongNoteList.
219
+ * Notes are stored both in the main list and in their respective tracks.
220
+ * @example
221
+ * const song = new MultiTrackSong()
222
+ * song.pushWithTrack(new SongNote("C4", 0, 1), 0) // Track 0
223
+ * song.pushWithTrack(new SongNote("E4", 0, 1), 1) // Track 1
224
+ */
52
225
  export declare class MultiTrackSong extends SongNoteList {
226
+ /** Array of individual tracks */
53
227
  tracks: SongNoteList[];
54
228
  constructor();
229
+ /**
230
+ * Adds a note to both the main song and a specific track.
231
+ * @param note - The note to add
232
+ * @param trackIdx - The track index to add the note to
233
+ * @returns The added note
234
+ */
55
235
  pushWithTrack(note: SongNote, trackIdx: number): SongNote;
236
+ /**
237
+ * Finds an unused track index for auto-generated content like chords.
238
+ * @returns The next available track index
239
+ */
56
240
  findEmptyTrackIdx(): number;
241
+ /**
242
+ * Gets a track by index, creating it if it doesn't exist.
243
+ * @param idx - The track index
244
+ * @returns The SongNoteList for the track
245
+ */
57
246
  getTrack(idx: number): SongNoteList;
247
+ /**
248
+ * Transposes notes from this song into the target song, handling tracks.
249
+ * Notes are transposed per-track and added to both the track and main list.
250
+ * @param target - The MultiTrackSong to add transposed notes to
251
+ * @param amount - Number of semitones to transpose
252
+ */
253
+ protected transposeNotesInto(target: SongNoteList, amount: number): void;
58
254
  }
59
255
  //# sourceMappingURL=song.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"song.d.ts","sourceRoot":"","sources":["../src/song.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"song.d.ts","sourceRoot":"","sources":["../src/song.ts"],"names":[],"mappings":"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"}