/**
 * MultiTracks is a super-plugin for creating a MultiTrack audio player.
 * Individual tracks are synced and played together.
 * They can be dragged to set their start position.
 * The top track is meant for dragging'n'dropping an additional track id (not a file).
 */
import { type WaveSurferOptions } from "wavesurfer.js";
import { type EnvelopePluginOptions } from "wavesurfer.js/dist/plugins/envelope.js";
import EventEmitter from "./event-emitter";
export type TrackId = string | number;
export type TrackOptions = {
    id: TrackId;
    container?: HTMLElement;
    url?: string;
    peaks?: WaveSurferOptions["peaks"];
    hideScrollbar: boolean;
    draggable?: boolean;
    startPosition: number;
    startCue?: number;
    endCue?: number;
    fadeInEnd?: number;
    fadeOutStart?: number;
    volume?: number;
    markers?: Array<{
        time: number;
        label?: string;
        color?: string;
    }>;
    intro?: {
        endTime: number;
        label?: string;
        color?: string;
    };
    options?: WaveSurferOptions;
};
export type MultiTracksOptions = {
    container?: HTMLElement;
    minPxPerSec?: number;
    cursorColor?: string;
    cursorWidth?: number;
    trackBackground?: string;
    trackBorderColor?: string;
    rightButtonDrag?: boolean;
    envelopeOptions?: EnvelopePluginOptions;
};
export type MultiTracksEvents = {
    canplay: [];
    "start-position-change": [{
        id: TrackId;
        startPosition: number;
    }];
    "start-cue-change": [{
        id: TrackId;
        startCue: number;
    }];
    "end-cue-change": [{
        id: TrackId;
        endCue: number;
    }];
    "fade-in-change": [{
        id: TrackId;
        fadeInEnd: number;
    }];
    "fade-out-change": [{
        id: TrackId;
        fadeOutStart: number;
    }];
    "volume-change": [{
        id: TrackId;
        volume: number;
    }];
    "intro-end-change": [{
        id: TrackId;
        endTime: number;
    }];
    drop: [{
        id: TrackId;
    }];
};
export type MultiTracksTracks = Array<TrackOptions>;
declare class MultiTracks extends EventEmitter<MultiTracksEvents> {
    private tracks;
    private options;
    private audios;
    private wavesurfers;
    private durations;
    private currentTime;
    private maxDuration;
    private rendering;
    private isDragging;
    private frameRequest;
    private timer;
    private subscriptions;
    private timeline;
    static create(tracks: MultiTracksTracks, options: MultiTracksOptions): MultiTracks;
    constructor(tracks: MultiTracksTracks, options: MultiTracksOptions);
    private initDurations;
    private initAudio;
    private initAllAudios;
    private initWavesurfer;
    private initAllWavesurfers;
    private initTimeline;
    private updatePosition;
    private setIsDragging;
    private onDrag;
    private findCurrentTracks;
    private startSync;
    play(): void;
    pause(): void;
    isPlaying(): boolean;
    getCurrentTime(): number;
    seekTo(time: number): void;
    /** Set time in seconds */
    setTime(time: number): void;
    zoom(pxPerSec: number): void;
    addTrack(track: TrackOptions): void;
    destroy(): void;
    setSinkId(sinkId: string): Promise<void[]>;
}
export default MultiTracks;
