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();
        }
    }
});