import type { NobjcObject } from "objc-js";
import type { _NSArray } from "../Foundation/NSArray.js";
import type { _NSDictionary } from "../Foundation/NSDictionary.js";
import type { _NSError } from "../Foundation/NSError.js";
import type { _NSObject } from "../Foundation/NSObject.js";
import type { _NSString } from "../Foundation/NSString.js";
import type { _AUAudioUnitBus } from "./AUAudioUnitBus.js";
import type { _AUAudioUnitBusArray } from "./AUAudioUnitBusArray.js";
import type { _AUAudioUnitPreset } from "./AUAudioUnitPreset.js";
import type { _AUMessageChannel } from "./AUMessageChannel.js";
import type { _AUParameterTree } from "./AUParameterTree.js";
import type { _MIDICIProfile } from "../CoreMIDI/MIDICIProfile.js";
import type { _MIDICIProfileState } from "../CoreMIDI/MIDICIProfileState.js";
import type { _AVAudioFormat } from "../AVFAudio/AVAudioFormat.js";
import type { AudioComponentDescription } from "../structs/AudioComponentDescription.js";
export declare class _AUAudioUnit extends _NSObject {
    static alloc(): _AUAudioUnit;
    static new(): _AUAudioUnit;
    init(): _AUAudioUnit;
    /**
     * @method instantiateWithComponentDescription:options:completionHandler: @brief Asynchronously create an AUAudioUnit instance. @param componentDescription The AudioComponentDescription of the audio unit to instantiate. @param options See the discussion of AudioComponentInstantiationOptions in AudioToolbox/AudioComponent.h. @param completionHandler Called in a thread/dispatch queue context internal to the implementation. The client should retain the supplied AUAudioUnit. @discussion Certain types of AUAudioUnits must be instantiated asynchronously -- see the discussion of kAudioComponentFlag_RequiresAsyncInstantiation in AudioToolbox/AudioComponent.h. Note: Do not block the main thread while waiting for the completion handler to be called; this can deadlock.
     */
    static instantiateWithComponentDescription$options$completionHandler$(componentDescription: AudioComponentDescription, options: NobjcObject, completionHandler: ((audioUnit: _AUAudioUnit, error: _NSError) => void) | null): void;
    /**
     * @brief Register an audio unit component implemented as an AUAudioUnit subclass. @discussion This method dynamically registers the supplied AUAudioUnit subclass with the Audio Component system, in the context of the current process (only). After registering the subclass, it can be instantiated via AudioComponentInstanceNew, -[AUAudioUnit initWithComponentDescription:options:error:], and via any other API's which instantiate audio units via their component descriptions (e.g. <AudioToolbox/AUGraph.h>, or <AVFoundation/AVAudioUnitEffect.h>).
     */
    static registerSubclass$asComponentDescription$name$version$(cls: NobjcObject, componentDescription: AudioComponentDescription, name: _NSString, version: number): void;
    /**
     * @method initWithComponentDescription:options:error: @brief Designated initializer. @param componentDescription A single AUAudioUnit subclass may implement multiple audio units, for example, an effect that can also function as a generator, or a cluster of related effects. The component description specifies the component which was instantiated. @param options Options for loading the unit in-process or out-of-process. @param outError Returned in the event of failure.
     */
    initWithComponentDescription$options$error$(componentDescription: AudioComponentDescription, options: NobjcObject, outError: NobjcObject | null): _AUAudioUnit | null;
    /**
     * @method initWithComponentDescription:error: @brief Convenience initializer (omits options).
     */
    initWithComponentDescription$error$(componentDescription: AudioComponentDescription, outError: NobjcObject | null): _AUAudioUnit | null;
    /**
     * @method allocateRenderResourcesAndReturnError: @brief Allocate resources required to render. @discussion Hosts must call this before beginning to render. Subclassers should call the superclass implementation. Bridged to the v2 API AudioUnitInitialize().
     */
    allocateRenderResourcesAndReturnError$(outError: NobjcObject | null): boolean;
    /**
     * @method deallocateRenderResources @brief Deallocate resources allocated by allocateRenderResourcesAndReturnError: @discussion Hosts should call this after finishing rendering. Subclassers should call the superclass implementation. Bridged to the v2 API AudioUnitUninitialize().
     */
    deallocateRenderResources(): void;
    /**
     * @method reset @brief Reset transitory rendering state to its initial state. @discussion Hosts should call this at the point of a discontinuity in the input stream being provided to an audio unit, for example, when seeking forward or backward within a track. In response, implementations should clear delay lines, filters, etc. Subclassers should call the superclass implementation. Bridged to the v2 API AudioUnitReset(), in the global scope.
     */
    reset(): void;
    /**
     * @method tokenByAddingRenderObserver: @brief Add a block to be called on each render cycle. @discussion The supplied block is called at the beginning and ending of each render cycle. It should not make any blocking calls. This method is implemented in the base class AUAudioUnit, and should not be overridden. Bridged to the v2 API AudioUnitAddRenderNotify(). @param observer The block to call. @return A token to be used when removing the observer.
     */
    tokenByAddingRenderObserver$(observer: (arg0: NobjcObject, arg1: NobjcObject, arg2: number, arg3: number) => void): number;
    /**
     * @method removeRenderObserver: @brief Remove an observer block added via tokenByAddingRenderObserver: @param token The token previously returned by tokenByAddingRenderObserver: Bridged to the v2 API AudioUnitRemoveRenderNotify().
     */
    removeRenderObserver$(token: number): void;
    /**
     * @method parametersForOverviewWithCount: @brief Returns the audio unit's `count` most important parameters. @discussion This property allows a host to query an audio unit for some small number of parameters which are its "most important", to be displayed in a compact generic view. An audio unit subclass should return an array of NSNumbers representing the addresses of the `count` most important parameters. The base class returns an empty array regardless of count. Partially bridged to kAudioUnitProperty_ParametersForOverview (v2 hosts can use that property to access this v3 method of an audio unit).
     */
    parametersForOverviewWithCount$(count: number): _NSArray;
    /**
     * @method saveUserPreset:error @brief Persistently save the current state of the audio unit into a userPreset @discussion The new preset will be added to userPresets and will become selectable by assigning it to the currentPreset property. If a preset with the provided name already exists then it will be overwritten. For user presets, the preset number is required to be negative. If a positive number is passed, the sign will be changed to negative. If zero is passed, the number will be set to -1. These changes will be reflected on the userPreset argument. The default implementation of this method will save the user preset to an internal location. Audio Units are free to override this method to operate on a different location (e.g. their iCloud container). @param userPreset The preset under which the current state will be saved. @param outError In the event of a failure, the method will return NO and outError will be set to an NSError, describing the problem. Some possible errors: - domain: NSOSStatusErrorDomain code: kAudioUnitErr_NoConnection - domain: NSOSStatusErrorDomain code: kAudioUnitErr_InvalidFilePath - domain: NSOSStatusErrorDomain code: kAudioUnitErr_MissingKey @return YES for success. NO in the event of a failure, in which case the error is returned in outError.
     */
    saveUserPreset$error$(userPreset: _AUAudioUnitPreset, outError: NobjcObject | null): boolean;
    /**
     * @method deleteUserPreset:error @brief Remove a user preset. @discussion The user preset will be removed from userPresets and will be permanently deleted. The default implementation of this method will delete the user preset from an internal location. Audio Units are free to override this method to operate on a different location (e.g. their iCloud container). @param userPreset The preset to be deleted. @param outError In the event of a failure, the method will return NO and outError will be set to an NSError, describing the problem. Some possible errors: - domain: NSOSStatusErrorDomain code: kAudioUnitErr_NoConnection - domain: NSPOSIXErrorDomain code: ENOENT - domain: NSOSStatusErrorDomain code: kAudioUnitErr_InvalidFilePath @return YES for success. NO in the event of a failure, in which case the error is returned in outError.
     */
    deleteUserPreset$error$(userPreset: _AUAudioUnitPreset, outError: NobjcObject | null): boolean;
    /**
     * @method presetStateFor:error @brief Retrieve the state stored in a user preset @discussion This method allows access to the contents of a preset without having to set that preset as current. The returned dictionary is assignable to the audio unit's fullState and/or fullStateForDocument properties. Audio units can override this method in order to vend user presets from a different location (e.g. their iCloud container). In order to restore the state from a user preset, the audio unit should override the setter for the currentPreset property and check the preset number to determine the type of preset. If the preset number is >= 0 then the preset is a factory preset. If the preset number is < 0 then it is a user preset. This method can then be called to retrieve the state stored in a user preset and the audio unit can assign this to fullState or fullStateForDocument. @param userPreset The preset to be selected. @param outError In the event of a failure, the method will return nil and outError will be set to an NSError, describing the problem. Some possible errors: - domain: NSOSStatusErrorDomain code: kAudioUnitErr_NoConnection - domain: NSPOSIXErrorDomain code: ENOENT - domain: NSCocoaErrorDomain code: NSCoderReadCorruptError @return Returns nil if there was an error, otherwise returns a dictionary containing the full state of the audio unit saved in the preset. For details on the possible keys present in the full state dictionary, please see the documentation for kAudioUnitProperty_ClassInfo. The minimal set of keys and their type is: @kAUPresetTypeKey : NSNumber, @kAUPresetSubtypeKey : NSNumber, @kAUPresetManufacturerKey : NSNumber, @kAUPresetVersionKey : NSNumber, @kAUPresetNameKey : NSString, @kAUPresetNumberKey: NSNumber, @kAUPresetDataKey : NSData
     */
    presetStateFor$error$(userPreset: _AUAudioUnitPreset, outError: NobjcObject | null): _NSDictionary | null;
    /**
     * @method profileStateForCable:channel: @brief Given a MIDI cable and channel number, return the supported MIDI-CI Profiles. @param cable The virtual MIDI cable for which the profiles are requested. @param channel The MIDI channel for which the profiles are requested. @return A MIDICIProfileState object containing all the supported MIDI-CI profiles for this channel on this cable.
     */
    profileStateForCable$channel$(cable: number, channel: number): _MIDICIProfileState;
    /**
     * @method enableProfile:cable:onChannel:error: @brief Enable a MIDI-CI Profile on the specified cable/channel. @param profile The MIDI-CI profile to be enabled. @param cable The virtual MIDI cable. @param channel The MIDI channel. @param outError Returned in the event of failure. @return YES for success. NO in the event of a failure, in which case the error is returned in outError.
     */
    enableProfile$cable$onChannel$error$(profile: _MIDICIProfile, cable: number, channel: number, outError: NobjcObject | null): boolean;
    /**
     * @method disableProfile:cable:onChannel:error: @brief Disable a MIDI-CI Profile on the specified cable/channel. @param profile The MIDI-CI profile to be disabled. @param cable The virtual MIDI cable. @param channel The MIDI channel. @param outError Returned in the event of failure. @return YES for success. NO in the event of a failure, in which case the error is returned in outError.
     */
    disableProfile$cable$onChannel$error$(profile: _MIDICIProfile, cable: number, channel: number, outError: NobjcObject | null): boolean;
    /**
     * @method messageChannelFor: @brief Returns an object for bidirectional communication between an Audio Unit and its host. @discussion Message channels provide a flexible way for custom data exchange between an Audio Unit and its host. An Audio Unit can support multiple message channels which are identified by the `channelName`. The message channel object's lifetime is managed by the host. Message channel objects should be designed in such a way that they could outlive the AU that vended them. For further details see discussion for `AUMessageChannel`. @param channelName The name of the message channel to be returned by the Audio Unit if supported. @return An object that conforms to the `AUMessageChannel` protocol.
     */
    messageChannelFor$(channelName: _NSString): _AUMessageChannel;
    /**
     * @method setDeviceID:error: @brief Set the I/O hardware device. @param deviceID The device to select. @param outError Returned in the event of failure.
     */
    setDeviceID$error$(deviceID: number, outError: NobjcObject | null): boolean;
    /**
     * @method startHardwareAndReturnError: @brief Starts the audio hardware. @param outError Returned in the event of failure.
     */
    startHardwareAndReturnError$(outError: NobjcObject | null): boolean;
    /** @method stopHardware @brief Stops the audio hardware. */
    stopHardware(): void;
    /**
     * @method shouldChangeToFormat:forBus: @param format An AVAudioFormat which is proposed as the new format. @param bus The AUAudioUnitBus on which the format will be changed. @discussion This is called when setting the format on an AUAudioUnitBus. The bus has already checked that the format meets the channel constraints of the bus. The AU can override this method to check before allowing a new format to be set on the bus. If this method returns NO, then the new format will not be set on the bus. The default implementation returns NO if the unit has renderResourcesAllocated, otherwise it results YES.
     */
    shouldChangeToFormat$forBus$(format: _AVAudioFormat, bus: _AUAudioUnitBus): boolean;
    /**
     * @method setRenderResourcesAllocated: @param flag In the base class implementation of allocateRenderResourcesAndReturnError:, the property renderResourcesAllocated is set to YES. If allocateRenderResourcesAndReturnError: should fail in a subclass, subclassers must use this method to set renderResourcesAllocated to NO.
     */
    setRenderResourcesAllocated$(flag: boolean): void;
    /**
     * @property componentDescription @brief The AudioComponentDescription with which the audio unit was created.
     */
    componentDescription(): AudioComponentDescription;
    /**
     * @property component @brief The AudioComponent which was found based on componentDescription when the audio unit was created.
     */
    component(): NobjcObject;
    /**
     * @property componentName @brief The unit's component's name. @discussion By convention, an audio unit's component name is its manufacturer's name, plus ": ", plus the audio unit's name. The audioUnitName and manufacturerName properties are derived from the component name.
     */
    componentName(): _NSString | null;
    /** @property audioUnitName @brief The audio unit's name. */
    audioUnitName(): _NSString | null;
    /** @property manufacturerName @brief The manufacturer's name. */
    manufacturerName(): _NSString | null;
    /**
     * @property audioUnitShortName @brief A short name for the audio unit. @discussion Audio unit host applications can display this name in situations where the audioUnitName might be too long. The recommended length is up to 16 characters. Host applications may truncate it.
     */
    audioUnitShortName(): _NSString | null;
    /** @property componentVersion @brief The unit's component's version. */
    componentVersion(): number;
    /**
     * @property renderResourcesAllocated @brief returns YES if the unit has render resources allocated.
     */
    renderResourcesAllocated(): boolean;
    /**
     * @property inputBusses @brief An audio unit's audio input connection points. @discussion Subclassers must override this property's getter. The implementation should return the same object every time it is asked for it, since clients can install KVO observers on it.
     */
    inputBusses(): _AUAudioUnitBusArray;
    /**
     * @property outputBusses @brief An audio unit's audio output connection points. @discussion Subclassers must override this property's getter. The implementation should return the same object every time it is asked for it, since clients can install KVO observers on it.
     */
    outputBusses(): _AUAudioUnitBusArray;
    /**
     * @property renderBlock @brief Block which hosts use to ask the unit to render. @discussion Before invoking an audio unit's rendering functionality, a host should fetch this block and cache the result. The block can then be called from a realtime context without the possibility of blocking and causing an overload at the Core Audio HAL level. This block will call a subclass' internalRenderBlock, providing all realtime events scheduled for the current render time interval, bracketed by calls to any render observers. Subclassers should override internalRenderBlock, not this property. Bridged to the v2 API AudioUnitRender().
     */
    renderBlock(): (arg0: NobjcObject, arg1: NobjcObject, arg2: number, arg3: number, arg4: NobjcObject, arg5: (arg0: NobjcObject, arg1: NobjcObject, arg2: number, arg3: number, arg4: NobjcObject) => number) => number;
    /**
     * @property scheduleParameterBlock @brief Block which hosts use to schedule parameters. @discussion As with renderBlock, a host should fetch and cache this block before calling allocateRenderResources, if it intends to schedule parameters. The block is safe to call from any thread context, including realtime audio render threads. Subclassers should not override this; it is implemented in the base class and will schedule the events to be provided to the internalRenderBlock. Bridged to the v2 API AudioUnitScheduleParameters().
     */
    scheduleParameterBlock(): (arg0: number, arg1: number, arg2: number, arg3: number) => void;
    /**
     * @property maximumFramesToRender @brief The maximum number of frames which the audio unit can render at once. @discussion This must be set by the host before render resources are allocated. It cannot be changed while render resources are allocated. Bridged to the v2 property kAudioUnitProperty_MaximumFramesPerSlice.
     */
    maximumFramesToRender(): number;
    setMaximumFramesToRender$(value: number): void;
    /**
     * @property parameterTree @brief An audio unit's parameters, organized in a hierarchy. @return A parameter tree object, or nil if the unit has no parameters. @discussion Audio unit hosts can fetch this property to discover a unit's parameters. KVO notifications are issued on this member to notify the host of changes to the set of available parameters. AUAudioUnit has an additional pseudo-property, "allParameterValues", on which KVO notifications are issued in response to certain events where potentially all parameter values are invalidated. This includes changes to currentPreset, fullState, and fullStateForDocument. Hosts should not attempt to set this property. Subclassers should implement the parameterTree getter to expose parameters to hosts. They should cache as much as possible and send KVO notifications on "parameterTree" when altering the structure of the tree or the static information (ranges, etc) of parameters. This is similar to the v2 properties kAudioUnitProperty_ParameterList and kAudioUnitProperty_ParameterInfo. Note that it is not safe to modify this property in a real-time context.
     */
    parameterTree(): _AUParameterTree | null;
    setParameterTree$(value: _AUParameterTree | null): void;
    /** / special pseudo-property for KVO */
    allParameterValues(): boolean;
    /**
     * @property musicDeviceOrEffect @brief Specifies whether an audio unit responds to MIDI events. @discussion This is implemented in the base class and returns YES if the component type is music device or music effect.
     */
    musicDeviceOrEffect(): boolean;
    /**
     * @property virtualMIDICableCount @brief The number of virtual MIDI cables implemented by a music device or effect. @discussion A music device or MIDI effect can support up to 256 virtual MIDI cables of input; this property expresses the number of cables supported by the audio unit.
     */
    virtualMIDICableCount(): number;
    /**
     * @property scheduleMIDIEventBlock @brief Block used to schedule MIDI events. @discussion As with renderBlock, a host should fetch and cache this block before calling allocateRenderResources if it intends to schedule MIDI events. This is implemented in the base class. It is nil when musicDeviceOrEffect is NO. Subclasses should not override. When hosts schedule events via this block, they are sent to the Audio Unit via the list of AURenderEvents delivered to internalRenderBlock. All events sent via this block will be delivered to the internalRenderBlock in the MIDI protocol returned by the AudioUnitMIDIProtocol property. For example, if AudioUnitMIDIProtocol returns kMIDIProtocol_2_0, incoming events will be translated to MIDI 2.0 if necessary. If AudioUnitMIDIProtocol is not set, events will be delivered as legacy MIDI. This bridged to the v2 API MusicDeviceMIDIEvent.
     */
    scheduleMIDIEventBlock(): ((arg0: number, arg1: number, arg2: number, arg3: NobjcObject) => void) | null;
    /**
     * @property scheduleMIDIEventListBlock @brief Block used to schedule MIDIEventLists. @discussion As with renderBlock, a host should fetch and cache this block before calling allocateRenderResources, if it intends to schedule MIDI events. When scheduling events during the render cycle (e.g. via a render observer) eventSampleTime can be AUEventSampleTimeImmediate plus an optional buffer offset, in which case the event is scheduled at the provided offset position within the current render cycle. This is implemented in the base class. It is nil when musicDeviceOrEffect is NO. Subclassers should not override. When hosts schedule events via this block, they are delivered to the Audio Unit via the list of AURenderEvents delivered to internalRenderBlock. All events sent via this block will be delivered to the internalRenderBlock in the MIDI protocol returned by the AudioUnitMIDIProtocol property. For example, if this block is called with MIDI-1.0 events but AudioUnitMIDIProtocol returns kMIDIProtocol_2_0, incoming events will be translated to MIDI 2.0. If AudioUnitMIDIProtocol is not set, events will be delivered as legacy MIDI. Note: This block should be preferred over scheduleMIDIEventBlock going forward. This bridged to the v2 API MusicDeviceMIDIEventList.
     */
    scheduleMIDIEventListBlock(): (arg0: number, arg1: number, arg2: NobjcObject) => number;
    /**
     * @property MIDIOutputNames @brief Count, and names of, a plug-in's MIDI outputs. @discussion A plug-in may override this method to inform hosts about its MIDI outputs. The size of the array is the number of outputs the Audio Unit supports. Each item in the array is the name of the MIDI output at that index. This is bridged to the v2 API property kAudioUnitProperty_MIDIOutputCallbackInfo.
     */
    MIDIOutputNames(): _NSArray;
    /**
     * @property providesUserInterface @brief Specifies whether an audio unit provides UI (normally in the form of a view controller). @discussion Implemented in the framework and should not be overridden by implementators. The framework detects whether any subclass has implemented `requestViewControllerWithCompletionHandler:` or is implemented by an AU extension whose extension point identifier is `com.apple.AudioUnit-UI`. See also `requestViewControllerWithCompletionHandler:` in <CoreAudioKit/AUViewController.h>
     */
    providesUserInterface(): boolean;
    /**
     * @property MIDIOutputEventBlock @brief Block used by the host to access the MIDI output generated by an Audio Unit. @discussion The host can set this block and the plug-in can call it in its renderBlock to provide to the host the MIDI data associated with the current render cycle. All events sent via this block will be delivered to the host in the MIDI protocol returned by the hostMIDIProtocol property. For example, if hostMIDIProtocol is set to kMIDIProtocol_2_0, incoming events will be translated to MIDI 2.0. If hostMIDIProtocol is not set, events will be delivered as legacy MIDI. Note: AUMIDIEventListBlock should be preferred over this block going forward. This is bridged to the v2 API property kAudioUnitProperty_MIDIOutputCallback.
     */
    MIDIOutputEventBlock(): ((arg0: number, arg1: number, arg2: number, arg3: NobjcObject) => number) | null;
    setMIDIOutputEventBlock$(value: ((arg0: number, arg1: number, arg2: number, arg3: NobjcObject) => number) | null): void;
    /**
     * @property MIDIOutputEventListBlock @brief Block used by the host to access the MIDIEventList output generated by an Audio Unit. @discussion The host can set this block and the plug-in can call it in its renderBlock to provide to the host the MIDIEventList data associated with the current render cycle. All events sent via this block will be delivered to the host in the MIDI protocol returned by the hostMIDIProtocol property. For example, if hostMIDIProtocol is set to kMIDIProtocol_2_0, incoming events will be translated to MIDI 2.0. If hostMIDIProtocol is not set, events will be delivered as legacy MIDI. Note: This block is cross-compatible with Audio Units using MIDIOutputEventBlock and should be preferred over MIDIOutputEventBlock by hosts going forward. The framework will provide the Audio Unit with both a MIDIOutputEventBlock and MIDIOutputEventListBlock, the Audio Unit is free to call either block as all messages will be translated as described above. Host should setup in the following order: - Set hostMIDIProtocol - Set MIDIOutputEventListBlock - Call allocateRenderResourcesAndReturnError This is bridged to the v2 API property kAudioUnitProperty_MIDIOutputEventListCallback.
     */
    MIDIOutputEventListBlock(): (arg0: number, arg1: number, arg2: NobjcObject) => number;
    setMIDIOutputEventListBlock$(value: (arg0: number, arg1: number, arg2: NobjcObject) => number): void;
    /**
     * @property AudioUnitMIDIProtocol @brief The MIDI protocol used by the Audio Unit for receiving MIDIEventList data. @discussion Subclassers should override to return the desired protocol in which the Audio Unit wants to receive input MIDI data, otherwise the Audio Unit will default to receiving legacy MIDI. All translatable messages will be converted (if necessary) to this protocol prior to delivery to the Audio Unit. This is bridged to the v2 API property kAudioUnitProperty_AudioUnitMIDIProtocol.
     */
    AudioUnitMIDIProtocol(): NobjcObject;
    /**
     * @property hostMIDIProtocol @brief The MIDI protocol to be used by the host for receiving MIDIEventList data. @discussion Hosts should set this property to the protocol they wish to receive MIDIEventList data from the Audio Unit. This should be set prior to initialization, all translatable messages will be converted (if necessary) to this property's protocol prior to delivery to the host. Host should setup in the following order: - Set hostMIDIProtocol - Set MIDIOutputEventListBlock - Call allocateRenderResourcesAndReturnError This is bridged to the v2 API property kAudioUnitProperty_HostMIDIProtocol. Notes: - If overriding this property, subclassers must call [super setHostMIDIProtocol:] - hostMIDIProtocol should be set before attempting to query AudioUnitMIDIProtocol or calling allocateRenderResourcesAndReturnError to allow Audio Units to optionally match their input MIDI protocol to the desired host protocol and prevent protocol conversion.
     */
    hostMIDIProtocol(): NobjcObject;
    setHostMIDIProtocol$(value: NobjcObject): void;
    /**
     * @property fullState @brief A persistable snapshot of the Audio Unit's properties and parameters, suitable for saving as a user preset. @discussion Hosts may use this property to save and restore the state of an Audio Unit being used in a user preset or document. The Audio Unit should not persist transitory properties such as stream formats, but should save and restore all parameters and custom properties. The base class implementation of this property saves the values of all parameters currently in the parameter tree. A subclass which dynamically produces multiple variants of the parameter tree needs to be aware that the serialization method does a depth-first preorder traversal of the tree. Bridged to the v2 property kAudioUnitProperty_ClassInfo.
     */
    fullState(): _NSDictionary | null;
    setFullState$(value: _NSDictionary | null): void;
    /**
     * @property fullStateForDocument @brief A persistable snapshot of the audio unit's properties and parameters, suitable for saving in a user's document. @discussion This property is distinct from fullState in that some state is suitable for saving in user presets, while other state is not. For example, a synthesizer's master tuning setting could be considered global state, inappropriate for storing in reusable presets, but desirable for storing in a document for a specific live performance. Hosts saving documents should use this property. If the audio unit does not implement it, the base class simply sets/gets fullState. Bridged to the v2 property kAudioUnitProperty_ClassInfoFromDocument.
     */
    fullStateForDocument(): _NSDictionary | null;
    setFullStateForDocument$(value: _NSDictionary | null): void;
    /**
     * @property factoryPresets @brief A collection of presets provided by the audio unit's developer. @discussion A preset provides users of an audio unit with an easily-selectable, fine-tuned set of parameters provided by the developer. This property returns all of the available factory presets. Bridged to the v2 property kAudioUnitProperty_FactoryPresets.
     */
    factoryPresets(): _NSArray | null;
    /**
     * @property userPresets @brief A collection of presets saved by the user @discussion In addition to factory presets, provided by the audio unit vendor, users have the ability to save the values of the parameters of an audio unit into a user preset. These users presets can be accessed using this property. The default implementation of this method will load the user presets from an internal location that might not be directly accessible to the audio unit host application or to the audio unit. Instead of accessing this path directly, the audio unit should rely on the superclass implementation of this method to retrieve the presets. Audio Units are free to override this method to load their user presets via different means (e.g. from their iCloud container).
     */
    userPresets(): _NSArray;
    /**
     * @property supportsUserPresets @brief Specifies whether an audio unit supports loading and saving user presets @discussion The audio unit should set this property to YES if a user preset can be assigned to currentPreset. Audio unit host applications should query this property to determine whether the audio unit supports user presets. Assigning a user preset to the currentPreset property of an audio unit that does not support restoring state from user presets may result in incorrect behavior.
     */
    supportsUserPresets(): boolean;
    /**
     * @property isLoadedInProcess @brief Set to YES when an AUAudioUnit is loaded in-process @discussion If the AUAudioUnit is instantiated with kAudioComponentInstantiation_LoadInProcess, but the audio unit is not packaged properly to support loading in-process, the system will silently fall back to loading the audio unit out-of-process. This property can be used to determine whether the instantiation succeeded as intended and the audio unit is running in-process. The presence of an extension process is not sufficient indication that the audio unit failed to load in-process, since the framework might launch the audio unit extension process to fulfill auxiliary functionality. If the audio unit is loaded in-process then rendering is done in the host process. Other operations that are not essential to rendering audio, might be done in the audio unit's extension process.
     */
    isLoadedInProcess(): boolean;
    /**
     * @property currentPreset @brief The audio unit's last-selected preset. @discussion Hosts can let the user select a preset by setting this property. Note that when getting this property, it does not reflect whether parameters may have been modified since the preset was selected. Bridged to the v2 property kAudioUnitProperty_PresentPreset.
     */
    currentPreset(): _AUAudioUnitPreset | null;
    setCurrentPreset$(value: _AUAudioUnitPreset | null): void;
    /**
     * @property latency @brief The audio unit's processing latency, in seconds. @discussion This property reflects the delay between when an impulse in the unit's audio unit stream arrives in the input vs. output streams. This should reflect the delay due to signal processing (e.g. filters, FFT's, etc.), not delay or reverberation which is being applied as an effect. Note that a latency that varies with parameter settings, including bypass, is generally not useful to hosts. A host is usually only prepared to add delays before starting to render and those delays need to be fixed. A variable delay would introduce artifacts even if the host could track it. If an algorithm has a variable latency it should be adjusted upwards to some fixed latency within the audio unit. If for some reason this is not possible, then latency could be regarded as an unavoidable consequence of the algorithm and left unreported (i.e. with a value of 0). Bridged to the v2 property kAudioUnitProperty_Latency.
     */
    latency(): number;
    /**
     * @property tailTime @brief The audio unit's tail time, in seconds. @discussion This property reflects the time interval between when the input stream ends or otherwise transitions to silence, and when the output stream becomes silent. Unlike latency, this should reflect the duration of a delay or reverb effect. Bridged to the v2 property kAudioUnitProperty_TailTime.
     */
    tailTime(): number;
    /**
     * @property renderQuality @brief Provides a trade-off between rendering quality and CPU load. @discussion The range of valid values is 0-127. Bridged to the v2 property kAudioUnitProperty_RenderQuality.
     */
    renderQuality(): number;
    setRenderQuality$(value: number): void;
    /**
     * @property shouldBypassEffect @brief Directs an effect to route input directly to output, without any processing. @discussion Bridged to the v2 property kAudioUnitProperty_BypassEffect.
     */
    shouldBypassEffect(): boolean;
    setShouldBypassEffect$(value: boolean): void;
    /**
     * @property canProcessInPlace @brief Expresses whether an audio unit can process in place. @discussion In-place processing is the ability for an audio unit to transform an input signal to an output signal in-place in the input buffer, without requiring a separate output buffer. A host can express its desire to process in place by using null mData pointers in the output buffer list. The audio unit may process in-place in the input buffers. See the discussion of renderBlock. Partially bridged to the v2 property kAudioUnitProperty_InPlaceProcessing; in v3 it is not settable. Defaults to NO. Subclassers can override to return YES.
     */
    canProcessInPlace(): boolean;
    /**
     * @property renderingOffline @brief Communicates to an audio unit that it is rendering offline. @discussion A host should set this property when using an audio unit in a context where there are no realtime deadlines, before asking the unit to allocate render resources. An audio unit may respond by using a more expensive signal processing algorithm, or allowing itself to block at render time if data being generated on secondary work threads is not ready in time. (Normally, in a realtime thread, this data would have to be dropped). Bridged to the v2 property kAudioUnitProperty_OfflineRender.
     */
    renderingOffline(): boolean;
    setRenderingOffline$(value: boolean): void;
    /**
     * @property channelCapabilities @brief Expresses valid combinations of input and output channel counts. @discussion Elements are NSNumber containing integers; [0]=input count, [1]=output count, [2]=2nd input count, [3]=2nd output count, etc. An input, output count of (2, 2) signifies that the audio unit can process 2 input channels to 2 output channels. Negative numbers (-1, -2) indicate *any* number of channels. (-1, -1) means any number of channels on input and output as long as they are the same. (-1, -2) means any number of channels on input or output, without the requirement that the counts are the same. A negative number less than -2 is used to indicate a total number of channels across every bus in that scope, regardless of how many channels are set on any particular bus. For example, (-16, 2) indicates that a unit can accept up to 16 channels of input across its input busses, but will only produce 2 channels of output. Zero on either side (though typically input) means "not applicable", because there are no elements on that side. Bridged to the v2 property kAudioUnitProperty_SupportedNumChannels.
     */
    channelCapabilities(): _NSArray | null;
    /**
     * @property musicalContextBlock @brief A callback for the AU to call the host for musical context information. @discussion Note that an audio unit implementation accessing this property should cache it in realtime-safe storage before beginning to render. Bridged to the HostCallback_GetBeatAndTempo and HostCallback_GetMusicalTimeLocation callback members in kAudioUnitProperty_HostCallbacks.
     */
    musicalContextBlock(): ((arg0: NobjcObject, arg1: NobjcObject, arg2: NobjcObject, arg3: NobjcObject, arg4: NobjcObject, arg5: NobjcObject) => boolean) | null;
    setMusicalContextBlock$(value: ((arg0: NobjcObject, arg1: NobjcObject, arg2: NobjcObject, arg3: NobjcObject, arg4: NobjcObject, arg5: NobjcObject) => boolean) | null): void;
    /**
     * @property transportStateBlock @brief A callback for the AU to call the host for transport state information. @discussion Note that an audio unit implementation accessing this property should cache it in realtime-safe storage before beginning to render. Bridged to the HostCallback_GetTransportState and HostCallback_GetTransportState2 callback members in kAudioUnitProperty_HostCallbacks.
     */
    transportStateBlock(): ((arg0: NobjcObject, arg1: NobjcObject, arg2: NobjcObject, arg3: NobjcObject) => boolean) | null;
    setTransportStateBlock$(value: ((arg0: NobjcObject, arg1: NobjcObject, arg2: NobjcObject, arg3: NobjcObject) => boolean) | null): void;
    /**
     * @property contextName @brief Information about the host context in which the audio unit is connected, for display in the audio unit's view. @discussion For example, a host could set "track 3" as the context, so that the audio unit's view could then display to the user "My audio unit on track 3". Bridged to the v2 property kAudioUnitProperty_ContextName.
     */
    contextName(): _NSString | null;
    setContextName$(value: _NSString | null): void;
    /**
     * @property migrateFromPlugin @brief Information for migrating data from other audio plug-ins to the v3 Audio Unit architecture. @discussion This can be used to migrate settings from an older Audio Unit; this allows manufacturers to deprecate older Audio Units and replace them with new ones. The data for the older Audio Unit is an array of NSData representing byte encoded AudioUnitOtherPluginDescs to migrate from. Can also be used to migrate from a v2 to a v3 Audio Unit. Bridged to the v2 property kAudioUnitMigrateProperty_FromPlugin.
     */
    migrateFromPlugin(): _NSArray;
    /**
     * @property supportsMPE @brief Specifies whether an audio unit supports Multi-dimensional Polyphonic Expression. @discussion Bridged to the v2 property kAudioUnitProperty_SupportsMPE.
     */
    supportsMPE(): boolean;
    /**
     * @property channelMap @brief Specify a mapping of input channels to output channels. @discussion Converter and input/output audio units may support re-ordering or splitting of input channels to output channels. The number of channels in the channel map is the number of channels of the destination (output format). The channel map entries contain a channel number of the source channel that should be mapped to that destination channel. If -1 is specified, then that destination channel will not contain any channel from the source (so it will be silent). If the property value is nil, then the audio unit does not support this property. Bridged to the v2 property kAudioOutputUnitProperty_ChannelMap.
     */
    channelMap(): _NSArray | null;
    setChannelMap$(value: _NSArray | null): void;
    /**
     * @property profileChangedBlock @brief A block called when a device notifies that a MIDI-CI profile has been enabled or disabled. @discussion Since enabling / disabling MIDI-CI profiles is an asynchronous operation, the host can set this block and the audio unit is expected to call it every time the state of a MIDI-CI profile has changed.
     */
    profileChangedBlock(): NobjcObject;
    setProfileChangedBlock$(value: NobjcObject): void;
    /** @property canPerformInput @brief Whether the I/O device can perform input. */
    canPerformInput(): boolean;
    /** @property canPerformOutput @brief Whether the I/O device can perform output. */
    canPerformOutput(): boolean;
    /**
     * @property inputEnabled @brief Flag enabling audio input from the unit. @discussion Input is disabled by default. This must be set to YES if input audio is desired. Setting to YES will have no effect if canPerformInput is false.
     */
    inputEnabled(): boolean;
    setInputEnabled$(value: boolean): void;
    /**
     * @property outputEnabled @brief Flag enabling audio output from the unit. @discussion Output is enabled by default. Setting to YES will have no effect if canPerformOutput is false.
     */
    outputEnabled(): boolean;
    setOutputEnabled$(value: boolean): void;
    /**
     * @property outputProvider @brief The block that the output unit will call to get audio to send to the output. @discussion This block must be set if output is enabled.
     */
    outputProvider(): ((arg0: NobjcObject, arg1: NobjcObject, arg2: number, arg3: number, arg4: NobjcObject) => number) | null;
    setOutputProvider$(value: ((arg0: NobjcObject, arg1: NobjcObject, arg2: number, arg3: number, arg4: NobjcObject) => number) | null): void;
    /**
     * @property inputHandler @brief The block that the output unit will call to notify when input is available. @discussion See discussion for AUInputHandler.
     */
    inputHandler(): ((arg0: NobjcObject, arg1: NobjcObject, arg2: number, arg3: number) => void) | null;
    setInputHandler$(value: ((arg0: NobjcObject, arg1: NobjcObject, arg2: number, arg3: number) => void) | null): void;
    /** @property device @brief Get the I/O hardware device. */
    deviceID(): number;
    /**
     * @property deviceInputLatency @brief The audio device's input latency, in seconds. @discussion Bridged to the HAL property kAudioDevicePropertyLatency, which is implemented by v2 input/output units.
     */
    deviceInputLatency(): number;
    /**
     * @property deviceOutputLatency @brief The audio device's output latency, in seconds. @discussion Bridged to the HAL property kAudioDevicePropertyLatency, which is implemented by v2 input/output units.
     */
    deviceOutputLatency(): number;
    /** @property running @brief The audio device's running state. */
    running(): boolean;
    /**
     * @property osWorkgroup @brief The os_workgroup_t to which the input/output audio unit belongs. @discussion For further background, see <AudioToolbox/AudioWorkInterval.h>. Bridged to the v2 property kAudioOutputUnitProperty_OSWorkgroup.
     */
    osWorkgroup(): NobjcObject;
    /**
     * The AUAudioUnit's intended spatial experience. Only useful for output AUAudioUnits - setting on a non-output AU is a no-op. The default value of CAAutomaticSpatialAudio means the output AUAudioUnit uses its AVAudioSession's spatial experience. See CASpatialAudioExperience for more details.
     */
    intendedSpatialExperience(): NobjcObject;
    setIntendedSpatialExperience$(value: NobjcObject): void;
    /** Block which subclassers must provide (via a getter) to implement rendering. */
    internalRenderBlock(): (arg0: NobjcObject, arg1: NobjcObject, arg2: number, arg3: number, arg4: NobjcObject, arg5: NobjcObject, arg6: (arg0: NobjcObject, arg1: NobjcObject, arg2: number, arg3: number, arg4: NobjcObject) => number) => number;
    /**
     * @property renderContextObserver @brief Block called by the OS when the rendering context changes. Audio Units which create auxiliary realtime rendering threads should implement this property to return a block which will be called by the OS when the render context changes. Audio Unit hosts must not attempt to interact with the AudioUnit through this block; it is for the exclusive use of the OS. See <AudioToolbox/AudioWorkInterval.h> for more information.
     */
    renderContextObserver(): NobjcObject;
    /**
     * @property MIDIOutputBufferSizeHint @brief Hint to control the size of the allocated buffer for outgoing MIDI events. @discussion This property allows the plug-in to provide a hint to the framework regarding the size of its outgoing MIDI data buffer. If the plug-in produces more MIDI output data than the default size of the allocated buffer, then the plug-in can provide this property to increase the size of this buffer. The value represents the number of 3-byte Legacy MIDI messages that fit into the buffer or a single MIDIEventList containing 1 MIDIEventPacket of 2 words when using MIDI 2.0 (MIDIEventList based API's). This property is set to the default value by the framework. In case of kAudioUnitErr_MIDIOutputBufferFull errors caused by producing too much MIDI output in one render call, set this property to increase the buffer. This only provides a recommendation to the framework. Bridged to kAudioUnitProperty_MIDIOutputBufferSizeHint.
     */
    MIDIOutputBufferSizeHint(): number;
    setMIDIOutputBufferSizeHint$(value: number): void;
}
