Skip to content

[Feature] Audio mixer for multiple simultaneous sounds #114

Description

@vmarcella

Overview

Implement an audio mixer that combines multiple sound instances into a single
output stream, enabling games to play music, sound effects, and UI sounds
simultaneously.

Current State

Requires basic sound playback. Current design may only support one sound at
a time.

Scope

Goals:

  • Mix multiple sound instances together
  • Support configurable number of simultaneous sounds
  • Per-instance volume applied before mixing
  • Master volume applied after mixing

Non-Goals:

  • Audio buses/groups (separate issue)
  • Effects sends (separate issue)
  • Ducking/priority system (separate issue)

Proposed API

pub struct AudioMixer {
  max_voices: usize,
  master_volume: f32,
}

pub struct AudioMixerBuilder {
  // configuration
}

impl AudioMixerBuilder {
  pub fn new() -> Self;
  pub fn with_max_voices(self, count: usize) -> Self;
  pub fn build(self) -> AudioMixer;
}

impl AudioMixer {
  pub fn play(&mut self, buffer: &SoundBuffer) -> Option<SoundInstance>;
  pub fn active_voice_count(&self) -> usize;
}

Acceptance Criteria

  • Play at least 32 sounds simultaneously
  • Sounds mix without clipping (normalize or limit)
  • Finished sounds free their voice slot
  • Return None when all voices are in use
  • Example playing multiple overlapping sounds

Affected Crates

lambda-rs, lambda-rs-platform

Notes

  • Consider voice stealing for when limit is reached
  • Sum samples and apply soft limiting to prevent clipping
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    audioAll things related to audioenhancementNew feature or requestlambda-rsIssues pertaining to the core frameworklambda-rs-platformIssues pertaining to the dependency & platform wrappers

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions