use crate::{arc, at::au, av, define_obj_type, ns, objc};
#[cfg(feature = "blocks")]
use crate::blocks;
define_obj_type!(pub Node(ns::Id));
#[cfg(feature = "blocks")]
pub type AudioNodeTapBlock<Attr> = blocks::Block<fn(&av::AudioPcmBuf, &av::AudioTime), Attr>;
impl Node {
#[objc::msg_send(reset)]
pub fn reset(&self);
#[objc::msg_send(inputFormatForBus:)]
pub fn input_format_for_bus(&self, bus: av::AudioNodeBus) -> arc::R<av::AudioFormat>;
#[objc::msg_send(outputFormatForBus:)]
pub fn output_format_for_bus(&self, bus: av::AudioNodeBus) -> arc::R<av::AudioFormat>;
#[objc::msg_send(nameForInputBus:)]
pub fn name_for_input_bus(&self, bus: av::AudioNodeBus) -> Option<arc::R<ns::String>>;
#[objc::msg_send(engine)]
pub fn engine(&self) -> Option<arc::R<av::audio::Engine>>;
#[objc::msg_send(numberOfInputs)]
pub fn number_of_inputs(&self) -> usize;
#[objc::msg_send(numberOfOutputs)]
pub fn number_of_outputs(&self) -> usize;
#[objc::msg_send(lastRenderTime)]
pub fn last_render_time(&self) -> Option<av::AudioTime>;
#[objc::msg_send(AUAudioUnit)]
pub fn audio_unit(&self) -> arc::R<au::AudioUnit>;
#[objc::msg_send(latency)]
pub fn latency(&self) -> ns::TimeInterval;
#[objc::msg_send(outputPresentationLatency)]
pub fn output_presentation_latency(&self) -> ns::TimeInterval;
#[cfg(feature = "blocks")]
#[objc::msg_send(installTapOnBus:bufferSize:format:block:)]
pub unsafe fn install_tap_on_bus_block_throws(
&mut self,
bus: av::AudioNodeBus,
buffer_size: av::AudioFrameCount,
format: Option<&av::AudioFormat>,
tap_block: &mut AudioNodeTapBlock<blocks::Esc>,
);
#[cfg(feature = "blocks")]
#[inline]
pub unsafe fn install_tap_on_bus_throws(
&mut self,
bus: av::AudioNodeBus,
buffer_size: av::AudioFrameCount,
format: Option<&av::AudioFormat>,
tap_block: impl FnMut(&av::AudioPcmBuf, &av::AudioTime) + 'static,
) {
let mut tap_block = AudioNodeTapBlock::<blocks::Esc>::new2(tap_block);
unsafe { self.install_tap_on_bus_block_throws(bus, buffer_size, format, &mut tap_block) }
}
#[cfg(feature = "blocks")]
#[inline]
pub fn install_tap_on_bus<'ear>(
&mut self,
bus: av::AudioNodeBus,
buffer_size: av::AudioFrameCount,
format: Option<&av::AudioFormat>,
tap_block: impl FnMut(&av::AudioPcmBuf, &av::AudioTime) + 'static,
) -> ns::ExResult<'ear> {
let mut tap_block = AudioNodeTapBlock::<blocks::Esc>::new2(tap_block);
ns::try_catch(|| unsafe {
self.install_tap_on_bus_block_throws(bus, buffer_size, format, &mut tap_block)
})
}
#[objc::msg_send(removeTapOnBus:)]
pub unsafe fn remove_tap_on_bus_throws(&mut self, bus: av::AudioNodeBus);
pub fn remove_tap_on_bus<'ear>(&mut self, bus: av::AudioNodeBus) -> ns::ExResult<'ear> {
ns::try_catch(|| unsafe { self.remove_tap_on_bus_throws(bus) })
}
}