use std::sync::Arc;
use std::sync::atomic::AtomicU64;
use super::backend::{AudioBackend, AudioEngineHandle, BackendError, DeviceInfo};
use super::engine;
pub struct IosAudioBackend;
fn current_route() -> DeviceInfo {
DeviceInfo {
name: "System Output".to_string(),
sample_rates: vec![44100.0, 48000.0],
platform_id: 0,
}
}
impl AudioBackend for IosAudioBackend {
fn list_devices(&self) -> Result<Vec<DeviceInfo>, BackendError> {
Ok(vec![current_route()])
}
fn default_device(&self) -> Result<DeviceInfo, BackendError> {
Ok(current_route())
}
fn supported_sample_rates(&self, _device: &DeviceInfo) -> Result<Vec<f64>, BackendError> {
Ok(current_route().sample_rates)
}
fn get_device_sample_rate(&self, _device: &DeviceInfo) -> Result<f64, BackendError> {
Ok(0.0)
}
fn set_device_sample_rate(&self, _device: &DeviceInfo, rate: f64) -> Result<f64, BackendError> {
Ok(rate)
}
fn create_engine(
&self,
_device: &DeviceInfo,
sample_rate: f64,
channels: u32,
consumer: rtrb::Consumer<f32>,
samples_played: Arc<AtomicU64>,
) -> Result<Box<dyn AudioEngineHandle>, BackendError> {
let engine = engine::AudioEngine::new(0, sample_rate, channels, consumer, samples_played)
.map_err(|e| BackendError::StreamCreation(e.to_string()))?;
Ok(Box::new(engine))
}
}