@coderline/alphatab 1.8.1 → 1.8.3

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.
@@ -105,15 +105,12 @@ declare class AlphaSynth extends AlphaSynthBase {
105
105
  * @public
106
106
  */
107
107
  declare class AlphaSynthBase implements IAlphaSynth {
108
-
109
-
110
108
  protected isSoundFontLoaded: boolean;
111
109
  private _isMidiLoaded;
112
110
  private _tickPosition;
113
111
  private _timePosition;
114
112
  private _metronomeVolume;
115
113
  private _countInVolume;
116
-
117
114
  protected midiEventsPlayedFilterSet: Set<MidiEventType>;
118
115
  private _notPlayedSamples;
119
116
  private _synthStopping;
@@ -149,7 +146,6 @@ declare class AlphaSynthBase implements IAlphaSynth {
149
146
  get isLooping(): boolean;
150
147
  set isLooping(value: boolean);
151
148
  destroy(): void;
152
-
153
149
  protected onSampleRequest(): void;
154
150
  play(): boolean;
155
151
  private _playInternal;
@@ -203,8 +199,6 @@ declare class AlphaSynthBase implements IAlphaSynth {
203
199
  * @lateinit
204
200
  */
205
201
  readonly playbackRangeChanged: IEventEmitterOfT<PlaybackRangeChangedEventArgs>;
206
-
207
-
208
202
  loadBackingTrack(_score: Score): void;
209
203
  updateSyncPoints(_syncPoints: BackingTrackSyncPoint[]): void;
210
204
  }
@@ -697,7 +691,6 @@ export declare class AlphaTabApiBase<TSettings> {
697
691
  */
698
692
  renderTracks(tracks: Track[], renderHints?: RenderHints): void;
699
693
  private _internalRenderTracks;
700
-
701
694
  private _appendRenderResult;
702
695
  private _updateRenderResult;
703
696
  /**
@@ -2508,7 +2501,6 @@ export declare class AlphaTabApiBase<TSettings> {
2508
2501
  *
2509
2502
  */
2510
2503
  readonly error: IEventEmitterOfT<Error>;
2511
-
2512
2504
  /**
2513
2505
  * This event is fired when all required data for playback is loaded and ready.
2514
2506
  * @remarks
@@ -3287,7 +3279,6 @@ declare interface AlphaTexArgumentList extends AlphaTexAstNode {
3287
3279
  * The close parenthesis token grouping the arguments.
3288
3280
  */
3289
3281
  closeParenthesis?: AlphaTexParenthesisCloseTokenNode;
3290
-
3291
3282
  /**
3292
3283
  * A list of indices to signatures which were selected as candidates matching
3293
3284
  * this argument list.
@@ -3763,7 +3754,6 @@ declare class AlphaTexImporter extends ScoreImporter implements IAlphaTexImporte
3763
3754
  private _beatDuration;
3764
3755
  private _parseDuration;
3765
3756
  private _note;
3766
-
3767
3757
  applyStaffNoteKind(staff: Staff, staffNoteKind: AlphaTexStaffNoteKind): void;
3768
3758
  private _noteEffects;
3769
3759
  private _handleTransposition;
@@ -3838,7 +3828,6 @@ declare interface AlphaTexMetaDataNode extends AlphaTexAstNode {
3838
3828
  * The optional properties defined for the metadata.
3839
3829
  */
3840
3830
  properties?: AlphaTexPropertiesNode;
3841
-
3842
3831
  }
3843
3832
 
3844
3833
  /**
@@ -4003,7 +3992,6 @@ declare class AlphaTexParser {
4003
3992
  get lexerDiagnostics(): AlphaTexDiagnosticBag;
4004
3993
  readonly parserDiagnostics: AlphaTexDiagnosticBag;
4005
3994
  addParserDiagnostic(diagnostics: AlphaTexDiagnostic): void;
4006
-
4007
3995
  constructor(source: string);
4008
3996
  read(): AlphaTexScoreNode;
4009
3997
  private _score;
@@ -4408,7 +4396,6 @@ declare class BackingTrackSyncPoint {
4408
4396
  */
4409
4397
  declare class Bar {
4410
4398
  private static _globalBarId;
4411
-
4412
4399
  /**
4413
4400
  * Gets or sets the unique id of this bar.
4414
4401
  */
@@ -4520,7 +4507,6 @@ declare class Bar {
4520
4507
  * If specified, overrides the value from the stylesheet on score level.
4521
4508
  */
4522
4509
  barNumberDisplay?: BarNumberDisplay;
4523
-
4524
4510
  /**
4525
4511
  * The bar line to draw on the left side of the bar with an "automatic" type resolved to the actual one.
4526
4512
  * @param isFirstOfSystem Whether the bar is the first one in the system.
@@ -4787,12 +4773,6 @@ declare class BeamingRules {
4787
4773
  * The map value defines the "groups" placed within the sliced.
4788
4774
  */
4789
4775
  groups: Map<Duration, number[]>;
4790
-
4791
-
4792
-
4793
-
4794
-
4795
-
4796
4776
  }
4797
4777
 
4798
4778
  /**
@@ -4805,7 +4785,6 @@ declare class BeamingRules {
4805
4785
  */
4806
4786
  declare class Beat {
4807
4787
  private static _globalBeatId;
4808
-
4809
4788
  /**
4810
4789
  * Gets or sets the unique id of this beat.
4811
4790
  * @clone_ignore
@@ -5582,22 +5561,10 @@ declare class Bounds {
5582
5561
  * @public
5583
5562
  */
5584
5563
  declare class BoundsLookup {
5585
- /**
5586
- * @target web
5587
- */
5588
- toJson(): unknown;
5589
- /**
5590
- * @target web
5591
- */
5592
- static fromJson(json: unknown, score: Score): BoundsLookup;
5593
- /**
5594
- * @target web
5595
- */
5564
+ toJson(): Map<string, unknown>;
5565
+ static fromJson(json: Map<string, unknown> | null, score: Score): BoundsLookup | null;
5596
5566
  private static _boundsFromJson;
5597
- /**
5598
- * @target web
5599
- */
5600
- private _boundsToJson;
5567
+ private static _boundsToJson;
5601
5568
  private _beatLookup;
5602
5569
  private _masterBarLookup;
5603
5570
  private _currentStaffSystem;
@@ -6760,9 +6727,16 @@ export declare class DisplaySettings {
6760
6727
  *
6761
6728
  * The page layout does not use `displayWidth`. The use of absolute widths would break the proper alignments needed for this kind of display.
6762
6729
  *
6763
- * Also note that the sizing is including any glyphs and notation elements within the bar. e.g. if there are clefs in the bar, they are still "squeezed" into the available size.
6764
- * It is not the case that the actual notes with their lengths are sized accordingly. This fits the sizing system of Guitar Pro and when files are customized there,
6765
- * alphaTab will match this layout quite close.
6730
+ * In both modes, prefix and postfix glyphs (clef, key signature, time signature, barlines) are treated as fixed overhead: they keep their
6731
+ * natural size and the remaining staff width is distributed across bars by a per-bar weight. This matches the convention used by
6732
+ * Guitar Pro, Dorico, Finale, Sibelius and MuseScore. Bars that carry a system-start prefix or a mid-line clef/key/time-signature change
6733
+ * are therefore visibly wider than plain bars with the same weight. The weight source depends on the mode:
6734
+ *
6735
+ * * `Automatic` (default for `page` layout): weights come from the built-in spacing engine (the natural content width of each bar).
6736
+ * `displayScale` on the model is ignored.
6737
+ * * `UseModelLayout` (and the `parchment` layout): weights come from `bar.displayScale` / `masterBar.displayScale`. An unset
6738
+ * `displayScale` defaults to `1` and behaves identically to an explicit `1`, matching Guitar Pro (which omits the value when the
6739
+ * author hasn't customized it).
6766
6740
  *
6767
6741
  * ### Horizontal Layout
6768
6742
  *
@@ -7119,9 +7093,16 @@ declare interface DisplaySettingsJson {
7119
7093
  *
7120
7094
  * The page layout does not use `displayWidth`. The use of absolute widths would break the proper alignments needed for this kind of display.
7121
7095
  *
7122
- * Also note that the sizing is including any glyphs and notation elements within the bar. e.g. if there are clefs in the bar, they are still "squeezed" into the available size.
7123
- * It is not the case that the actual notes with their lengths are sized accordingly. This fits the sizing system of Guitar Pro and when files are customized there,
7124
- * alphaTab will match this layout quite close.
7096
+ * In both modes, prefix and postfix glyphs (clef, key signature, time signature, barlines) are treated as fixed overhead: they keep their
7097
+ * natural size and the remaining staff width is distributed across bars by a per-bar weight. This matches the convention used by
7098
+ * Guitar Pro, Dorico, Finale, Sibelius and MuseScore. Bars that carry a system-start prefix or a mid-line clef/key/time-signature change
7099
+ * are therefore visibly wider than plain bars with the same weight. The weight source depends on the mode:
7100
+ *
7101
+ * * `Automatic` (default for `page` layout): weights come from the built-in spacing engine (the natural content width of each bar).
7102
+ * `displayScale` on the model is ignored.
7103
+ * * `UseModelLayout` (and the `parchment` layout): weights come from `bar.displayScale` / `masterBar.displayScale`. An unset
7104
+ * `displayScale` defaults to `1` and behaves identically to an explicit `1`, matching Guitar Pro (which omits the value when the
7105
+ * author hasn't customized it).
7125
7106
  *
7126
7107
  * ### Horizontal Layout
7127
7108
  *
@@ -7291,6 +7272,14 @@ declare class ElementStyle<TSubElements extends number> {
7291
7272
  colors: Map<TSubElements, Color | null>;
7292
7273
  }
7293
7274
 
7275
+ /**
7276
+ * Thrown whenever we hit the end of input data unexpectedly.
7277
+ * @public
7278
+ */
7279
+ declare class EndOfReaderError extends AlphaTabError {
7280
+ constructor();
7281
+ }
7282
+
7294
7283
  /**
7295
7284
  * Represents the end of the track indicating that no more events for this track follow.
7296
7285
  * @public
@@ -7325,7 +7314,6 @@ declare class EndOfTrackEvent extends MidiEvent {
7325
7314
  */
7326
7315
  export declare class EngravingSettings {
7327
7316
  private static _bravuraDefaults?;
7328
-
7329
7317
  /**
7330
7318
  * A {@link EngravingSettings} copy filled with the settings of the Bravura font used by default in alphaTab.
7331
7319
  */
@@ -7505,14 +7493,12 @@ export declare class EngravingSettings {
7505
7493
  * @smufl 1.4
7506
7494
  */
7507
7495
  glyphHeights: Map<MusicFontSymbol, number>;
7508
-
7509
7496
  /**
7510
7497
  * Fills the engraving settings from the provided smufl metdata.
7511
7498
  * @param smufl The metadata shipped together with the SMuFL fonts.
7512
7499
  * @param musicFontSize The font size to configure in alphaTab for the music font.
7513
7500
  */
7514
7501
  fillFromSmufl(smufl: SmuflMetadata, musicFontSize?: number): void;
7515
-
7516
7502
  private static _smuflNameToMusicFontSymbol;
7517
7503
  /**
7518
7504
  * The size of the bars drawn in numbered notation to indicate the durations.
@@ -8174,12 +8160,10 @@ declare interface EngravingStemInfoJson {
8174
8160
  * @public
8175
8161
  */
8176
8162
  export declare class Environment {
8177
-
8178
8163
  /**
8179
8164
  * @target web
8180
8165
  */
8181
8166
  private static _globalThis;
8182
-
8183
8167
  /**
8184
8168
  * @target web
8185
8169
  */
@@ -8208,18 +8192,10 @@ export declare class Environment {
8208
8192
  * @target web
8209
8193
  */
8210
8194
  static get isRunningInAudioWorklet(): boolean;
8211
-
8212
-
8213
- /**
8214
- * @target web
8215
- * @partial
8216
- */
8217
- static throttle(action: () => void, delay: number): () => void;
8218
8195
  /**
8219
8196
  * @target web
8220
8197
  */
8221
8198
  private static _detectScriptFile;
8222
-
8223
8199
  private static _appendScriptName;
8224
8200
  /**
8225
8201
  * @target web
@@ -8230,10 +8206,7 @@ export declare class Environment {
8230
8206
  */
8231
8207
  private static _registerJQueryPlugin;
8232
8208
  static readonly renderEngines: Map<string, RenderEngineFactory>;
8233
-
8234
-
8235
8209
  static getRenderEngineFactory(engine: string): RenderEngineFactory;
8236
-
8237
8210
  /**
8238
8211
  * Gets all default ScoreImporters
8239
8212
  * @returns
@@ -8257,15 +8230,12 @@ export declare class Environment {
8257
8230
  * @partial
8258
8231
  */
8259
8232
  private static _createPlatformSpecificRenderEngines;
8260
-
8261
8233
  private static _createDefaultStaveProfiles;
8262
8234
  private static _createDefaultLayoutEngines;
8263
8235
  /**
8264
8236
  * @target web
8265
8237
  */
8266
- static initializeMain(createWebWorker: (settings: Settings) => Worker, createAudioWorklet: (context: AudioContext, settings: Settings) => Promise<void>): void;
8267
-
8268
-
8238
+ static initializeMain(createWebWorker: (settings: Settings, nameHint: string) => Worker, createAudioWorklet: (context: AudioContext, settings: Settings) => Promise<void>): void;
8269
8239
  /**
8270
8240
  * @target web
8271
8241
  */
@@ -8296,9 +8266,6 @@ export declare class Environment {
8296
8266
  * @partial
8297
8267
  */
8298
8268
  private static _printPlatformInfo;
8299
-
8300
-
8301
-
8302
8269
  }
8303
8270
 
8304
8271
  export declare namespace exporter {
@@ -9172,6 +9139,7 @@ declare interface IAudioExporter extends Disposable {
9172
9139
  * slightly longer audio is contained in the result.
9173
9140
  *
9174
9141
  * When the song ends, the chunk might contain less than the requested duration.
9142
+ * @async
9175
9143
  */
9176
9144
  render(milliseconds: number): Promise<AudioExportChunk | undefined>;
9177
9145
  destroy(): void;
@@ -9190,6 +9158,7 @@ declare interface IAudioExporterWorker extends IAudioExporter {
9190
9158
  * @param midi The midi file to load
9191
9159
  * @param syncPoints The sync points of the song (if any)
9192
9160
  * @param transpositionPitches The initial transposition pitches for the midi file.
9161
+ * @async
9193
9162
  */
9194
9163
  initialize(options: AudioExportOptions, midi: MidiFile, syncPoints: BackingTrackSyncPoint[], transpositionPitches: Map<number, number>): Promise<void>;
9195
9164
  }
@@ -9684,6 +9653,17 @@ export declare class ImporterSettings {
9684
9653
  * ![Disabled](https://alphatab.net/img/reference/property/beattextaslyrics-disabled.png)
9685
9654
  */
9686
9655
  beatTextAsLyrics: boolean;
9656
+ /**
9657
+ * This setting controls the escape hatch for handling potentially malicous or corrupt
9658
+ * input files. At selected spots in the codebase, we use this buffer size as maximum
9659
+ * allowed sizes. e.g. during unzipping or decoding strings.
9660
+ * This prevents resource exhaustion, especially when alphaTab is used on server side.
9661
+ * Increase this buffer size if you need to handle very big files.
9662
+ * @defaultValue `128000000`
9663
+ * @category Core
9664
+ * @since 1.9.0
9665
+ */
9666
+ maxDecodingBufferSize: number;
9687
9667
  }
9688
9668
 
9689
9669
  /**
@@ -9750,6 +9730,17 @@ declare interface ImporterSettingsJson {
9750
9730
  * ![Disabled](https://alphatab.net/img/reference/property/beattextaslyrics-disabled.png)
9751
9731
  */
9752
9732
  beatTextAsLyrics?: boolean;
9733
+ /**
9734
+ * This setting controls the escape hatch for handling potentially malicous or corrupt
9735
+ * input files. At selected spots in the codebase, we use this buffer size as maximum
9736
+ * allowed sizes. e.g. during unzipping or decoding strings.
9737
+ * This prevents resource exhaustion, especially when alphaTab is used on server side.
9738
+ * Increase this buffer size if you need to handle very big files.
9739
+ * @defaultValue `128000000`
9740
+ * @category Core
9741
+ * @since 1.9.0
9742
+ */
9743
+ maxDecodingBufferSize?: number;
9753
9744
  }
9754
9745
 
9755
9746
  /**
@@ -9807,7 +9798,6 @@ declare class InstrumentArticulation {
9807
9798
  */
9808
9799
  outputMidiNumber: number;
9809
9800
  constructor(elementType?: string, staffLine?: number, outputMidiNumber?: number, noteHeadDefault?: MusicFontSymbol, noteHeadHalf?: MusicFontSymbol, noteHeadWhole?: MusicFontSymbol, techniqueSymbol?: MusicFontSymbol, techniqueSymbolPlacement?: TechniqueSymbolPlacement, id?: number);
9810
-
9811
9801
  getSymbol(duration: Duration): MusicFontSymbol;
9812
9802
  }
9813
9803
 
@@ -9815,6 +9805,8 @@ export declare namespace io {
9815
9805
  export {
9816
9806
  IWriteable,
9817
9807
  IReadable,
9808
+ OverflowError,
9809
+ EndOfReaderError,
9818
9810
  ByteBuffer,
9819
9811
  IOHelper
9820
9812
  }
@@ -10279,6 +10271,18 @@ declare interface IUiFacade<TSettings> {
10279
10271
  * @param action
10280
10272
  */
10281
10273
  beginInvoke(action: () => void): void;
10274
+ /**
10275
+ * Creates a throttled/debounced version of the provided action.
10276
+ * @param action The action to call.
10277
+ * @param delay The delay to wait for additional call before actually executing.
10278
+ * @returns A function which executes the provided action after the given delay.
10279
+ * If multiple calls are made before the action is started, the already scheduled
10280
+ * action is cancelled and a new one is scheduled after the given delay.
10281
+ * If called endlessly, the action is never executed.
10282
+ *
10283
+ * Already executing actions will not be cancelled but will complete before another action executes.
10284
+ */
10285
+ throttle(action: () => void, delay: number): () => void;
10282
10286
  /**
10283
10287
  * Tells the UI layer to remove all highlights from highlighted music notation elements.
10284
10288
  */
@@ -10433,7 +10437,7 @@ declare class JsonConverter {
10433
10437
  * @param score The score object to serialize
10434
10438
  * @returns A serialized score object without ciruclar dependencies that can be used for further serializations.
10435
10439
  */
10436
- static scoreToJsObject(score: Score): unknown;
10440
+ static scoreToJsObject(score: Score): Map<string, unknown> | null;
10437
10441
  /**
10438
10442
  * Converts the given JavaScript object into a score object.
10439
10443
  * @param jsObject The javascript object created via {@link Score}
@@ -10791,7 +10795,6 @@ declare class MasterBar {
10791
10795
  * Defines the custom beaming rules which should be applied to this bar and all bars following.
10792
10796
  */
10793
10797
  beamingRules?: BeamingRules;
10794
-
10795
10798
  /**
10796
10799
  * Gets or sets whether the bar indicates a free time playing.
10797
10800
  */
@@ -11357,7 +11360,6 @@ declare class MidiFileGenerator {
11357
11360
  * @returns The generated sync points for usage in the backing track playback.
11358
11361
  */
11359
11362
  static generateSyncPoints(score: Score, createNew?: boolean): BackingTrackSyncPoint[];
11360
-
11361
11363
  private static _playThroughSong;
11362
11364
  private static _processBarTime;
11363
11365
  private static _processBarTimeWithNewSyncPoints;
@@ -11476,7 +11478,6 @@ declare class MidiFileGenerator {
11476
11478
  */
11477
11479
  declare class MidiTickLookup {
11478
11480
  private _currentMasterBar;
11479
-
11480
11481
  /**
11481
11482
  * A list of all {@link MasterBarTickLookup} sorted by time.
11482
11483
  */
@@ -11546,6 +11547,12 @@ declare class MidiTickLookup {
11546
11547
  * @returns The time in midi ticks at which the beat is played the first time or 0 if the beat is not contained
11547
11548
  */
11548
11549
  getBeatStart(beat: Beat): number;
11550
+ /**
11551
+ * Gets the playback range in midi ticks for a given beat.
11552
+ * @param beat The beat to find the time period for.
11553
+ * @returns The relative playback range within the parent masterbar at which the beat start and ends playing
11554
+ */
11555
+ getRelativeBeatPlaybackRange(beat: Beat): PlaybackRange | undefined;
11549
11556
  /**
11550
11557
  * Adds a new {@link MasterBarTickLookup} to the lookup table.
11551
11558
  * @param masterBar The item to add.
@@ -12263,7 +12270,15 @@ export declare enum NotationElement {
12263
12270
  /**
12264
12271
  * The slurs shown on bend effects within the score staff.
12265
12272
  */
12266
- ScoreBendSlur = 55
12273
+ ScoreBendSlur = 55,
12274
+ /**
12275
+ * The hammer-on pull-off text shown on slurs.
12276
+ */
12277
+ EffectHammerOnPullOffText = 56,
12278
+ /**
12279
+ * The slide text shown on slurs.
12280
+ */
12281
+ EffectSlideText = 57
12267
12282
  }
12268
12283
 
12269
12284
  /**
@@ -12730,8 +12745,6 @@ declare interface NotationSettingsJson {
12730
12745
  * @public
12731
12746
  */
12732
12747
  declare class Note {
12733
-
12734
-
12735
12748
  /**
12736
12749
  * Gets or sets the unique id of this note.
12737
12750
  * @clone_ignore
@@ -13132,8 +13145,6 @@ declare class Note {
13132
13145
  private static _noteIdLookupKey;
13133
13146
  private _noteIdBag;
13134
13147
  chain(sharedDataBag?: Map<string, unknown> | null): void;
13135
-
13136
-
13137
13148
  }
13138
13149
 
13139
13150
  /**
@@ -13367,6 +13378,14 @@ declare enum Ottavia {
13367
13378
  _15mb = 4
13368
13379
  }
13369
13380
 
13381
+ /**
13382
+ * Thrown whenever an overflow in data or buffer sizes is detected.
13383
+ * @public
13384
+ */
13385
+ declare class OverflowError extends AlphaTabError {
13386
+ constructor(message: string);
13387
+ }
13388
+
13370
13389
  /**
13371
13390
  * Lists all types of pick strokes.
13372
13391
  * @public
@@ -14350,6 +14369,13 @@ declare interface RenderHints {
14350
14369
  * internally it might still be decided to clear the viewport.
14351
14370
  */
14352
14371
  reuseViewport?: boolean;
14372
+ /**
14373
+ * Indicates the index of the first masterbar which was modified in the data model.
14374
+ * @remarks
14375
+ * AlphaTab will try to optimize the rendering and other updates to keep unchanged parts.
14376
+ * At this point only the rendering is affected and the generated MIDI has to be updated separately.
14377
+ */
14378
+ firstChangedMasterBar?: number;
14353
14379
  }
14354
14380
 
14355
14381
  export declare namespace rendering {
@@ -14383,7 +14409,6 @@ export declare class RenderingResources {
14383
14409
  * The default fonts for notation elements if not specified by the user.
14384
14410
  */
14385
14411
  static defaultFonts: Map<NotationElement, Font>;
14386
-
14387
14412
  /**
14388
14413
  * The SMuFL Metrics to use for rendering music symbols.
14389
14414
  * @defaultValue `alphaTab`
@@ -14580,7 +14605,6 @@ export declare class RenderingResources {
14580
14605
  */
14581
14606
  scoreInfoColor: Color;
14582
14607
  constructor();
14583
-
14584
14608
  }
14585
14609
 
14586
14610
  /**
@@ -14591,7 +14615,6 @@ export declare class RenderingResources {
14591
14615
  * @target web
14592
14616
  */
14593
14617
  declare interface RenderingResourcesJson {
14594
-
14595
14618
  /**
14596
14619
  * The SMuFL Metrics to use for rendering music symbols.
14597
14620
  * @defaultValue `alphaTab`
@@ -15049,7 +15072,6 @@ declare class ScoreRenderer implements IScoreRenderer {
15049
15072
  canvas: ICanvas | null;
15050
15073
  score: Score | null;
15051
15074
  tracks: Track[] | null;
15052
-
15053
15075
  settings: Settings;
15054
15076
  boundsLookup: BoundsLookup | null;
15055
15077
  width: number;
@@ -15238,7 +15260,6 @@ export declare class Settings {
15238
15260
  * @target web
15239
15261
  */
15240
15262
  fillFromJson(json: SettingsJson): void;
15241
-
15242
15263
  }
15243
15264
 
15244
15265
  /**
@@ -15637,7 +15658,14 @@ declare class StaffSystemBounds {
15637
15658
  */
15638
15659
  boundsLookup: BoundsLookup;
15639
15660
  /**
15640
- * Finished the lookup for optimized access.
15661
+ * Whether this system's bounds have already been scaled via `finish`. Prevents double-scaling
15662
+ * when the parent `BoundsLookup` is preserved across partial renders and `finish` is invoked
15663
+ * again on a mix of already-scaled (preserved) and newly-registered (natural-coordinate) systems.
15664
+ */
15665
+ isFinished: boolean;
15666
+ /**
15667
+ * Finished the lookup for optimized access. Idempotent: once finished, further calls are no-ops
15668
+ * so preserved systems survive partial renders without being re-scaled.
15641
15669
  */
15642
15670
  finish(scale?: number): void;
15643
15671
  /**
@@ -16160,7 +16188,6 @@ declare class TremoloPickingEffect {
16160
16188
  * The style of the tremolo picking.
16161
16189
  */
16162
16190
  style: TremoloPickingStyle;
16163
-
16164
16191
  /**
16165
16192
  * Gets the duration of a single tremolo note played in a beat of the given duration
16166
16193
  * based on the configured marks.
@@ -16454,7 +16481,6 @@ declare class Voice {
16454
16481
  private _isEmpty;
16455
16482
  private _isRestOnly;
16456
16483
  private static _globalVoiceId;
16457
-
16458
16484
  /**
16459
16485
  * Gets or sets the unique id of this bar.
16460
16486
  */
@@ -16482,12 +16508,10 @@ declare class Voice {
16482
16508
  * The style customizations for this item.
16483
16509
  */
16484
16510
  style?: VoiceStyle;
16485
-
16486
16511
  /**
16487
16512
  * Gets or sets a value indicating whether this voice is empty.
16488
16513
  */
16489
16514
  get isRestOnly(): boolean;
16490
-
16491
16515
  insertBeat(after: Beat, newBeat: Beat): void;
16492
16516
  addBeat(beat: Beat): void;
16493
16517
  private _chain;