Voice Rework -- Events, Track Queues (#806)
This implements a proof-of-concept for an improved audio frontend. The largest change is the introduction of events and event handling: both by time elapsed and by track events, such as ending or looping. Following on from this, the library now includes a basic, event-driven track queue system (which people seem to ask for unusually often). A new sample, `examples/13_voice_events`, demonstrates both the `TrackQueue` system and some basic events via the `~queue` and `~play_fade` commands. Locks are removed from around the control of `Audio` objects, which should allow the backend to be moved to a more granular futures-based backend solution in a cleaner way.
This commit is contained in:
22
src/tracks/looping.rs
Normal file
22
src/tracks/looping.rs
Normal file
@@ -0,0 +1,22 @@
|
||||
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
|
||||
/// Looping behaviour for a [`Track`].
|
||||
///
|
||||
/// [`Track`]: struct.Track.html
|
||||
pub enum LoopState {
|
||||
/// Track will loop endlessly until loop state is changed or
|
||||
/// manually stopped.
|
||||
Infinite,
|
||||
|
||||
/// Track will loop `n` more times.
|
||||
///
|
||||
/// `Finite(0)` is the `Default`, stopping the track once its [`Input`] ends.
|
||||
///
|
||||
/// [`Input`]: ../input/struct.Input.html
|
||||
Finite(usize),
|
||||
}
|
||||
|
||||
impl Default for LoopState {
|
||||
fn default() -> Self {
|
||||
Self::Finite(0)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user