1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
use crate::*;

pub trait AudioSystemExt {
    /// Create the audio system, connected to the default audio output device.
    fn new_shared() -> Result<(AudioSystemHandle, AudioMainThreadState)>;

    /// Update the system's state.
    ///
    /// Updates all [`ClipPlayer`] fades. This must be called periodically for the [`AudioSystem`]
    /// to function. **Do not** call this if the `riddle` crate is being used.
    ///
    /// # Example
    /// ```no_run
    /// # use riddle_audio::{ext::*, *}; fn main() -> Result<(), AudioError> {
    /// let (audio_system, _audio_main_thread_state) = AudioSystem::new_shared()?;
    ///
    /// // Tick the audio system every 100ms
    /// let start_time = std::time::Instant::now();
    /// while std::time::Instant::now() - start_time < std::time::Duration::from_secs(2) {
    ///     audio_system.process_frame();
    ///     std::thread::sleep(std::time::Duration::from_millis(100));
    /// }
    /// # Ok(()) }
    /// ```
    fn process_frame(&self);
}