oxygengine_audio/
resource.rs1use 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}