oxygengine_audio/
resource.rs

1use core::{
2    assets::{asset::AssetId, database::AssetsDatabase},
3    ecs::Entity,
4    Scalar,
5};
6use std::sync::{atomic::AtomicBool, Arc};
7
8#[derive(Debug, Clone)]
9pub enum AudioPlayState {
10    Ended(bool),
11    State(bool),
12}
13
14#[derive(Debug, Clone)]
15pub struct AudioState {
16    pub current_time: Option<Scalar>,
17    pub is_playing: AudioPlayState,
18}
19
20pub trait Audio: Send + Sync {
21    #[allow(clippy::too_many_arguments)]
22    fn create_source(
23        &mut self,
24        entity: Entity,
25        data: &[u8],
26        streaming: bool,
27        looped: bool,
28        playback_rate: Scalar,
29        volume: Scalar,
30        play: bool,
31        notify_ready: Arc<AtomicBool>,
32    );
33    fn destroy_source(&mut self, entity: Entity);
34    fn has_source(&mut self, entity: Entity) -> bool;
35    fn update_source(
36        &mut self,
37        entity: Entity,
38        looped: bool,
39        playback_rate: Scalar,
40        volume: Scalar,
41        play: Option<bool>,
42    );
43    fn get_source_state(&self, entity: Entity) -> Option<AudioState>;
44    fn get_asset_id(&self, path: &str) -> Option<AssetId>;
45    fn update_cache(&mut self, _assets: &AssetsDatabase) {}
46}