Sound
micro::audio::sound loads an audio file and creates a dedicated playback
track in one step. It works for both short sound effects and longer
music tracks.
Loading
// From file:
auto laser = micro::audio::sound::load(mix, "assets/laser.wav");
auto music = micro::audio::sound::load(mix, "assets/theme.ogg");
// From memory (e.g. an embedded asset):
auto laser = micro::audio::sound::load(mix, {laser_wav, laser_wav_size});
Supported formats depend on the decoders compiled into SDL_mixer. The default micro build includes WAV, OGG (stb_vorbis), MP3 (dr_mp3), and FLAC (dr_flac).
Playback control
snd.play(); // start from the beginning (restarts if already playing)
snd.stop(); // stop immediately
snd.pause(); // pause (position is preserved)
snd.resume(); // resume from where it was paused
bool active = snd.playing(); // true if playing and not paused
bool held = snd.paused(); // true if paused
Looping
music.set_looping(true); // repeat forever
music.play();
music.set_looping(false); // play once (default)
if (music.looping()) { ... }
set_looping must be called before play() to affect the current playback.
Per-track gain
laser.set_gain(0.6f); // quieter than master
float v = laser.gain(); // 1.0f by default
Per-track gain is multiplied with the master gain set on the mixer.
Typical patterns
One-shot sound effect
auto laser = micro::audio::sound::load(mix, "assets/laser.wav");
win.run([&](float) {
if (kb.is_key_pressed(micro::key::space)) {
laser.play();
}
});
Looping background music
auto music = micro::audio::sound::load(mix, "assets/theme.ogg");
music.set_looping(true);
music.play();
win.run([&](float) {
if (kb.is_key_pressed(micro::key::m)) {
if (music.paused()) {
music.resume();
} else {
music.pause();
}
}
});