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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
//! # Bevy Kira audio //! //! This crate is an audio plugin for the game engine Bevy. It uses the library //! Kira to play audio and offers an API to control running audio. //! //! See the repository <https://github.com/NiklasEi/bevy_kira_audio/> for additional //! documentation and usage examples. //! ```edition2018 //! # use bevy_kira_audio::{AudioChannel, Audio, AudioPlugin}; //! # use bevy::prelude::*; //! fn main() { //! let mut app = App::build(); //! app //! .add_plugins(DefaultPlugins) //! .add_plugin(AudioPlugin) //! .add_startup_system(start_background_audio.system()); //! app.run(); //! } //! //! fn start_background_audio(asset_server: Res<AssetServer>, audio: Res<Audio>) { //! audio.play_looped(asset_server.load("background_audio.mp3")); //! } //! ``` #![forbid(unsafe_code)] #![deny(missing_docs, unused_imports)] use bevy::prelude::*; pub use audio::Audio; pub use source::AudioSource; mod audio; mod audio_output; mod channel; mod source; use crate::audio_output::{play_queued_audio_system, AudioOutput}; pub use channel::AudioChannel; #[cfg(feature = "flac")] use crate::source::FlacLoader; #[cfg(feature = "mp3")] use crate::source::Mp3Loader; #[cfg(feature = "ogg")] use crate::source::OggLoader; #[cfg(feature = "wav")] use crate::source::WavLoader; /// A Bevy plugin to add audio functionallity /// /// Add this plugin to your Bevy app to get access to /// the Audio resource /// ```edition2018 /// # use bevy_kira_audio::{AudioChannel, Audio, AudioPlugin}; /// # use bevy::prelude::*; /// fn main() { /// let mut app = App::build(); /// app /// .add_plugins(DefaultPlugins) /// .add_plugin(AudioPlugin) /// .add_startup_system(start_background_audio.system()); /// app.run(); /// } /// /// fn start_background_audio(asset_server: Res<AssetServer>, audio: Res<Audio>) { /// audio.play_looped(asset_server.load("background_audio.mp3")); /// } /// ``` #[derive(Default)] pub struct AudioPlugin; impl Plugin for AudioPlugin { fn build(&self, app: &mut AppBuilder) { app.init_thread_local_resource::<AudioOutput>() .add_asset::<AudioSource>(); #[cfg(feature = "mp3")] app.init_asset_loader::<Mp3Loader>(); #[cfg(feature = "ogg")] app.init_asset_loader::<OggLoader>(); #[cfg(feature = "wav")] app.init_asset_loader::<WavLoader>(); #[cfg(feature = "flac")] app.init_asset_loader::<FlacLoader>(); app.init_resource::<Audio>() .add_system_to_stage(stage::POST_UPDATE, play_queued_audio_system.system()); } }