import { AnalyserOptions, AudioContextOptions, AudioParamBase, BaseAudioContext, ConstantSourceOptions, ConvolverOptions, DelayOptions, IIRFilterOptions, PannerOptions, PeriodicWaveOptions, StereoPannerOptions, WaveShaperOptions, context_, native_ } from './common';
type NativeBaseAudioContext = BaseAudioContext & {
    native: org.nativescript.audiocontext.AudioContextInstance;
};
export declare class AudioParam extends AudioParamBase {
    private [native_];
    constructor(a?: any, b?: any);
    get native(): org.nativescript.audiocontext.AudioParam;
    getValuesForRange(startTime: number, sampleRate: number, frameCount: number): number[];
}
export declare class AudioNode {
    private [context_];
    constructor(context: NativeBaseAudioContext);
    get context(): BaseAudioContext;
    connect(node: any, output?: number, input?: number): void;
    disconnect(destinationOrOutput?: any, output?: number, input?: number): void;
}
export declare class AudioBuffer {
    [native_]: org.nativescript.audiocontext.AudioBuffer;
    constructor(options: {
        length: number;
        numberOfChannels?: number;
        sampleRate?: number;
    } | Symbol, nativeBuffer?: org.nativescript.audiocontext.AudioBuffer);
    get native(): org.nativescript.audiocontext.AudioBuffer;
    get sampleRate(): number;
    get length(): number;
    get duration(): number;
    get numberOfChannels(): number;
    getChannelData(channel: number): Float32Array | null;
    copyFromChannel(dest: Float32Array, channel: number, startInChannel?: number): void;
    copyToChannel(source: Float32Array, channel: number, startInChannel?: number): void;
}
export declare class GainNode extends AudioNode {
    private _gainParam;
    [native_]: org.nativescript.audiocontext.GainNode;
    constructor(context: NativeBaseAudioContext, options?: {
        gain?: number;
    });
    get native(): org.nativescript.audiocontext.GainNode;
    get gain(): AudioParam;
}
export declare class AudioDestinationNode extends AudioNode {
    [native_]: org.nativescript.audiocontext.AudioNode;
    constructor(context: NativeBaseAudioContext, node: org.nativescript.audiocontext.GainNode);
    get native(): org.nativescript.audiocontext.AudioNode;
}
export declare class BiquadFilterNode extends AudioNode {
    [native_]: org.nativescript.audiocontext.AudioBiquadNode;
    private _frequencyParam;
    private _qParam;
    private _gainParam;
    private _detuneParam;
    constructor(context: NativeBaseAudioContext, options?: {
        type?: string;
        frequency?: number;
        Q?: number;
        gain?: number;
    });
    get native(): org.nativescript.audiocontext.AudioBiquadNode;
    get frequency(): AudioParam;
    get Q(): AudioParam;
    get gain(): AudioParam;
    get detune(): AudioParam;
}
export declare class PannerNode extends AudioNode {
    [native_]: org.nativescript.audiocontext.AudioPannerNode;
    constructor(context: NativeBaseAudioContext, options?: PannerOptions);
    get native(): org.nativescript.audiocontext.AudioPannerNode;
    private _positionX;
    private _positionY;
    private _positionZ;
    private _orientationX;
    private _orientationY;
    private _orientationZ;
    get positionX(): AudioParam;
    get positionY(): AudioParam;
    get positionZ(): AudioParam;
    get orientationX(): AudioParam;
    get orientationY(): AudioParam;
    get orientationZ(): AudioParam;
    get distanceModel(): number;
    set distanceModel(v: number);
    get panningModel(): number;
    set panningModel(v: number);
    get refDistance(): number;
    set refDistance(v: number);
    get maxDistance(): number;
    set maxDistance(v: number);
    get rolloffFactor(): number;
    set rolloffFactor(v: number);
    get coneInnerAngle(): number;
    set coneInnerAngle(v: number);
    get coneOuterAngle(): number;
    set coneOuterAngle(v: number);
    get coneOuterGain(): number;
    set coneOuterGain(v: number);
    setPosition(x: number, y: number, z: number): void;
    setOrientation(x: number, y: number, z: number): void;
}
export declare class AudioScheduledSourceNode extends AudioNode {
    [native_]: org.nativescript.audiocontext.AudioScheduledSourceNode;
    constructor(context: NativeBaseAudioContext, node: org.nativescript.audiocontext.AudioScheduledSourceNode);
    get native(): org.nativescript.audiocontext.AudioScheduledSourceNode;
    start(): void;
    stop(): void;
}
export declare class AudioBufferSourceNode extends AudioScheduledSourceNode {
    constructor(context: NativeBaseAudioContext, options?: {
        buffer?: AudioBuffer;
    });
    get native(): org.nativescript.audiocontext.AudioBufferSourceNode;
    get loop(): boolean;
    set loop(v: boolean);
    get buffer(): AudioBuffer | null;
    set buffer(v: AudioBuffer | null);
}
export declare class OfflineAudioContext extends BaseAudioContext {
    [native_]: org.nativescript.audiocontext.AudioContextInstance;
    destination: AudioDestinationNode | null;
    private _frames;
    private _sampleRate;
    private _channels;
    static getInstance(): org.nativescript.audiocontext.AudioContext;
    constructor(numberOfChannels: number, lengthInFrames: number, sampleRate: number);
    get native(): org.nativescript.audiocontext.AudioContextInstance;
    configure(numberOfChannels: number, lengthInFrames: number, sampleRate: number): void;
    createGain(options?: {
        gain?: number;
    }): GainNode;
    createBiquad(options?: {
        type?: string;
        frequency?: number;
        Q?: number;
        gain?: number;
    }): BiquadFilterNode;
    createPanner(options?: PannerOptions): PannerNode;
    createOscillator(options?: {
        type?: string;
        frequency?: number;
    }): OscillatorNode;
    createStereoPanner(options?: StereoPannerOptions): StereoPannerNode;
    createDelay(options?: DelayOptions): DelayNode;
    createConstantSource(options?: ConstantSourceOptions): ConstantSourceNode;
    createAnalyser(options?: AnalyserOptions): AnalyserNode;
    createWaveShaper(options?: WaveShaperOptions): WaveShaperNode;
    createIIRFilter(feedforward: number[], feedback: number[]): IIRFilterNode;
    createConvolver(options?: ConvolverOptions): ConvolverNode;
    createPeriodicWave(real: Float32Array | number[], imag: Float32Array | number[], options?: {
        disableNormalization?: boolean;
    }): PeriodicWave;
    createBufferSource(): AudioBufferSourceNode;
    decodeAudioData(source: string | ArrayBuffer | ArrayBufferView): Promise<AudioBuffer>;
    startRendering(): Promise<AudioBuffer>;
}
export declare class AudioContext extends BaseAudioContext {
    destination: AudioDestinationNode | null;
    [native_]: org.nativescript.audiocontext.AudioContextInstance;
    static getInstance(): org.nativescript.audiocontext.AudioContext;
    constructor(options?: AudioContextOptions);
    get native(): org.nativescript.audiocontext.AudioContextInstance;
    get sampleRate(): number;
    get currentTime(): number;
    createGain(options?: {
        gain?: number;
    }): GainNode;
    createBiquad(options?: {
        type?: string;
        frequency?: number;
        Q?: number;
        gain?: number;
    }): BiquadFilterNode;
    createPanner(options?: PannerOptions): PannerNode;
    createOscillator(options?: {
        type?: string;
        frequency?: number;
    }): OscillatorNode;
    createStereoPanner(options?: StereoPannerOptions): StereoPannerNode;
    createDelay(options?: DelayOptions): DelayNode;
    createConstantSource(options?: ConstantSourceOptions): ConstantSourceNode;
    createAnalyser(options?: AnalyserOptions): AnalyserNode;
    createWaveShaper(options?: WaveShaperOptions): WaveShaperNode;
    createIIRFilter(feedforward: number[], feedback: number[]): IIRFilterNode;
    createConvolver(options?: ConvolverOptions): ConvolverNode;
    createPeriodicWave(real: Float32Array | number[], imag: Float32Array | number[], options?: {
        disableNormalization?: boolean;
    }): PeriodicWave;
    createBuffer(options: {
        length: number;
        numberOfChannels: number;
        sampleRate: number;
    }): AudioBuffer;
    createBufferSource(options?: {
        buffer?: AudioBuffer;
    }): AudioBufferSourceNode;
    renderOffline(trackIds: string[], frames: number, sampleRate: number, channels: number): Promise<AudioBuffer>;
    decodeAudioData(source: string | ArrayBuffer | ArrayBufferView): Promise<AudioBuffer>;
    resume(): Promise<void>;
    suspend(): Promise<void>;
    close(): Promise<void>;
    private _sinkId;
    get sinkId(): string;
    setSinkId(deviceId: string): Promise<void>;
}
export declare class OscillatorNode extends AudioScheduledSourceNode {
    private _periodicWave;
    constructor(context: NativeBaseAudioContext, options?: {
        type?: string;
        frequency?: number;
    });
    get native(): org.nativescript.audiocontext.AudioOscillatorNode;
    private _frequencyParam;
    get frequency(): AudioParam;
    setPeriodicWave(wave: PeriodicWave): void;
}
export declare class StereoPannerNode extends AudioNode {
    [native_]: org.nativescript.audiocontext.AudioPannerNode;
    private _panParam;
    constructor(context: NativeBaseAudioContext, options?: StereoPannerOptions);
    get native(): org.nativescript.audiocontext.AudioPannerNode;
    get pan(): AudioParam;
}
export declare class DelayNode extends AudioNode {
    [native_]: org.nativescript.audiocontext.DelayNode;
    private _delayTimeParam;
    readonly maxDelayTime: number;
    constructor(context: NativeBaseAudioContext, options?: DelayOptions);
    get native(): org.nativescript.audiocontext.DelayNode;
    get delayTime(): AudioParamBase;
}
export declare class ConstantSourceNode extends AudioScheduledSourceNode {
    private _offsetParam;
    constructor(context: NativeBaseAudioContext, options?: ConstantSourceOptions);
    get native(): org.nativescript.audiocontext.ConstantSourceNode;
    get offset(): AudioParamBase;
}
export declare class AnalyserNode extends AudioNode {
    [native_]: org.nativescript.audiocontext.AnalyserNode;
    constructor(context: NativeBaseAudioContext, options?: AnalyserOptions);
    get native(): org.nativescript.audiocontext.AnalyserNode;
    get fftSize(): number;
    set fftSize(v: number);
    get frequencyBinCount(): number;
    get smoothingTimeConstant(): number;
    set smoothingTimeConstant(v: number);
    get minDecibels(): number;
    set minDecibels(v: number);
    get maxDecibels(): number;
    set maxDecibels(v: number);
    getFloatTimeDomainData(dest: Float32Array): void;
    getByteTimeDomainData(dest: Uint8Array): void;
    getFloatFrequencyData(dest: Float32Array): void;
    getByteFrequencyData(dest: Uint8Array): void;
}
export declare class WaveShaperNode extends AudioNode {
    [native_]: org.nativescript.audiocontext.WaveShaperNode;
    private _curve;
    constructor(context: NativeBaseAudioContext, options?: WaveShaperOptions);
    get native(): org.nativescript.audiocontext.WaveShaperNode;
    get curve(): Float32Array | null;
    set curve(v: Float32Array | null);
    get oversample(): 'none' | '2x' | '4x';
    set oversample(v: 'none' | '2x' | '4x');
}
export declare class IIRFilterNode extends AudioNode {
    [native_]: org.nativescript.audiocontext.AudioIIRNode;
    constructor(context: NativeBaseAudioContext, options: IIRFilterOptions);
    get native(): org.nativescript.audiocontext.AudioIIRNode;
    getFrequencyResponse(frequencyHz: Float32Array, magResponse: Float32Array, phaseResponse: Float32Array): void;
}
export declare class ConvolverNode extends AudioNode {
    [native_]: org.nativescript.audiocontext.ConvolverNode;
    constructor(context: NativeBaseAudioContext, options?: ConvolverOptions);
    get native(): org.nativescript.audiocontext.ConvolverNode;
    get buffer(): AudioBuffer | null;
    set buffer(value: AudioBuffer | null);
    get normalize(): boolean;
    set normalize(value: boolean);
}
export declare class PeriodicWave {
    [native_]: org.nativescript.audiocontext.PeriodicWave;
    private real;
    private imag;
    private disableNormalization;
    constructor(_context: NativeBaseAudioContext, options?: PeriodicWaveOptions);
    get native(): org.nativescript.audiocontext.PeriodicWave;
}
export {};
