import { Observable } from 'rxjs';
import { TLSSocket } from 'tls';
import { MessageType } from '@protobuf-ts/runtime';
import { PacketType } from './packet-type.js';
interface MumbleSocketReader {
    length: number;
    callback: (data: Buffer) => void;
}
interface AudioPacket {
    source: number;
}
export declare enum AudioCodec {
    CELTAlpha = 0,
    Ping = 1,
    Speex = 2,
    CELTBeta = 3,
    Opus = 4
}
export interface FullAudioPacket {
    source: number;
    target: number;
    codec: AudioCodec;
    sequence: number;
    audioData: Buffer;
    hasTerminator: boolean;
}
export interface SendAudioOptions {
    data: Buffer;
    codec?: AudioCodec;
    target?: number;
    isTerminator?: boolean;
}
export declare class MumbleSocket {
    private readonly socket;
    private readonly _packet;
    private readonly _audioPacket;
    private readonly _fullAudioPacket;
    private buffers;
    private length;
    private readers;
    private audioSequence;
    constructor(socket: TLSSocket);
    get packet(): Observable<PacketType>;
    get audioPacket(): Observable<AudioPacket>;
    get fullAudioPacket(): Observable<FullAudioPacket>;
    read(length: number, callback: MumbleSocketReader['callback']): void;
    send<T extends object>(message: MessageType<T>, payload: T): Promise<void>;
    write(buffer: Buffer | Uint8Array): Promise<void>;
    end(): void;
    sendAudio({ data, codec, target, isTerminator, }: SendAudioOptions): Promise<void>;
    private receiveData;
    private flushReaders;
    private readPrefix;
    private readPacket;
    private decodeAudio;
}
export {};
