import { Call } from '../Call';
import { SpeakerState } from './SpeakerState';
import { CallSettingsResponse } from '../gen/coordinator';
import { DevicePersistenceOptions } from './devicePersistence';
export declare class SpeakerManager {
    readonly state: SpeakerState;
    private subscriptions;
    private areSubscriptionsSetUp;
    private readonly call;
    private defaultDevice?;
    private readonly devicePersistence;
    constructor(call: Call, devicePreferences: Required<DevicePersistenceOptions>);
    apply(settings: CallSettingsResponse): void;
    private applyWeb;
    private applyRN;
    setup(): void;
    /**
     * Lists the available audio output devices
     *
     * Note: It prompts the user for a permission to use devices (if not already granted)
     * Note: This method is not supported in React Native
     *
     * @returns an Observable that will be updated if a device is connected or disconnected
     */
    listDevices(): import("rxjs").Observable<MediaDeviceInfo[]>;
    /**
     * Select a device.
     *
     * Note: This method is not supported in React Native
     *
     * @param deviceId empty string means the system default
     */
    select(deviceId: string): void;
    /**
     * Disposes the manager.
     *
     * @internal
     */
    dispose: () => void;
    /**
     * Set the volume of the audio elements
     * @param volume a number between 0 and 1.
     *
     * Note: This method is not supported in React Native
     */
    setVolume(volume: number): void;
    /**
     * Set the volume of a participant.
     *
     * @param sessionId the participant's session id.
     * @param volume a number between 0 and 1. Set it to `undefined` to use the default volume.
     */
    setParticipantVolume(sessionId: string, volume: number | undefined): void;
    private persistSpeakerDevicePreference;
}
