import '../../../globals.js';
import EnabledComponent, { EnabledComponentOptions } from '../../../axon/js/EnabledComponent.js';
import TReadOnlyProperty from '../../../axon/js/TReadOnlyProperty.js';
import { Node } from '../../../scenery/js/imports.js';
import SoundLevelEnum from '../SoundLevelEnum.js';
type SelfOptions = {
    initialOutputLevel?: number;
    audioContext?: AudioContext;
    connectImmediately?: boolean;
    additionalAudioNodes?: AudioNode[];
    sonificationLevel?: SoundLevelEnum;
    associatedViewNode?: Node | null;
    enabledDuringReset?: boolean;
    enabledDuringPhetioStateSetting?: boolean;
};
export type SoundGeneratorOptions = SelfOptions & EnabledComponentOptions;
declare abstract class SoundGenerator extends EnabledComponent {
    protected audioContext: AudioContext;
    private _outputLevel;
    private connectionList;
    readonly fullyEnabledProperty: TReadOnlyProperty<boolean>;
    protected mainGainNode: GainNode;
    protected soundSourceDestination: AudioNode;
    protected constructor(providedOptions?: SoundGeneratorOptions);
    /**
     * Connect the sound generator to an audio parameter.
     */
    connect(audioParam: AudioParam | AudioNode): void;
    /**
     * Disconnect the sound generator from an audio parameter.
     */
    disconnect(audioParam: AudioParam | AudioNode): void;
    /**
     * Test if this sound generator is connected to the provided audio param.
     */
    isConnectedTo(audioParam: AudioParam | AudioNode): boolean;
    /**
     * Sets the output level of the sound generator.
     *
     * @param outputLevel - generally between 0 and 1, but can be larger than 1 if necessary to amplify a small signal,
     *   and can be negative to invert the phase.
     * @param [timeConstant] - time constant for output level change, longer values mean slower transitions, in seconds.
     *   Note that timeConstant is NOT a fade time. It's an exponential approach to the target output level, and the argument to
     *   setTargetAtTime, documented at https://developer.mozilla.org/en-US/docs/Web/API/AudioParam/setTargetAtTime#timeconstant
     *   The document has this suggestion for choosing the value for timeConstant: "Depending on your use case, getting
     *   95% toward the target value may already be enough; in that case, you could set timeConstant to one third of the
     *   desired duration."
     */
    setOutputLevel(outputLevel: number, timeConstant?: number): void;
    set outputLevel(outputLevel: number);
    get outputLevel(): number;
    /**
     * Get the current output level setting.  Note that if the sound generator is disabled, this could return a non-zero
     * value but the sound generator won't produce audible sound.
     */
    getOutputLevel(): number;
    get fullyEnabled(): boolean;
}
export default SoundGenerator;
//# sourceMappingURL=SoundGenerator.d.ts.map