import { ServiceIdentifier } from '../../instantiation/common/instantiation.js';
import { IDisposable } from '../../../base/common/lifecycle.js';
import { Event } from '../../../base/common/event.js';

declare const IAccessibilitySignalService: ServiceIdentifier<IAccessibilitySignalService>;
interface IAccessibilitySignalService {
    readonly _serviceBrand: undefined;
    playSignal(signal: AccessibilitySignal, options?: IAccessbilitySignalOptions): Promise<void>;
    playSignals(signals: (AccessibilitySignal | {
        signal: AccessibilitySignal;
        source: string;
    })[]): Promise<void>;
    isSoundEnabled(signal: AccessibilitySignal): boolean;
    isAnnouncementEnabled(signal: AccessibilitySignal): boolean;
    onSoundEnabledChanged(signal: AccessibilitySignal): Event<void>;
    onAnnouncementEnabledChanged(signal: AccessibilitySignal): Event<void>;
    playSound(signal: Sound, allowManyInParallel?: boolean): Promise<void>;
    playSignalLoop(signal: AccessibilitySignal, milliseconds: number): IDisposable;
}
interface IAccessbilitySignalOptions {
    allowManyInParallel?: boolean;
    /**
     * The source that triggered the signal (e.g. "diffEditor.cursorPositionChanged").
     */
    source?: string;
    /**
     * For actions like save or format, depending on the
     * configured value, we will only
     * play the sound if the user triggered the action.
     */
    userGesture?: boolean;
}
/**
 * Corresponds to the audio files in ./media.
*/
declare class Sound {
    readonly fileName: string;
    private static register;
    static readonly error: Sound;
    static readonly warning: Sound;
    static readonly foldedArea: Sound;
    static readonly break: Sound;
    static readonly quickFixes: Sound;
    static readonly taskCompleted: Sound;
    static readonly taskFailed: Sound;
    static readonly terminalBell: Sound;
    static readonly diffLineInserted: Sound;
    static readonly diffLineDeleted: Sound;
    static readonly diffLineModified: Sound;
    static readonly chatRequestSent: Sound;
    static readonly chatResponsePending: Sound;
    static readonly chatResponseReceived1: Sound;
    static readonly chatResponseReceived2: Sound;
    static readonly chatResponseReceived3: Sound;
    static readonly chatResponseReceived4: Sound;
    static readonly clear: Sound;
    static readonly save: Sound;
    static readonly format: Sound;
    static readonly voiceRecordingStarted: Sound;
    static readonly voiceRecordingStopped: Sound;
    private constructor();
}
declare class SoundSource {
    readonly randomOneOf: Sound[];
    constructor(randomOneOf: Sound[]);
    getSound(deterministic?: boolean): Sound;
}
declare class AccessibilitySignal {
    readonly sound: SoundSource;
    readonly name: string;
    readonly legacySoundSettingsKey: string;
    readonly settingsKey: string;
    readonly legacyAnnouncementSettingsKey?: string | undefined;
    readonly announcementMessage?: string | undefined;
    private static _signals;
    private static register;
    static get allAccessibilitySignals(): AccessibilitySignal[];
    static readonly error: AccessibilitySignal;
    static readonly warning: AccessibilitySignal;
    static readonly foldedArea: AccessibilitySignal;
    static readonly break: AccessibilitySignal;
    static readonly inlineSuggestion: AccessibilitySignal;
    static readonly terminalQuickFix: AccessibilitySignal;
    static readonly onDebugBreak: AccessibilitySignal;
    static readonly noInlayHints: AccessibilitySignal;
    static readonly taskCompleted: AccessibilitySignal;
    static readonly taskFailed: AccessibilitySignal;
    static readonly terminalCommandFailed: AccessibilitySignal;
    static readonly terminalBell: AccessibilitySignal;
    static readonly notebookCellCompleted: AccessibilitySignal;
    static readonly notebookCellFailed: AccessibilitySignal;
    static readonly diffLineInserted: AccessibilitySignal;
    static readonly diffLineDeleted: AccessibilitySignal;
    static readonly diffLineModified: AccessibilitySignal;
    static readonly chatRequestSent: AccessibilitySignal;
    static readonly chatResponseReceived: AccessibilitySignal;
    static readonly chatResponsePending: AccessibilitySignal;
    static readonly clear: AccessibilitySignal;
    static readonly save: AccessibilitySignal;
    static readonly format: AccessibilitySignal;
    static readonly voiceRecordingStarted: AccessibilitySignal;
    static readonly voiceRecordingStopped: AccessibilitySignal;
    private constructor();
}

export { AccessibilitySignal, type IAccessbilitySignalOptions, IAccessibilitySignalService, Sound, SoundSource };
