export type ControlType = 'frequency' | 'gain' | 'detune' | 'pan';
export type RatioType = 'ratio' | 'inverseRatio' | 'percent';
export type RampType = 'linear' | 'exponential';
export type SeekType = RatioType | 'seconds';
export interface ParamValue {
    type: ControlType;
    value: number;
}
export interface ValueAtTime extends ParamValue {
    time: number;
}
export interface ParamController {
    gain: number;
    pan: number;
    setValuesAtTimes: () => void;
    updateAudioSource: (source: any) => void;
    updateGainNode: (gainNode: GainNode) => void;
    updatePannerNode: (pannerNode: StereoPannerNode) => void;
    update: (type: ControlType) => {
        to: (value: number) => {
            from: (method: RatioType) => void;
        };
    };
    onPlaySet: (type: ControlType) => {
        to: (value: number) => {
            at: (time: number) => void;
            endingAt: (time: number, rampType?: RampType) => void;
        };
    };
    onPlayRamp: (type: ControlType, rampType?: RampType) => {
        from: (startValue: number) => {
            to: (endValue: number) => {
                in: (endTime: number) => void;
            };
        };
    };
}
interface AudioSource {
    detune: {
        value: number;
    };
    frequency?: {
        value: number;
    };
}
export declare class BaseParamController {
    protected audioSource: AudioSource;
    protected gainNode: GainNode;
    protected pannerNode: StereoPannerNode;
    constructor(audioSource: AudioSource, gainNode: GainNode, pannerNode: StereoPannerNode);
    protected startingValues: ParamValue[];
    protected valuesAtTime: ValueAtTime[];
    protected exponentialValues: ValueAtTime[];
    protected linearValues: ValueAtTime[];
    get gain(): number;
    protected set gain(value: number);
    get pan(): number;
    protected set pan(value: number);
    updateGainNode(gainNode: GainNode): void;
    updatePannerNode(pannerNode: StereoPannerNode): void;
    protected _update(type: ControlType, value: number): void;
    update(type: ControlType): {
        to: (value: number) => {
            from: (method: RatioType) => void;
        };
    };
    onPlaySet(type: ControlType): {
        to: (value: number) => {
            at: (time: number) => void;
            endingAt: (time: number, rampType?: RampType) => void;
        };
    };
    onPlayRamp(type: ControlType, rampType?: RampType): {
        from: (startValue: number) => {
            to: (endValue: number) => {
                in: (endTime: number) => void;
            };
        };
    };
    private removeStartingValue;
    private addRampValue;
}
export {};
//# sourceMappingURL=base-param-controller.d.ts.map