Skip to main content

AudioBackend

Trait AudioBackend 

Source
pub trait AudioBackend: Send + Sync {
    // Required methods
    fn list_devices(&self) -> Result<Vec<DeviceInfo>, BackendError>;
    fn default_device(&self) -> Result<DeviceInfo, BackendError>;
    fn supported_sample_rates(
        &self,
        device: &DeviceInfo,
    ) -> Result<Vec<f64>, BackendError>;
    fn get_device_sample_rate(
        &self,
        device: &DeviceInfo,
    ) -> Result<f64, BackendError>;
    fn set_device_sample_rate(
        &self,
        device: &DeviceInfo,
        rate: f64,
    ) -> Result<f64, BackendError>;
    fn create_engine(
        &self,
        device: &DeviceInfo,
        sample_rate: f64,
        channels: u32,
        consumer: Consumer<f32>,
        samples_played: Arc<AtomicU64>,
    ) -> Result<Box<dyn AudioEngineHandle>, BackendError>;
}
Expand description

Trait abstracting platform audio output.

Implementations exist for CoreAudio (macOS) and cpal (Linux). The decode pipeline (rtrb ring buffer, Symphonia, PlaybackTimeline) is completely decoupled — backends are dumb consumers that drain the ring buffer.

Required Methods§

Source

fn list_devices(&self) -> Result<Vec<DeviceInfo>, BackendError>

List available output devices.

Source

fn default_device(&self) -> Result<DeviceInfo, BackendError>

Get the default output device.

Source

fn supported_sample_rates( &self, device: &DeviceInfo, ) -> Result<Vec<f64>, BackendError>

Query supported sample rates for a device.

Source

fn get_device_sample_rate( &self, device: &DeviceInfo, ) -> Result<f64, BackendError>

Get the current nominal sample rate of a device.

Source

fn set_device_sample_rate( &self, device: &DeviceInfo, rate: f64, ) -> Result<f64, BackendError>

Set the nominal sample rate of a device (for bit-perfect matching). Returns the actual device rate after the switch (may differ if unsupported). On Linux/cpal this is a no-op — the rate is set at stream creation.

Source

fn create_engine( &self, device: &DeviceInfo, sample_rate: f64, channels: u32, consumer: Consumer<f32>, samples_played: Arc<AtomicU64>, ) -> Result<Box<dyn AudioEngineHandle>, BackendError>

Create an audio engine targeting a device at a specific format. Takes ownership of the rtrb consumer.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§