import { Observable } from 'rxjs';
import { AutomixController } from './facade/automix-controller';
import { AuxBus } from './facade/aux-bus';
import { DeviceInfo } from './facade/device-info';
import { DualTrackRecorder } from './facade/dual-track-recorder';
import { FxBus } from './facade/fx-bus';
import { HwChannel } from './facade/hw-channel';
import { MasterBus } from './facade/master-bus';
import { MtxBus } from './facade/mtx-bus';
import { MultiTrackRecorder } from './facade/multi-track-recorder';
import { MuteGroup, MuteGroupID } from './facade/mute-group';
import { Player } from './facade/player';
import { ShowController } from './facade/show-controller';
import { VolumeBus } from './facade/volume-bus';
import { MixerConnection } from './mixer-connection';
import { MixerStore } from './state/mixer-store';
import { ConnectionEvent, SoundcraftUIOptions } from './types';
import { VuProcessor } from './vu/vu-processor';
import { ChannelSync } from './facade/channel-sync';
export declare class SoundcraftUI {
    private _options;
    /**
     * Get mixer options as a read-only copy.
     * Options can only be set once at initialization and cannot be changed later.
     */
    get options(): Readonly<SoundcraftUIOptions>;
    readonly conn: MixerConnection;
    readonly store: MixerStore;
    /** Information about hardware and software of the mixer */
    readonly deviceInfo: DeviceInfo;
    /** Connection status */
    readonly status$: Observable<ConnectionEvent>;
    /** VU meter information for master channels */
    readonly vuProcessor: VuProcessor;
    /** Master bus */
    readonly master: MasterBus;
    /** Media player */
    readonly player: Player;
    /** 2-track recorder */
    readonly recorderDualTrack: DualTrackRecorder;
    /** multitrack recorder */
    readonly recorderMultiTrack: MultiTrackRecorder;
    /** SOLO and Headphone buses */
    readonly volume: {
        solo: VolumeBus;
        headphone: (id: number) => VolumeBus;
    };
    /** Show controller (Shows, Snapshots, Cues) */
    readonly shows: ShowController;
    /** Automix controller */
    readonly automix: AutomixController;
    /** Channel Sync Controller */
    readonly channelSync: ChannelSync;
    /**
     * Create a new instance to connect to a Soundcraft Ui mixer.
     * The IP address of the mixer is a required parameter.
     * You can either pass it in directly or as part of an options object:
     *
     * ```ts
     * new SoundcraftUI('192.168.1.123');
     * new SoundcraftUI({ targetIP: '192.168.1.123' });
     * ```
     */
    constructor(options: SoundcraftUIOptions);
    constructor(targetIP: string);
    /**
     * Get AUX bus
     * @param bus Bus number
     */
    aux(bus: number): AuxBus;
    /**
     * Get matrix bus.
     * A matrix bus is an AUX bus that has been converted into a matrix and routes
     * other buses (AUX buses, subgroups, master) to an AUX output.
     * Matrix buses are only available on the Ui24R.
     * @param bus Bus number (same slot number as the AUX it replaced)
     */
    mtx(bus: number): MtxBus;
    /**
     * Get FX bus
     * @param bus Bus number
     */
    fx(bus: number): FxBus;
    /**
     * Get MUTE group or related groupings (MUTE ALL and MUTE FX)
     * @param id ID of the group: `1`..`6`, `all`, `fx`
     */
    muteGroup(id: MuteGroupID): MuteGroup;
    /** Unmute all mute groups, "MUTE ALL" and "MUTE FX" */
    clearMuteGroups(): void;
    /**
     * Get hardware channel. With 1:1 patching, those are the same as input channels.
     * However, if patched differently, HW channel 1 still is the first input on the hardware.
     *
     * @param channel Channel number
     */
    hw(channel: number): HwChannel;
    /** Connect to the mixer. Returns a Promise that resolves when the connection is open and the initial params have likely been received by the mixer. */
    connect(): Promise<void>;
    /** Disconnect from the mixer. Returns a Promise that resolves when the connection is closed. */
    disconnect(): Promise<void>;
    /**
     * Reconnect to the mixer after 1 second.
     * Returns a Promise that resolves when the connection is open again and the initial params have likely been received by the mixer.
     */
    reconnect(): Promise<void>;
}
