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§
Sourcefn list_devices(&self) -> Result<Vec<DeviceInfo>, BackendError>
fn list_devices(&self) -> Result<Vec<DeviceInfo>, BackendError>
List available output devices.
Sourcefn default_device(&self) -> Result<DeviceInfo, BackendError>
fn default_device(&self) -> Result<DeviceInfo, BackendError>
Get the default output device.
Sourcefn supported_sample_rates(
&self,
device: &DeviceInfo,
) -> Result<Vec<f64>, BackendError>
fn supported_sample_rates( &self, device: &DeviceInfo, ) -> Result<Vec<f64>, BackendError>
Query supported sample rates for a device.
Sourcefn get_device_sample_rate(
&self,
device: &DeviceInfo,
) -> Result<f64, BackendError>
fn get_device_sample_rate( &self, device: &DeviceInfo, ) -> Result<f64, BackendError>
Get the current nominal sample rate of a device.
Sourcefn set_device_sample_rate(
&self,
device: &DeviceInfo,
rate: f64,
) -> Result<f64, BackendError>
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.
Sourcefn create_engine(
&self,
device: &DeviceInfo,
sample_rate: f64,
channels: u32,
consumer: Consumer<f32>,
samples_played: Arc<AtomicU64>,
) -> Result<Box<dyn AudioEngineHandle>, BackendError>
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".