import { DebugMessage } from './messages';
export type { DebugMessage };
export { formatDebugMessage } from './messages';
/**
 * Enable or disable global debug mode.
 *
 * When enabled, all sounds will log lifecycle events (play, stop, end),
 * connection changes, and warnings (like suspended AudioContext).
 *
 * @param enabled - Whether to enable debug mode
 *
 * @example
 * setDebugMode(true)
 * await sound.play() // Logs: [ez-audio:event] [0.000] mySound: play
 */
export declare function setDebugMode(enabled: boolean): void;
/**
 * Set a custom debug handler.
 *
 * Pass null to restore the default console.log handler.
 *
 * @param handler - Custom handler function, or null for default
 *
 * @example
 * const messages: DebugMessage[] = []
 * setDebugHandler((msg) => messages.push(msg))
 * // ... run code ...
 * console.log(messages) // All debug messages captured
 */
export declare function setDebugHandler(handler: ((msg: DebugMessage) => void) | null): void;
/**
 * Interface for objects that can be logged (Sound, Oscillator, etc.)
 */
export interface DebugSource {
    name?: string;
    debug?: boolean;
}
/**
 * Main logging function - short-circuits immediately when debug disabled.
 *
 * @param source - The sound or object emitting the message
 * @param message - The debug message (without source, which is derived)
 *
 * @example
 * debugLog(this, {
 *   type: 'event',
 *   message: 'play',
 *   timestamp: audioContext.currentTime
 * })
 */
export declare function debugLog(source: DebugSource, message: Omit<DebugMessage, 'source'> & {
    source?: string;
}): void;
/**
 * Log a lifecycle event (play, stop, end).
 *
 * @param source - The sound emitting the event
 * @param event - Event name (play, stop, end)
 * @param timestamp - audioContext.currentTime
 * @param details - Optional additional details
 */
export declare function debugEvent(source: DebugSource, event: string, timestamp: number, details?: Record<string, unknown>): void;
/**
 * Log a connection chain change.
 *
 * @param source - The sound with changed connections
 * @param message - Description of the change
 * @param timestamp - audioContext.currentTime
 * @param details - Optional additional details
 */
export declare function debugConnection(source: DebugSource, message: string, timestamp: number, details?: Record<string, unknown>): void;
/**
 * Log a warning (suspended AudioContext, etc.).
 *
 * @param source - The sound with the warning
 * @param message - Warning message
 * @param timestamp - audioContext.currentTime
 * @param details - Optional additional details
 */
export declare function debugWarning(source: DebugSource, message: string, timestamp: number, details?: Record<string, unknown>): void;
//# sourceMappingURL=index.d.ts.map