[][src]Crate kira

Kira

Kira is an audio library designed to help create expressive audio for games. Besides the common features you'd expect from an audio library, it provides interfaces for scripting audio events, seamlessly looping complex pieces of music, smoothly changing parameters, and more.

Usage

To use Kira, first create an AudioManager:

let mut audio_manager = AudioManager::new(AudioManagerSettings::default())?;

All audio-related actions go through the AudioManager.

Loading and playing a sound

let sound_id = audio_manager.load_sound("loop.ogg", PlayableSettings::default())?;
audio_manager.play(sound_id, InstanceSettings::default())?;

Looping a song while preserving trailing sounds

let sound_id = audio_manager.load_sound(
	std::env::current_dir()?.join("assets/loop.wav"),
	PlayableSettings {
		semantic_duration: Some(Tempo(140.0).beats_to_seconds(16.0)),
		..Default::default()
	},
)?;
let arrangement = Arrangement::new_loop(sound_id, LoopArrangementSettings::default());
let arrangement_id = audio_manager.add_arrangement(arrangement)?;
audio_manager.play(arrangement_id, InstanceSettings::default())?;

Scripting audio sequences

This example will play a kick drum sound every 4 beats and emit an event each time:

#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)]
enum CustomEvent {
	KickDrum,
}
let mut sequence = Sequence::<CustomEvent>::new(SequenceSettings::default());
sequence.start_loop();
sequence.wait_for_interval(4.0);
sequence.play(kick_drum_sound_id, InstanceSettings::default());
sequence.emit(CustomEvent::KickDrum);
let (id, mut event_receiver) = audio_manager.start_sequence(sequence, SequenceInstanceSettings::default())?;
// start the metronome so the sequence will have a pulse to listen for
audio_manager.start_metronome()?;
// pop events
while let Some(event) = event_receiver.pop() {
	println!("{:?}", event);
}

Modules

arrangement

Provides an interface for combining individual sounds into larger pieces.

audio_stream

Provides an interface for sending arbitrary audio data to a mixer track.

group

Provides an interface for controlling multiple instances and sequences at a time.

instance

Provides an interface to control "instances", or individual occurrences, of Sounds and Arrangements.

manager

Provides a bridge between the main thread and the audio thread.

mixer

Provides an interface for organizing and applying effects to sounds.

parameter

Provides an interface for smoothly changing values over time.

playable

Provides a wrapper around sounds and arrangements.

sequence

Provides an interface to script timed audio events.

sound

Provides an interface to work with pieces of audio.

Structs

CachedValue

A wrapper around Values that remembers the last valid raw value.

Frame

Represents an audio sample with a left and right channel.

MetronomeSettings

Settings for the metronome.

Tempo

Represents a tempo, or speed, of some music (in beats per minute).

Enums

AudioError

Something that can go wrong.

Duration

Represents a duration of time.

Event

An audio-related event that can be observed on the main thread.

Value

A value that something can be set to.

Type Definitions

AudioResult

A wrapper around the standard Result type that always has an AudioError as its error type.