import { Player } from 'tone/build/esm/source/buffer/Player';
export type OnBeforePlayCallback = (offset: number) => void;
export type OnPlaySuccessCallback = () => void;
export type OnPlayErrorCallback = (err: unknown) => void;
export type OnStopCallback = () => void;
export interface PlayerCallbacks {
    onBeforePlay?: Set<OnBeforePlayCallback>;
    onPlaySuccess?: Set<OnPlaySuccessCallback>;
    onPlayError?: Set<OnPlayErrorCallback>;
    onStop?: Set<OnStopCallback>;
}
export type PlayerEventName = 'onBeforePlay' | 'onPlaySuccess' | 'onPlayError' | 'onStop';
type CallbackByEventNameGeneric = {
    [key in PlayerEventName]: OnBeforePlayCallback | OnPlaySuccessCallback | OnPlayErrorCallback | OnStopCallback;
};
export interface CallbackByEventName extends CallbackByEventNameGeneric {
    onBeforePlay: OnBeforePlayCallback;
    onPlaySuccess: OnPlaySuccessCallback;
    onPlayError: OnPlayErrorCallback;
    onStop: OnStopCallback;
}
export declare class AudioPlayerCallbacksManagerClass {
    private static _instance;
    private constructor();
    static instance(): AudioPlayerCallbacksManagerClass;
    private _callbacksByPlayer;
    registerPlayer(player: Player): void;
    deregisterPlayer(player: Player): void;
    onBeforePlay(player: Player, callback: OnBeforePlayCallback): void;
    removeOnBeforePlay(player: Player, callback: OnStopCallback): void;
    runOnBeforePlayCallbacks(player: Player, offset: number): void;
    onPlaySuccess(player: Player, callback: OnPlaySuccessCallback): void;
    removeOnPlaySuccess(player: Player, callback: OnStopCallback): void;
    runOnPlaySuccessCallbacks(player: Player): void;
    onPlayError(player: Player, callback: OnPlayErrorCallback): void;
    removeOnPlayError(player: Player, callback: OnStopCallback): void;
    runOnPlayErrorCallbacks(player: Player, err: unknown): void;
    onStop(player: Player, callback: OnStopCallback): void;
    removeOnStop(player: Player, callback: OnStopCallback): void;
    runOnStopCallbacks(player: Player): void;
    private _on;
    private _removeCallback;
}
export declare const AudioPlayerCallbacksManager: AudioPlayerCallbacksManagerClass;
export {};
