Skip to content

Conversation

@vmarcella
Copy link
Member

Summary

Related Issues

Changes

Add Symphonia wrapper in lambda-rs-platform for WAV and OGG Vorbis decoding

  • Add granular feature flags for audio decoding (audio-decode-wav, audio-decode-vorbis, audio-sound-buffer)
  • Add comprehensive error types (AudioError) with decode-specific variants
  • Add test audio fixtures (WAV: mono/stereo, 16/24/32-bit; OGG: Vorbis stereo)
  • Add sound_buffer_load example demonstrating the loading API
  • Add play_slash_sound example demonstrating playback integration
  • Add lambda_audio tool for testing audio loading and playback
  • Update docs/features.md with new audio feature documentation
  • Add docs/specs/audio-file-loading.md specification

Type of Change

  • Bug fix (non-breaking change that fixes an issue)
  • Feature (non-breaking change that adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation (updates to docs, specs, tutorials, or comments)
  • Refactor (code change that neither fixes a bug nor adds a feature)
  • Performance (change that improves performance)
  • Test (adding or updating tests)
  • Build/CI (changes to build process or CI configuration)

Affected Crates

  • lambda-rs
  • lambda-rs-platform
  • lambda-rs-args
  • lambda-rs-logging
  • Other: tools/lambda_audio

Checklist

  • Code follows the repository style guidelines (cargo +nightly fmt --all)
  • Code passes clippy (cargo clippy --workspace --all-targets -- -D warnings)
  • Tests pass (cargo test --workspace)
  • New code includes appropriate documentation
  • Public API changes are documented
  • Breaking changes are noted in this PR description

Testing

Commands run:

cargo build --workspace
cargo test --workspace
cargo build -p lambda-rs --no-default-features --features audio-sound-buffer
cargo run --example sound_buffer_load -- <path-to-audio-file>
cargo run --example play_slash_sound
cargo run -p lambda-audio -- --file <path> --format <wav|ogg>

Manual verification steps (if applicable):

  1. Verified WAV loading with various bit depths (16-bit, 24-bit, 32-bit float)
  2. Verified WAV loading with mono and stereo configurations
  3. Verified OGG Vorbis loading with stereo audio
  4. Verified error handling for unsupported/invalid files
  5. Verified playback integration with play_slash_sound example
  6. Verified lambda_audio tool can load and play audio files

Screenshots/Recordings

Platform Testing

  • macOS
  • Windows
  • Linux

Additional Notes

Feature Flag Structure

The new audio features follow the existing feature flag patterns:

lambda-rs:

  • audio-sound-buffer-wav - WAV file loading
  • audio-sound-buffer-vorbis - OGG Vorbis loading
  • audio-sound-buffer - Umbrella for all sound buffer features
  • audio - Updated umbrella including output device and sound buffer

lambda-rs-platform:

  • audio-decode-wav - Symphonia WAV decoder
  • audio-decode-vorbis - Symphonia Vorbis decoder

Supported Formats

WAV:

  • Sample formats: 16-bit PCM, 24-bit PCM, 32-bit float
  • Channel configurations: Mono, Stereo
  • Sample rates: Any standard rate (44100, 48000, etc.)

OGG Vorbis:

  • Channel configurations: Mono, Stereo
  • Sample rates: Any standard rate

API Design

The SoundBuffer type provides:

  • samples() - Access to interleaved f32 PCM data
  • sample_rate() - Audio sample rate
  • channels() - Number of audio channels
  • duration_seconds() - Computed duration
  • frame_count() - Number of audio frames

All decoding errors are mapped to AudioError variants without exposing Symphonia internals.

@vmarcella vmarcella added lambda-rs Issues pertaining to the core framework lambda-rs-platform Issues pertaining to the dependency & platform wrappers audio All things related to audio labels Feb 3, 2026
@github-actions
Copy link

github-actions bot commented Feb 3, 2026

✅ Coverage Report

📊 View Full HTML Report (download artifact)

Overall Coverage

Metric Value
Total Line Coverage 38.82%
Lines Covered 4084 / 10519

Changed Files in This PR

File Coverage Lines
crates/lambda-rs-platform/src/audio/cpal/device.rs 61.12% 448/733
crates/lambda-rs-platform/src/audio/cpal/mod.rs N/A (no coverage data)
crates/lambda-rs-platform/src/audio/mod.rs N/A (no coverage data)
crates/lambda-rs-platform/src/audio/symphonia/mod.rs 66.87% 224/335
crates/lambda-rs-platform/src/cpal/mod.rs N/A (no coverage data)
crates/lambda-rs-platform/src/lib.rs N/A (no coverage data)
crates/lambda-rs/examples/play_slash_sound.rs N/A (no coverage data)
crates/lambda-rs/examples/sound_buffer_load.rs N/A (no coverage data)
crates/lambda-rs/src/audio/buffer.rs 68.22% 88/129
crates/lambda-rs/src/audio/devices/mod.rs N/A (no coverage data)
crates/lambda-rs/src/audio/devices/output.rs 32.64% 47/144
crates/lambda-rs/src/audio/error.rs 0.00% 0/31
crates/lambda-rs/src/audio/mod.rs N/A (no coverage data)
crates/lambda-rs/src/lib.rs N/A (no coverage data)
tools/lambda_audio/src/main.rs 0.00% 0/191

PR Files Coverage: 51.63% (807/1563 lines)


Generated by cargo-llvm-cov · Latest main coverage

Last updated: 2026-02-03 22:47:34 UTC · Commit: a4d7064

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

audio All things related to audio lambda-rs Issues pertaining to the core framework lambda-rs-platform Issues pertaining to the dependency & platform wrappers

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] Sound file loading (WAV, OGG)

2 participants