import type { NobjcObject } from "objc-js";
import type { _NSArray } from "../Foundation/NSArray.js";
import type { _NSDictionary } from "../Foundation/NSDictionary.js";
import type { _NSObject } from "../Foundation/NSObject.js";
import type { _PHASEAssetRegistry } from "./PHASEAssetRegistry.js";
import type { _PHASEGroupPreset } from "./PHASEGroupPreset.js";
import type { _PHASEMedium } from "./PHASEMedium.js";
import type { _PHASEObject } from "./PHASEObject.js";
import type { _AVAudioTime } from "../AVFAudio/AVAudioTime.js";
import type { PHASERenderingMode } from "./PHASERenderingMode.js";
import type { PHASERenderingState } from "./PHASERenderingState.js";
import type { PHASEReverbPreset } from "./PHASEReverbPreset.js";
import type { PHASESpatializationMode } from "./PHASESpatializationMode.js";
import type { PHASEUpdateMode } from "./PHASEUpdateMode.js";
export declare class _PHASEEngine extends _NSObject {
    static alloc(): _PHASEEngine;
    static new(): _PHASEEngine;
    init(): _PHASEEngine;
    /**
     * Initialize a new engine with an update mode. Defines how the engine will be updated.
     */
    initWithUpdateMode$(updateMode: PHASEUpdateMode): _PHASEEngine;
    /**
     * Initialize a new engine with an update mode. Defines how the engine will be updated. Defines where the engine applies rendering. See PHASERenderingMode for more info.
     */
    initWithUpdateMode$renderingMode$(updateMode: PHASEUpdateMode, renderingMode: PHASERenderingMode): _PHASEEngine;
    /** Start or resume the engine. YES for success. */
    startAndReturnError$(error: NobjcObject | null): boolean;
    /** Pause the engine. */
    pause(): void;
    /** Stop the engine. */
    stop(): void;
    /**
     * Manually update the engine instance on the calling thread. This will kick off all of the API commands called since the last call to update, update any systems and objects that need to be kept current, and call any registered handlers. This function has no effect if the engine's update mode is PHASEUpdateModeAutomatic.
     */
    update(): void;
    /**
     * When set to a value other than PHASESpatializationModeAutomatic, overrides the default output spatializer and uses the specified one instead.
     */
    outputSpatializationMode(): PHASESpatializationMode;
    setOutputSpatializationMode$(value: PHASESpatializationMode): void;
    /** The engine's current rendering state. */
    renderingState(): PHASERenderingState;
    /**
     * The root object of the engine's scene graph. Attach objects to the engine's rootObject or one of its children to make them active within the engine's scene graph. This will ensure they take part in the simulation. The rootObject is created and owned by the engine. The rootObject may not be set as the child of another object. This will cause an error to be thrown. The rootObject's transform may not be changed. This will cause an error to be thrown. The rootObject may not be copied. This will cause an error to be thrown.
     */
    rootObject(): _PHASEObject;
    /** The default medium in the engine. The default value is PHASEMediumPresetAir. */
    defaultMedium(): _PHASEMedium;
    setDefaultMedium$(value: _PHASEMedium): void;
    /**
     * The default reverb preset in the engine. The default value is PHASEReverbPresetNone.
     */
    defaultReverbPreset(): PHASEReverbPreset;
    setDefaultReverbPreset$(value: PHASEReverbPreset): void;
    /**
     * The number of units in a second. The unitsPerSecond is used internally to scale time/duration values passed to the API. This allows clients to pass time/duration values in their own native time scale. Values are clamped to the range (0, inf]. Default value is 1.
     */
    unitsPerSecond(): number;
    setUnitsPerSecond$(value: number): void;
    /**
     * The number of units in a meter. The unitsPerMeter is used internally to scale metric values passed to the API. This allows clients to pass metric values in their own native spatial scale. Values are clamped to the range (0, inf]. Default value is 1.
     */
    unitsPerMeter(): number;
    setUnitsPerMeter$(value: number): void;
    /** A registry for assets available to the engine */
    assetRegistry(): _PHASEAssetRegistry;
    /**
     * An array of the active sound event objects in the system Returns a dictionary of the sound events at the time it is retrieved. This includes all sound events that are registered with the engine, including those that are preparing, playing, paused or stopping.
     */
    soundEvents(): _NSArray;
    /**
     * A dictionary of the groups in the system Returns a dictionary of the groups at the time it is retrieved.
     */
    groups(): _NSDictionary;
    /**
     * An array of the ducker objects in the system Returns a dictionary of the ducker objects at the time it is retrieved.
     */
    duckers(): _NSArray;
    /**
     * The active group mixer preset in the system Returns nil if there are no active group presets in the engine. Activate or Deactivate the preset via [PHASEGroupPreset activate] and [PHASEGroupPreset deactivate]
     */
    activeGroupPreset(): _PHASEGroupPreset | null;
    /**
     * Obtain the time for which the engine most recently rendered. Will return nil if the engine is not running
     */
    lastRenderTime(): _AVAudioTime;
}
