/** * Sequencer.ts * * Music sequencer implementation for HoloScript with pattern-based * composition, multi-track support, and BPM-based timing. * * @module audio */ import { ISequencer, ISequence, IPattern, ITrack, INote, SequencerState, LoopMode, ISequencerState, IAudioContext, AudioEventType, AudioEventCallback } from './AudioTypes'; /** * HoloScript music sequencer implementation */ export declare class SequencerImpl implements ISequencer { private _state; private _bpm; private _swing; private _currentBeat; private _currentBar; private _currentPatternIndex; private _loopMode; private _loopStart; private _loopEnd; private _metronomeEnabled; private _countInBars; private _countingIn; private readonly context; private readonly sequences; private readonly patterns; private readonly tracks; private readonly scheduledNotes; private readonly eventListeners; private readonly triggerCallbacks; private currentSequenceId; private startTime; private pausedTime; private lastScheduledBeat; private scheduleAheadTime; private tickInterval; constructor(context: IAudioContext); load(sequence: ISequence): void; unload(): void; play(): void; start(): void; stop(): void; pause(): void; get state(): SequencerState; getState(): ISequencerState; get isPlaying(): boolean; dispose(): void; get bpm(): number; set bpm(value: number); get swing(): number; set swing(value: number); get currentBeat(): number; get currentBar(): number; get currentPatternIndex(): number; setBPM(bpm: number): void; getBPM(): number; get loopMode(): LoopMode; set loopMode(value: LoopMode); setLoop(enabled: boolean, startBeat?: number, endBeat?: number): void; get metronomeEnabled(): boolean; set metronomeEnabled(value: boolean); get countInBars(): number; set countInBars(value: number); get isCountingIn(): boolean; setLoopRange(start: number, end: number): void; getLoopRange(): { start: number; end: number; }; seek(beat: number, bar?: number): void; getPlaybackPosition(): { beat: number; bar: number; pattern: number; }; createSequence(config: ISequence): string; getSequence(id: string): ISequence | undefined; updateSequence(id: string, updates: Partial): void; removeSequence(id: string): boolean; loadSequence(id: string): boolean; getCurrentSequence(): ISequence | undefined; createPattern(config: IPattern): string; addPattern(pattern: IPattern): void; getPattern(id: string): IPattern | undefined; updatePattern(id: string, updates: Partial): void; removePattern(id: string): boolean; addNoteToPattern(patternId: string, note: INote): void; removeNoteFromPattern(patternId: string, noteIndex: number): void; scheduleNote(trackId: string, note: INote): void; quantize(beat: number, grid: number): number; quantizePattern(patternId: string, subdivision: number): void; createTrack(config: ITrack): string; getTrack(id: string): ITrack | undefined; updateTrack(id: string, updates: Partial): void; removeTrack(id: string): boolean; setTrackVolume(trackId: string, volume: number): void; setTrackMuted(trackId: string, muted: boolean): void; setTrackSolo(trackId: string, solo: boolean): void; onNoteTrigger(trackId: string, callback: (note: INote, time: number) => void): void; offNoteTrigger(trackId: string, callback: (note: INote, time: number) => void): void; on(event: AudioEventType, callback: AudioEventCallback): void; off(event: AudioEventType, callback: AudioEventCallback): void; beatsToSeconds(beats: number): number; secondsToBeats(seconds: number): number; barsToSeconds(bars: number): number; secondsToBars(seconds: number): number; getMidiFrequency(midiNote: number): number; getNoteToMidi(noteName: string): number; private getBeatsPerBar; private getCurrentPattern; private startScheduler; private stopScheduler; private schedulerTick; private scheduleNotes; private triggerScheduledNotes; private handleLooping; private playMetronome; private emit; } /** * Create a new sequencer instance */ export declare function createSequencer(context: IAudioContext): ISequencer; //# sourceMappingURL=Sequencer.d.ts.map