com.bugvm.apple.audiounit.AudioUnit Maven / Gradle / Ivy
The newest version!
/*
* Copyright (C) 2013-2015 RoboVM AB
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.bugvm.apple.audiounit;
/**/
import java.io.*;
import java.nio.*;
import java.util.*;
import com.bugvm.objc.*;
import com.bugvm.objc.annotation.*;
import com.bugvm.objc.block.*;
import com.bugvm.rt.*;
import com.bugvm.rt.annotation.*;
import com.bugvm.rt.bro.*;
import com.bugvm.rt.bro.annotation.*;
import com.bugvm.rt.bro.ptr.*;
import com.bugvm.apple.foundation.*;
import com.bugvm.apple.audiotoolbox.*;
import com.bugvm.apple.corefoundation.*;
import com.bugvm.apple.coreaudio.*;
import com.bugvm.apple.uikit.*;
/* */
/**/
/* */
/**/@Library("AudioToolbox")/* */
/**/public/* */ class /**/AudioUnit/* */
extends /**/AudioComponentInstance/* */
/**//* */ {
/**/public static class AudioUnitPtr extends Ptr {}/* */
private static java.util.concurrent.atomic.AtomicLong callbackId = new java.util.concurrent.atomic.AtomicLong();
private static LongMap propertyListeners = new LongMap<>();
private static final java.lang.reflect.Method cbPropertyChanged;
private static LongMap renderCallbacks = new LongMap<>();
private static final java.lang.reflect.Method cbRender;
private static LongMap hostCallbacks = new LongMap<>();
private static final java.lang.reflect.Method cbHostGetBeatAndTempo;
private static final java.lang.reflect.Method cbHostGetMusicalTimeLocation;
private static final java.lang.reflect.Method cbHostGetTransportState;
private static final java.lang.reflect.Method cbHostGetTransportState2;
private static LongMap isioCallbacks = new LongMap<>();
private static final java.lang.reflect.Method cbInputSamplesInOutput;
private static LongMap midiCallbacks;
private static final java.lang.reflect.Method cbMIDIEvent;
private static final java.lang.reflect.Method cbMIDISysEx;
static {
try {
cbPropertyChanged = AudioUnit.class.getDeclaredMethod("cbPropertyChanged", Long.TYPE, AudioUnit.class, AUPropertyType.class, AUScope.class, Integer.TYPE);
cbRender = AudioUnit.class.getDeclaredMethod("cbRender", Long.TYPE, AUMutableRenderActionFlags.class, AudioTimeStamp.class, Integer.TYPE, Integer.TYPE, AudioBufferList.class);
cbHostGetBeatAndTempo = AudioUnit.class.getDeclaredMethod("cbHostGetBeatAndTempo", Long.TYPE, DoublePtr.class, DoublePtr.class);
cbHostGetMusicalTimeLocation = AudioUnit.class.getDeclaredMethod("cbHostGetMusicalTimeLocation", Long.TYPE, IntPtr.class, FloatPtr.class, IntPtr.class, DoublePtr.class);
cbHostGetTransportState = AudioUnit.class.getDeclaredMethod("cbHostGetTransportState", Long.TYPE, BooleanPtr.class, BooleanPtr.class, DoublePtr.class, BooleanPtr.class, DoublePtr.class, DoublePtr.class);
cbHostGetTransportState2 = AudioUnit.class.getDeclaredMethod("cbHostGetTransportState", Long.TYPE, BooleanPtr.class, BooleanPtr.class, BooleanPtr.class, DoublePtr.class, BooleanPtr.class, DoublePtr.class, DoublePtr.class);
cbInputSamplesInOutput = AudioUnit.class.getDeclaredMethod("cbInputSamplesInOutput", Long.TYPE, AudioTimeStamp.class, Double.TYPE, Double.TYPE);
cbMIDIEvent = AudioUnit.class.getDeclaredMethod("cbMIDIEvent", Long.TYPE, Integer.TYPE, Integer.TYPE, Integer.TYPE, Integer.TYPE);
cbMIDISysEx = AudioUnit.class.getDeclaredMethod("cbMIDISysEx", Long.TYPE, BytePtr.class, Integer.TYPE);
} catch (Throwable e) {
throw new Error(e);
}
}
/**/static { Bro.bind(AudioUnit.class); }/* */
/**//* */
/**/
protected AudioUnit() {}
/* */
/**//* */
/**//* */
@Callback
private static void cbPropertyChanged(@Pointer long refCon, AudioUnit unit, AUPropertyType id, AUScope scope, int element) {
synchronized (propertyListeners) {
propertyListeners.get(refCon).onChange(unit, id, scope, element);
}
}
@Callback
private static OSStatus cbRender(@Pointer long refCon, AUMutableRenderActionFlags actionFlags, AudioTimeStamp timeStamp, int busNumber, int numberFrames, AudioBufferList data) {
synchronized (renderCallbacks) {
OSStatus status = OSStatus.NO_ERR;
try {
renderCallbacks.get(refCon).onRender(actionFlags, timeStamp, busNumber, numberFrames, data);
} catch (OSStatusException e) {
status = e.getStatus();
}
return status;
}
}
@Callback
private static OSStatus cbHostGetBeatAndTempo(@Pointer long userData, DoublePtr currentBeat, DoublePtr currentTempo) {
synchronized (hostCallbacks) {
return hostCallbacks.get(userData).getBeatAndTempo(currentBeat, currentTempo);
}
}
@Callback
private static OSStatus cbHostGetMusicalTimeLocation(@Pointer long userData, IntPtr deltaSampleOffsetToNextBeat, FloatPtr timeSigNumerator,
IntPtr timeSigDenominator, DoublePtr currentMeasureDownBeat) {
synchronized (hostCallbacks) {
return hostCallbacks.get(userData).getMusicalTimeLocation(deltaSampleOffsetToNextBeat, timeSigNumerator, timeSigDenominator, currentMeasureDownBeat);
}
}
@Callback
private static OSStatus cbHostGetTransportState(@Pointer long userData, BooleanPtr isPlaying, BooleanPtr transportStateChanged,
DoublePtr currentSampleInTimeLine, BooleanPtr isCycling, DoublePtr cycleStartBeat, DoublePtr cycleEndBeat) {
synchronized (hostCallbacks) {
return hostCallbacks.get(userData).getTransportState(isPlaying, transportStateChanged, currentSampleInTimeLine, isCycling, cycleStartBeat, cycleEndBeat);
}
}
@Callback
private static OSStatus cbHostGetTransportState(@Pointer long userData, BooleanPtr isPlaying, BooleanPtr isRecording, BooleanPtr transportStateChanged,
DoublePtr currentSampleInTimeLine, BooleanPtr isCycling, DoublePtr cycleStartBeat, DoublePtr cycleEndBeat) {
synchronized (hostCallbacks) {
return hostCallbacks.get(userData).getTransportState2(isPlaying, isRecording, transportStateChanged, currentSampleInTimeLine, isCycling, cycleStartBeat, cycleEndBeat);
}
}
@Callback
private static void cbInputSamplesInOutput(@Pointer long refCon, AudioTimeStamp outputTimeStamp, double inputSample, double numberInputSamples) {
synchronized (isioCallbacks) {
isioCallbacks.get(refCon).invoke(outputTimeStamp, inputSample, numberInputSamples);
}
}
@Callback
private static void cbMIDIEvent(@Pointer long userData, int status, int data1, int data2, int offsetSampleFrame) {
synchronized (midiCallbacks) {
midiCallbacks.get(userData).onMIDIEvent(status, data1, data2, offsetSampleFrame);
}
}
@Callback
private static void cbMIDISysEx(@Pointer long userData, BytePtr data, int length) {
synchronized (midiCallbacks) {
midiCallbacks.get(userData).onMIDISysEx(data.toByteArray(length));
}
}
/**
* @throws OSStatusException
* @since Available in iOS 2.0 and later.
*/
public static AudioUnit create(AudioComponent component) throws OSStatusException {
AudioComponentInstance result = AudioComponentInstance.create(component);
if (result != null) {
return result.as(AudioUnit.class);
}
return null;
}
/**
* @since Available in iOS 3.0 and later.
*/
public boolean canDo(AUSelector selector) {
return super.canDo((short) selector.value());
}
/**
* @since Available in iOS 3.0 and later.
*/
public boolean canDo(AUOutputSelector selector) {
return super.canDo((short) selector.value());
}
/**
* @throws OSStatusException
* @since Available in iOS 2.0 and later.
*/
public void initialize() throws OSStatusException {
OSStatus status = initialize0();
OSStatusException.throwIfNecessary(status);
}
/**
* @throws OSStatusException
* @since Available in iOS 2.0 and later.
*/
public void uninitialize() throws OSStatusException {
OSStatus status = uninitialize0();
OSStatusException.throwIfNecessary(status);
}
/**
* @throws OSStatusException
* @since Available in iOS 2.0 and later.
*/
public int getPropertySize(AUPropertyType type, AUScope scope) throws OSStatusException {
return getPropertySize(type, scope, 0);
}
/**
* @throws OSStatusException
* @since Available in iOS 2.0 and later.
*/
public int getPropertySize(AUPropertyType type, AUScope scope, int element) throws OSStatusException {
IntPtr ptr = new IntPtr();
OSStatus status = getPropertyInfo0(type, scope, element, ptr, null);
OSStatusException.throwIfNecessary(status);
return ptr.get();
}
/**
* @throws OSStatusException
* @since Available in iOS 2.0 and later.
*/
public boolean isPropertyWritable(AUPropertyType type, AUScope scope) throws OSStatusException {
return isPropertyWritable(type, scope, 0);
}
/**
* @throws OSStatusException
* @since Available in iOS 2.0 and later.
*/
public boolean isPropertyWritable(AUPropertyType type, AUScope scope, int element) throws OSStatusException {
BooleanPtr ptr = new BooleanPtr();
OSStatus status = getPropertyInfo0(type, scope, element, null, ptr);
OSStatusException.throwIfNecessary(status);
return ptr.get();
}
/**
* @throws OSStatusException
* @since Available in iOS 2.0 and later.
*/
public > T getProperty(AUPropertyType type, Class returnType, AUScope scope) throws OSStatusException {
return getProperty(type, returnType, scope, 0);
}
/**
* @throws OSStatusException
* @since Available in iOS 2.0 and later.
*/
public > T getProperty(AUPropertyType type, Class returnType, AUScope scope, int element) throws OSStatusException {
T data = Struct.allocate(returnType);
IntPtr dataSize = new IntPtr(Struct.sizeOf(data));
OSStatus status = getProperty0(type, scope, element, data.as(VoidPtr.class), dataSize);
OSStatusException.throwIfNecessary(status);
return data;
}
/**
* @throws OSStatusException
* @since Available in iOS 2.0 and later.
*/
public > void setProperty(AUPropertyType type, Struct data, AUScope scope) throws OSStatusException {
setProperty(type, data, scope, 0);
}
/**
* @throws OSStatusException
* @since Available in iOS 2.0 and later.
*/
public > void setProperty(AUPropertyType type, Struct data, AUScope scope, int element) throws OSStatusException {
OSStatus status = setProperty0(type, scope, element, data == null ? null : data.as(VoidPtr.class), data == null ? 0 : Struct.sizeOf(data));
OSStatusException.throwIfNecessary(status);
}
public int getPropertyAsInt(AUPropertyType type, AUScope scope) throws OSStatusException {
IntPtr ptr = getProperty(type, IntPtr.class, scope);
return ptr.get();
}
public long getPropertyAsLong(AUPropertyType type, AUScope scope) throws OSStatusException {
LongPtr ptr = getProperty(type, LongPtr.class, scope);
return ptr.get();
}
public float getPropertyAsFloat(AUPropertyType type, AUScope scope) throws OSStatusException {
FloatPtr ptr = getProperty(type, FloatPtr.class, scope);
return ptr.get();
}
public double getPropertyAsDouble(AUPropertyType type, AUScope scope) throws OSStatusException {
DoublePtr ptr = getProperty(type, DoublePtr.class, scope);
return ptr.get();
}
public void setProperty(AUPropertyType type, int value, AUScope scope) throws OSStatusException {
setProperty(type, new IntPtr(value), scope);
}
public void setProperty(AUPropertyType type, long value, AUScope scope) throws OSStatusException {
setProperty(type, new LongPtr(value), scope);
}
public void setProperty(AUPropertyType type, float value, AUScope scope) throws OSStatusException {
setProperty(type, new FloatPtr(value), scope);
}
public void setProperty(AUPropertyType type, double value, AUScope scope) throws OSStatusException {
setProperty(type, new DoublePtr(value), scope);
}
/* Convenience methods for getting/setting properties */
public int getMaxFramesPerSlice(AUScope scope) throws OSStatusException {
return getPropertyAsInt(AUGenericProperty.MaximumFramesPerSlice, scope);
}
public void setMaxFramesPerSlice(int maxFramesPerSlice, AUScope scope) throws OSStatusException {
setProperty(AUGenericProperty.MaximumFramesPerSlice, maxFramesPerSlice, scope);
}
public AudioStreamBasicDescription getStreamFormat(AUScope scope) throws OSStatusException {
return getProperty(AUGenericProperty.StreamFormat, AudioStreamBasicDescription.class, scope);
}
public void setStreamFormat(AudioStreamBasicDescription streamFormat, AUScope scope) throws OSStatusException {
setProperty(AUGenericProperty.StreamFormat, streamFormat, scope);
}
public void makeConnection(AUConnection connection, AUScope scope) throws OSStatusException {
setProperty(AUGenericProperty.MakeConnection, connection, scope);
}
public void setRenderCallback(AURenderCallback callback, AUScope scope) throws OSStatusException {
long cid = callbackId.getAndIncrement();
AURenderCallbackStruct struct = new AURenderCallbackStruct(new FunctionPtr(cbRender), cid);
setProperty(AUGenericProperty.SetRenderCallback, struct, scope);
synchronized (renderCallbacks) {
renderCallbacks.put(cid, callback);
}
}
public void setHostCallback(AUHostCallback callback, AUScope scope) throws OSStatusException {
long cid = callbackId.getAndIncrement();
AUHostCallbackInfo struct = new AUHostCallbackInfo(cid, new FunctionPtr(cbHostGetBeatAndTempo),
new FunctionPtr(cbHostGetMusicalTimeLocation), new FunctionPtr(cbHostGetTransportState), new FunctionPtr(cbHostGetTransportState2));
setProperty(AUGenericProperty.HostCallbacks, struct, scope);
synchronized (hostCallbacks) {
hostCallbacks.put(cid, callback);
}
}
public AUInputSamplesInOutputCallback getInputSamplesInOutputCallback(AUScope scope) throws OSStatusException {
AUInputSamplesInOutputCallbackStruct struct = getProperty(AUGenericProperty.InputSamplesInOutput, AUInputSamplesInOutputCallbackStruct.class, scope);
AUInputSamplesInOutputCallback result = null;
if (struct != null) {
synchronized (isioCallbacks) {
result = isioCallbacks.get(struct.getUserData());
}
}
return result;
}
public void setInputSamplesInOutputCallback(AUInputSamplesInOutputCallback callback, AUScope scope) throws OSStatusException {
long cid = callbackId.getAndIncrement();
AUInputSamplesInOutputCallbackStruct struct = new AUInputSamplesInOutputCallbackStruct(new FunctionPtr(cbInputSamplesInOutput), cid);
setProperty(AUGenericProperty.InputSamplesInOutput, struct, scope);
synchronized (isioCallbacks) {
isioCallbacks.put(cid, callback);
}
}
public void scheduleAudioSlice(AUScheduledAudioSlice slice, AUScope scope) throws OSStatusException {
setProperty(AUScheduledSoundPlayerProperty.ScheduleAudioSlice, slice, scope);
}
public void scheduleAudioFileRegion(AUScheduledAudioFileRegion region, AUScope scope) throws OSStatusException {
setProperty(AUAudioFilePlayerProperty.ScheduledFileRegion, region, scope);
}
public AUOutputMIDICallback getMIDICallbacks(AUScope scope) throws OSStatusException {
AUOutputMIDICallbacksStruct struct = getProperty(AUOutputProperty.MIDICallbacks, AUOutputMIDICallbacksStruct.class, scope);
AUOutputMIDICallback result = null;
if (struct != null) {
synchronized (midiCallbacks) {
result = midiCallbacks.get(struct.getUserData());
}
}
return result;
}
public void setMIDICallbacks(AUOutputMIDICallback callback, AUScope scope) throws OSStatusException {
AUOutputMIDICallbacksStruct struct = null;
if (callback == null) {
struct = getProperty(AUOutputProperty.MIDICallbacks, AUOutputMIDICallbacksStruct.class, scope);
if (struct != null) {
setProperty(AUOutputProperty.MIDICallbacks, null, scope);
synchronized (midiCallbacks) {
midiCallbacks.remove(struct.getUserData());
}
}
} else {
long cid = callbackId.getAndIncrement();
struct = new AUOutputMIDICallbacksStruct(cid, new FunctionPtr(cbMIDIEvent), new FunctionPtr(cbMIDISysEx));
setProperty(AUOutputProperty.MIDICallbacks, struct, scope);
synchronized (midiCallbacks) {
midiCallbacks.put(cid, callback);
}
}
}
/* End: Convenience methods for getting/setting properties */
/**
* @throws OSStatusException
* @since Available in iOS 2.0 and later.
*/
public void addPropertyListener(AUPropertyType id, AUPropertyListener listener) throws OSStatusException {
long cid = callbackId.getAndIncrement();
OSStatus status = addPropertyListener0(id, new FunctionPtr(cbPropertyChanged), cid);
if (OSStatusException.throwIfNecessary(status)) {
synchronized (propertyListeners) {
propertyListeners.put(cid, listener);
}
}
}
/**
* @throws OSStatusException
* @since Available in iOS 2.0 and later.
*/
public void removePropertyListener(AUPropertyType id, AUPropertyListener listener) throws OSStatusException {
synchronized (propertyListeners) {
for (Iterator> it = propertyListeners.entries().iterator(); it.hasNext();) {
LongMap.Entry entry = it.next();
if (entry.value == listener) {
OSStatus status = removePropertyListener0(id, new FunctionPtr(cbPropertyChanged), entry.key);
OSStatusException.throwIfNecessary(status);
}
}
}
}
/**
* @throws OSStatusException
* @since Available in iOS 2.0 and later.
*/
public void addRenderNotify(AURenderCallback callback) throws OSStatusException {
long cid = callbackId.getAndIncrement();
OSStatus status = addRenderNotify0(new FunctionPtr(cbRender), cid);
if (OSStatusException.throwIfNecessary(status)) {
synchronized (renderCallbacks) {
renderCallbacks.put(cid, callback);
}
}
}
/**
* @throws OSStatusException
* @since Available in iOS 2.0 and later.
*/
public void removeRenderNotify(AURenderCallback callback) throws OSStatusException {
synchronized (renderCallbacks) {
for (Iterator> it = renderCallbacks.entries().iterator(); it.hasNext();) {
LongMap.Entry entry = it.next();
if (entry.value == callback) {
OSStatus status = removeRenderNotify0(new FunctionPtr(cbRender), entry.key);
OSStatusException.throwIfNecessary(status);
}
}
}
}
/**
* @throws OSStatusException
* @since Available in iOS 2.0 and later.
*/
public float getParameter(AUParameterType type, AUScope scope) throws OSStatusException {
return getParameter(type, scope, 0);
}
/**
* @throws OSStatusException
* @since Available in iOS 2.0 and later.
*/
public float getParameter(AUParameterType type, AUScope scope, int element) throws OSStatusException {
FloatPtr ptr = new FloatPtr();
OSStatus status = getParameter0(type, scope, element, ptr);
OSStatusException.throwIfNecessary(status);
return ptr.get();
}
/**
* @throws OSStatusException
* @since Available in iOS 2.0 and later.
*/
public void setParameter(AUParameterType type, float value, AUScope scope) throws OSStatusException {
setParameter(type, value, scope, 0, 0);
}
/**
* @throws OSStatusException
* @since Available in iOS 2.0 and later.
*/
public void setParameter(AUParameterType type, float value, AUScope scope, int element, int bufferOffsetInFrames) throws OSStatusException {
OSStatus status = setParameter0(type, scope, element, value, bufferOffsetInFrames);
OSStatusException.throwIfNecessary(status);
}
/**
* @throws OSStatusException
* @since Available in iOS 2.0 and later.
*/
public void render(AURenderActionFlags actionFlags, AudioTimeStamp timeStamp, int outputBusNumber, int numberFrames, AudioBufferList data) throws OSStatusException {
render(new AUMutableRenderActionFlags(actionFlags), timeStamp, outputBusNumber, numberFrames, data);
}
/**
* @throws OSStatusException
* @since Available in iOS 2.0 and later.
*/
public void render(AUMutableRenderActionFlags actionFlags, AudioTimeStamp timeStamp, int outputBusNumber, int numberFrames, AudioBufferList data) throws OSStatusException {
OSStatus status = render0(actionFlags, timeStamp, outputBusNumber, numberFrames, data);
OSStatusException.throwIfNecessary(status);
}
/**
* @throws OSStatusException
* @since Available in iOS 6.0 and later.
*/
public void process(AUMutableRenderActionFlags actionFlags, AudioTimeStamp timeStamp, int numberFrames, AudioBufferList data) throws OSStatusException {
OSStatus status = process0(actionFlags, timeStamp, numberFrames, data);
OSStatusException.throwIfNecessary(status);
}
// /**
// * @since Available in iOS 6.0 and later.
// */
// @Bridge(symbol="AudioUnitProcessMultiple", optional=true) TODO
// protected native OSStatus processMultiple0(AUMutableRenderActionFlags actionFlags, AudioTimeStamp inTimeStamp, int inNumberFrames, int inNumberInputBufferLists, AudioBufferList.AudioBufferListPtr inInputBufferLists, int inNumberOutputBufferLists, AudioBufferList.AudioBufferListPtr ioOutputBufferLists);
/**
* @throws OSStatusException
* @since Available in iOS 2.0 and later.
*/
public void reset(AUScope scope, int element) throws OSStatusException {
OSStatus status = reset0(scope, element);
OSStatusException.throwIfNecessary(status);
}
/**
* @throws OSStatusException
* @since Available in iOS 7.0 and later.
*/
public void publishOutput(AudioComponentDescription desc, String name, int version) throws OSStatusException {
OSStatus status = publishOutput0(desc, name, version, this);
OSStatusException.throwIfNecessary(status);
}
/**
* @throws OSStatusException
* @since Available in iOS 2.0 and later.
*/
public void startOutput() throws OSStatusException {
OSStatus status = startOutput0();
OSStatusException.throwIfNecessary(status);
}
/**
* @throws OSStatusException
* @since Available in iOS 2.0 and later.
*/
public void stopOutput() throws OSStatusException {
OSStatus status = stopOutput0();
OSStatusException.throwIfNecessary(status);
}
/**/
/**
* @since Available in iOS 2.0 and later.
*/
@Bridge(symbol="AudioUnitInitialize", optional=true)
protected native OSStatus initialize0();
/**
* @since Available in iOS 2.0 and later.
*/
@Bridge(symbol="AudioUnitUninitialize", optional=true)
protected native OSStatus uninitialize0();
/**
* @since Available in iOS 2.0 and later.
*/
@Bridge(symbol="AudioUnitGetPropertyInfo", optional=true)
protected native OSStatus getPropertyInfo0(AUPropertyType inID, AUScope inScope, int inElement, IntPtr outDataSize, BooleanPtr outWritable);
/**
* @since Available in iOS 2.0 and later.
*/
@Bridge(symbol="AudioUnitGetProperty", optional=true)
protected native OSStatus getProperty0(AUPropertyType inID, AUScope inScope, int inElement, VoidPtr outData, IntPtr ioDataSize);
/**
* @since Available in iOS 2.0 and later.
*/
@Bridge(symbol="AudioUnitSetProperty", optional=true)
protected native OSStatus setProperty0(AUPropertyType inID, AUScope inScope, int inElement, VoidPtr inData, int inDataSize);
/**
* @since Available in iOS 2.0 and later.
*/
@Bridge(symbol="AudioUnitAddPropertyListener", optional=true)
protected native OSStatus addPropertyListener0(AUPropertyType inID, FunctionPtr inProc, @Pointer long inProcUserData);
/**
* @since Available in iOS 2.0 and later.
*/
@Bridge(symbol="AudioUnitRemovePropertyListenerWithUserData", optional=true)
protected native OSStatus removePropertyListener0(AUPropertyType inID, FunctionPtr inProc, @Pointer long inProcUserData);
/**
* @since Available in iOS 2.0 and later.
*/
@Bridge(symbol="AudioUnitAddRenderNotify", optional=true)
protected native OSStatus addRenderNotify0(FunctionPtr inProc, @Pointer long inProcUserData);
/**
* @since Available in iOS 2.0 and later.
*/
@Bridge(symbol="AudioUnitRemoveRenderNotify", optional=true)
protected native OSStatus removeRenderNotify0(FunctionPtr inProc, @Pointer long inProcUserData);
/**
* @since Available in iOS 2.0 and later.
*/
@Bridge(symbol="AudioUnitGetParameter", optional=true)
protected native OSStatus getParameter0(AUParameterType inID, AUScope inScope, int inElement, FloatPtr outValue);
/**
* @since Available in iOS 2.0 and later.
*/
@Bridge(symbol="AudioUnitSetParameter", optional=true)
protected native OSStatus setParameter0(AUParameterType inID, AUScope inScope, int inElement, float inValue, int inBufferOffsetInFrames);
/**
* @since Available in iOS 2.0 and later.
*/
@Bridge(symbol="AudioUnitRender", optional=true)
protected native OSStatus render0(AUMutableRenderActionFlags actionFlags, AudioTimeStamp inTimeStamp, int inOutputBusNumber, int inNumberFrames, AudioBufferList ioData);
/**
* @since Available in iOS 6.0 and later.
*/
@Bridge(symbol="AudioUnitProcess", optional=true)
protected native OSStatus process0(AUMutableRenderActionFlags actionFlags, AudioTimeStamp inTimeStamp, int inNumberFrames, AudioBufferList ioData);
/**
* @since Available in iOS 6.0 and later.
*/
@Bridge(symbol="AudioUnitProcessMultiple", optional=true)
protected native OSStatus processMultiple0(AUMutableRenderActionFlags actionFlags, AudioTimeStamp inTimeStamp, int inNumberFrames, int inNumberInputBufferLists, AudioBufferList.AudioBufferListPtr inInputBufferLists, int inNumberOutputBufferLists, AudioBufferList.AudioBufferListPtr ioOutputBufferLists);
/**
* @since Available in iOS 2.0 and later.
*/
@Bridge(symbol="AudioUnitReset", optional=true)
protected native OSStatus reset0(AUScope inScope, int inElement);
/**
* @since Available in iOS 7.0 and later.
*/
@Bridge(symbol="AudioOutputUnitPublish", optional=true)
protected static native OSStatus publishOutput0(AudioComponentDescription inDesc, String inName, int inVersion, AudioUnit inOutputUnit);
/**
* @since Available in iOS 7.0 and later.
*/
@WeaklyLinked
@Bridge(symbol="AudioOutputUnitGetHostIcon", optional=true)
public native UIImage getOutputHostIcon(float desiredPointSize);
/**
* @since Available in iOS 2.0 and later.
*/
@Bridge(symbol="AudioOutputUnitStart", optional=true)
protected native OSStatus startOutput0();
/**
* @since Available in iOS 2.0 and later.
*/
@Bridge(symbol="AudioOutputUnitStop", optional=true)
protected native OSStatus stopOutput0();
/* */
}