@@ -3,13 +3,13 @@ title: "Audio Device Abstraction"
33document_id : " audio-device-abstraction-2026-01-28"
44status : " draft"
55created : " 2026-01-28T22:59:00Z"
6- last_updated : " 2026-01-31T22:33:14Z "
7- version : " 0.1.16 "
6+ last_updated : " 2026-02-02T22:57:02Z "
7+ version : " 0.1.17 "
88engine_workspace_version : " 2023.1.30"
99wgpu_version : " 26.0.1"
1010shader_backend_default : " naga"
1111winit_version : " 0.29.10"
12- repo_commit : " 1aaa56a242939572b6ec08eda82364c16a85e59a "
12+ repo_commit : " 6a5fd409c8097665ffd6e6a4a976206320ae4f80 "
1313owners : ["lambda-sh"]
1414reviewers : ["engine", "rendering"]
1515tags : ["spec", "audio", "lambda-rs", "platform", "cpal"]
@@ -236,7 +236,8 @@ Crate boundary
236236Application-facing API surface
237237
238238``` rust
239- // crates/lambda-rs/src/audio.rs
239+ // crates/lambda-rs/src/audio/devices/output.rs
240+ // crates/lambda-rs/src/audio/error.rs
240241
241242#[derive(Clone , Copy , Debug , PartialEq , Eq )]
242243pub enum AudioSampleFormat {
@@ -256,6 +257,13 @@ pub struct AudioCallbackInfo {
256257pub enum AudioError {
257258 InvalidSampleRate { requested : u32 },
258259 InvalidChannels { requested : u16 },
260+ Io {
261+ path : Option <std :: path :: PathBuf >,
262+ details : String ,
263+ },
264+ UnsupportedFormat { details : String },
265+ InvalidData { details : String },
266+ DecodeFailed { details : String },
259267 NoDefaultDevice ,
260268 UnsupportedConfig {
261269 requested_sample_rate : Option <u32 >,
@@ -330,7 +338,7 @@ Features
330338 - Enables the ` lambda::audio ` output device surface.
331339 - Enables ` lambda-rs-platform ` ` audio-device ` internally.
332340- ` lambda-rs ` umbrella feature: ` audio ` (default: disabled)
333- - Composes ` audio-output-device ` only .
341+ - Composes ` audio-output-device ` and ` audio-sound-buffer ` .
334342
335343### Application Interaction
336344
@@ -526,14 +534,14 @@ Features introduced by this spec
526534 - Enables ` lambda::audio ` output device APIs.
527535 - Enables ` lambda-rs-platform ` ` audio-device ` internally.
528536 - Umbrella feature: ` audio ` (default: disabled)
529- - Composes ` audio-output-device ` only .
537+ - Composes ` audio-output-device ` and ` audio-sound-buffer ` .
530538- Crate: ` lambda-rs-platform `
531539 - Granular feature: ` audio-device ` (default: disabled)
532540 - Enables the ` cpal ` module and the ` AudioDevice ` /` AudioDeviceBuilder `
533541 surface.
534542 - Enables the ` cpal ` dependency as an internal implementation detail.
535543 - Umbrella feature: ` audio ` (default: disabled)
536- - Composes ` audio-device ` only .
544+ - Composes ` audio-device ` , ` audio-decode-wav ` , and ` audio-decode-vorbis ` .
537545
538546Feature gating requirements
539547
@@ -574,19 +582,19 @@ Feature gating requirements
574582
575583- Functionality
576584 - [x] Feature flags defined (` lambda-rs ` : ` audio-output-device ` , ` audio ` )
577- (` crates/lambda-rs/Cargo.toml:22 ` )
585+ (` crates/lambda-rs/Cargo.toml ` )
578586 - [x] Feature flags defined (` lambda-rs-platform ` : ` audio-device ` , ` audio ` )
579- (` crates/lambda-rs-platform/Cargo.toml:53 ` )
587+ (` crates/lambda-rs-platform/Cargo.toml ` )
580588 - [x] ` enumerate_output_devices ` implemented and returns output devices
581- (` crates/lambda-rs/src/audio.rs:294 ` )
589+ (` crates/lambda-rs/src/audio/devices/output .rs ` )
582590 - [x] ` AudioOutputDeviceBuilder::build ` initializes default output device
583- (` crates/lambda-rs/src/audio.rs:222 ` ,
591+ (` crates/lambda-rs/src/audio/devices/output .rs ` ,
584592 ` crates/lambda-rs-platform/src/audio/cpal/device.rs ` )
585593 - [x] ` AudioOutputDeviceBuilder::build_with_output_callback ` invokes callback
586- (` crates/lambda-rs/src/audio.rs:247 ` ,
594+ (` crates/lambda-rs/src/audio/devices/output .rs ` ,
587595 ` crates/lambda-rs-platform/src/audio/cpal/device.rs ` )
588596 - [x] Stream created and kept alive for ` AudioOutputDevice ` lifetime
589- (` crates/lambda-rs/src/audio.rs:182 ` ,
597+ (` crates/lambda-rs/src/audio/devices/output .rs ` ,
590598 ` crates/lambda-rs-platform/src/audio/cpal/device.rs ` )
591599 - [x] Platform enumeration implemented (` lambda_platform::audio::cpal ` )
592600 (` crates/lambda-rs-platform/src/audio/cpal/device.rs ` )
@@ -595,27 +603,30 @@ Feature gating requirements
595603- API Surface
596604 - [x] Public ` lambda ` types implemented: ` AudioOutputDevice ` ,
597605 ` AudioOutputDeviceInfo ` , ` AudioOutputDeviceBuilder ` , ` AudioCallbackInfo ` ,
598- ` AudioOutputWriter ` , ` AudioError ` (` crates/lambda-rs/src/audio.rs:12 ` )
606+ ` AudioOutputWriter ` , ` AudioError `
607+ (` crates/lambda-rs/src/audio/devices/output.rs ` ,
608+ ` crates/lambda-rs/src/audio/error.rs ` )
599609 - [x] Internal platform types implemented: ` AudioDevice ` , ` AudioDeviceInfo ` ,
600610 ` AudioDeviceBuilder ` , ` AudioCallbackInfo ` , ` AudioOutputWriter ` , ` AudioError `
601611 (` crates/lambda-rs-platform/src/audio/cpal/device.rs ` )
602612 - [x] ` lambda::audio ` does not re-export ` lambda-rs-platform ` types
603- (` crates/lambda-rs/src/audio.rs:10 ` )
613+ (` crates/lambda-rs/src/audio/devices/output.rs ` ,
614+ ` crates/lambda-rs/src/audio/mod.rs ` )
604615- Validation and Errors
605616 - [x] Invalid builder inputs rejected (sample rate and channel count)
606617 (` crates/lambda-rs-platform/src/audio/cpal/device.rs ` )
607618 - [x] Descriptive ` AudioError ` variants emitted on failures
608- (` crates/lambda-rs/src/audio.rs:65 ` ,
619+ (` crates/lambda-rs/src/audio/error .rs ` ,
609620 ` crates/lambda-rs-platform/src/audio/cpal/device.rs ` )
610621 - [x] Unsupported configurations reported via ` AudioError::UnsupportedConfig `
611622 (` crates/lambda-rs-platform/src/audio/cpal/device.rs ` ,
612- ` crates/lambda-rs/src/audio.rs:72 ` )
623+ ` crates/lambda-rs/src/audio/error .rs ` )
613624- Documentation and Examples
614625 - [x] ` docs/features.md ` updated with audio feature documentation
615- (` docs/features.md:1 ` )
626+ (` docs/features.md ` )
616627 - [x] Example added demonstrating audible playback (behind ` audio-output-device ` )
617- (` crates/lambda-rs/examples/audio_sine_wave.rs:1 ` )
618- - [x] ` lambda-rs ` audio facade implemented (` crates/lambda-rs/src/audio.rs:1 ` )
628+ (` crates/lambda-rs/examples/audio_sine_wave.rs ` )
629+ - [x] ` lambda-rs ` audio facade implemented (` crates/lambda-rs/src/audio/mod .rs ` )
619630
620631## Verification and Testing
621632
@@ -655,6 +666,8 @@ Manual checks
655666
656667## Changelog
657668
669+ - 2026-02-02 (v0.1.17) — Align specification file references with the current
670+ ` lambda::audio ` module layout and feature composition.
658671- 2026-01-31 (v0.1.15) — Update verification command to include
659672 ` audio-output-device ` .
660673- 2026-01-30 (v0.1.14) — Make ` lambda-rs ` audio features opt-in by default and
0 commit comments