UNPKG

wave-roll

Version:

JavaScript Library for Comparative MIDI Piano-Roll Visualization

75 lines 2.39 kB
/** * Loop Manager * Handles A-B loop functionality for audio playback */ import { AudioPlayerState } from "../player-types"; export declare class LoopManager { private _loopStartVisual; private _loopEndVisual; private _loopCounter; private originalTempo; get loopStartTransport(): number | null; constructor(originalTempo: number); /** * Get current loop start point in visual time */ get loopStartVisual(): number | null; /** * Get current loop end point in visual time */ get loopEndVisual(): number | null; /** * Check if custom loop is active */ hasCustomLoop(): boolean; /** * Set custom A-B loop points (in seconds). * Passing `null` for both parameters clears the loop. * If only `start` is provided, the loop will extend to the end of the piece. */ setLoopPoints(start: number | null, end: number | null, duration: number, state: AudioPlayerState): { changed: boolean; transportStart: number; transportEnd: number; shouldPreservePosition: boolean; }; /** * Configure transport for looping */ configureTransportLoop(enabled: boolean, state: AudioPlayerState, duration: number): void; /** * Handle transport loop event */ handleLoopEvent(): number; /** * Get offset for Part start based on current position and loop * Note: This is only used for A-B loops. Without loops, use visual time directly. */ getPartOffset(currentTime: number, pausedTime: number): number; /** * Filter notes for loop window */ filterNotesForLoop<T extends { time: number; duration: number; }>(notes: T[]): T[]; /** * Adjust note time relative to loop start */ adjustNoteTimeForLoop(noteTime: number): number; /** * Reset loop counter */ resetCounter(): void; /** * Update original tempo reference */ updateOriginalTempo(tempo: number): void; /** * Adjust current A-B loop visual positions when tempo changes, so that * their underlying transport positions remain anchored. This effectively * rescales visual loop points by (newTempo / oldTempo). */ rescaleLoopForTempoChange(oldTempo: number, newTempo: number, duration: number): void; } //# sourceMappingURL=loop-manager.d.ts.map