wave-roll
Version:
JavaScript Library for Comparative MIDI Piano-Roll Visualization
75 lines • 2.39 kB
TypeScript
/**
* 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