@@ -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-31T00:00:27Z "
7- version : " 0.1.15 "
6+ last_updated : " 2026-01-31T22:33:14Z "
7+ version : " 0.1.16 "
88engine_workspace_version : " 2023.1.30"
99wgpu_version : " 26.0.1"
1010shader_backend_default : " naga"
1111winit_version : " 0.29.10"
12- repo_commit : " 2ae6419f001550adaa13a387b94fdf2bd86a882b "
12+ repo_commit : " 1aaa56a242939572b6ec08eda82364c16a85e59a "
1313owners : ["lambda-sh"]
1414reviewers : ["engine", "rendering"]
1515tags : ["spec", "audio", "lambda-rs", "platform", "cpal"]
@@ -98,7 +98,7 @@ application
9898 └── lambda::audio
9999 ├── enumerate_output_devices() -> Vec<AudioOutputDeviceInfo>
100100 └── AudioOutputDeviceBuilder::build() -> AudioOutputDevice
101- └── lambda_platform::cpal (internal)
101+ └── lambda_platform::audio:: cpal (internal)
102102 ├── enumerate_devices() -> Vec<AudioDeviceInfo>
103103 └── AudioDeviceBuilder::build() -> AudioDevice
104104 └── cpal (host + device + stream)
@@ -115,17 +115,17 @@ its audio APIs directly.
115115
116116Module layout
117117
118- - ` crates/lambda-rs-platform/src/cpal/mod.rs `
118+ - ` crates/lambda-rs-platform/src/audio/ cpal/mod.rs `
119119 - Re-exports ` AudioDevice ` , ` AudioDeviceBuilder ` , ` AudioDeviceInfo ` ,
120120 ` AudioError ` , and ` enumerate_devices ` .
121- - ` crates/lambda-rs-platform/src/cpal/device.rs `
121+ - ` crates/lambda-rs-platform/src/audio/ cpal/device.rs `
122122 - Defines ` AudioDevice ` , ` AudioDeviceBuilder ` , ` AudioDeviceInfo ` ,
123123 ` AudioError ` , and ` enumerate_devices ` .
124124
125125Public API
126126
127127``` rust
128- // crates/lambda-rs-platform/src/cpal/device.rs
128+ // crates/lambda-rs-platform/src/audio/ cpal/device.rs
129129
130130/// Output sample format used by the platform stream callback.
131131#[derive(Clone , Copy , Debug , PartialEq , Eq )]
@@ -220,7 +220,7 @@ pub fn enumerate_devices() -> Result<Vec<AudioDeviceInfo>, AudioError>;
220220### lambda-rs Public API
221221
222222` lambda-rs ` provides the application-facing audio API and translates to
223- ` lambda_platform::cpal ` (package: ` lambda-rs-platform ` ) internally. The
223+ ` lambda_platform::audio:: cpal ` (package: ` lambda-rs-platform ` ) internally. The
224224` lambda-rs ` layer MUST remain backend-agnostic and MUST NOT expose ` cpal `
225225types.
226226
@@ -317,7 +317,7 @@ pub fn enumerate_output_devices(
317317
318318Implementation rules
319319
320- - ` lambda::audio ` MUST translate into ` lambda_platform::cpal ` (package:
320+ - ` lambda::audio ` MUST translate into ` lambda_platform::audio:: cpal ` (package:
321321 ` lambda-rs-platform ` ) internally.
322322- ` lambda::audio ` MUST define its own public types and MUST NOT re-export
323323 ` lambda-rs-platform ` audio types.
@@ -490,9 +490,9 @@ Error type
490490 expose ` cpal ` or ` lambda-rs-platform ` types.
491491- ` lambda-rs-platform ` MUST define an internal ` AudioError ` suitable for
492492 actionable diagnostics inside the platform layer.
493- - ` lambda_platform::cpal::AudioError ` (package: ` lambda-rs-platform ` ) MUST NOT
493+ - ` lambda_platform::audio:: cpal::AudioError ` (package: ` lambda-rs-platform ` ) MUST NOT
494494 expose ` cpal ` types in its public API.
495- - ` lambda-rs ` MUST translate ` lambda_platform::cpal::AudioError ` (package:
495+ - ` lambda-rs ` MUST translate ` lambda_platform::audio:: cpal::AudioError ` (package:
496496 ` lambda-rs-platform ` ) into ` lambda::audio::AudioError ` . Backend-specific
497497 failures SHOULD map to ` AudioError::Platform { details } ` .
498498
@@ -581,35 +581,34 @@ Feature gating requirements
581581 (` crates/lambda-rs/src/audio.rs:294 ` )
582582 - [x] ` AudioOutputDeviceBuilder::build ` initializes default output device
583583 (` crates/lambda-rs/src/audio.rs:222 ` ,
584- ` crates/lambda-rs-platform/src/cpal/device.rs:403 ` )
584+ ` crates/lambda-rs-platform/src/audio/ cpal/device.rs ` )
585585 - [x] ` AudioOutputDeviceBuilder::build_with_output_callback ` invokes callback
586586 (` crates/lambda-rs/src/audio.rs:247 ` ,
587- ` crates/lambda-rs-platform/src/cpal/device.rs:524 ` )
587+ ` crates/lambda-rs-platform/src/audio/ cpal/device.rs ` )
588588 - [x] Stream created and kept alive for ` AudioOutputDevice ` lifetime
589589 (` crates/lambda-rs/src/audio.rs:182 ` ,
590- ` crates/lambda-rs-platform/src/cpal/device.rs:352 ` )
591- - [x] Platform enumeration implemented (` lambda_platform::cpal ` )
592- (` crates/lambda-rs-platform/src/cpal/device.rs:807 ` )
593- - [x] Platform builder implemented (` lambda_platform::cpal ` )
594- (` crates/lambda-rs-platform/src/cpal/device.rs:365 ` )
590+ ` crates/lambda-rs-platform/src/audio/ cpal/device.rs ` )
591+ - [x] Platform enumeration implemented (` lambda_platform::audio:: cpal ` )
592+ (` crates/lambda-rs-platform/src/audio/ cpal/device.rs ` )
593+ - [x] Platform builder implemented (` lambda_platform::audio:: cpal ` )
594+ (` crates/lambda-rs-platform/src/audio/ cpal/device.rs ` )
595595- API Surface
596596 - [x] Public ` lambda ` types implemented: ` AudioOutputDevice ` ,
597597 ` AudioOutputDeviceInfo ` , ` AudioOutputDeviceBuilder ` , ` AudioCallbackInfo ` ,
598598 ` AudioOutputWriter ` , ` AudioError ` (` crates/lambda-rs/src/audio.rs:12 ` )
599599 - [x] Internal platform types implemented: ` AudioDevice ` , ` AudioDeviceInfo ` ,
600600 ` AudioDeviceBuilder ` , ` AudioCallbackInfo ` , ` AudioOutputWriter ` , ` AudioError `
601- (` crates/lambda-rs-platform/src/cpal/device.rs:12 ` )
601+ (` crates/lambda-rs-platform/src/audio/ cpal/device.rs ` )
602602 - [x] ` lambda::audio ` does not re-export ` lambda-rs-platform ` types
603603 (` crates/lambda-rs/src/audio.rs:10 ` )
604604- Validation and Errors
605605 - [x] Invalid builder inputs rejected (sample rate and channel count)
606- (` crates/lambda-rs-platform/src/cpal/device.rs:403 ` ,
607- ` crates/lambda-rs-platform/src/cpal/device.rs:847 ` )
606+ (` crates/lambda-rs-platform/src/audio/cpal/device.rs ` )
608607 - [x] Descriptive ` AudioError ` variants emitted on failures
609608 (` crates/lambda-rs/src/audio.rs:65 ` ,
610- ` crates/lambda-rs-platform/src/cpal/device.rs:265 ` )
609+ ` crates/lambda-rs-platform/src/audio/ cpal/device.rs ` )
611610 - [x] Unsupported configurations reported via ` AudioError::UnsupportedConfig `
612- (` crates/lambda-rs-platform/src/cpal/device.rs:800 ` ,
611+ (` crates/lambda-rs-platform/src/audio/ cpal/device.rs ` ,
613612 ` crates/lambda-rs/src/audio.rs:72 ` )
614613- Documentation and Examples
615614 - [x] ` docs/features.md ` updated with audio feature documentation
@@ -665,14 +664,14 @@ Manual checks
665664- 2026-01-30 (v0.1.12) — Populate the requirements checklist with file
666665 references matching the implemented surface.
667666- 2026-01-30 (v0.1.11) — Align examples with the ` lambda ` crate name, document
668- the internal ` lambda_platform::cpal ` path and pin, and refine default
667+ the internal ` lambda_platform::audio:: cpal ` path and pin, and refine default
669668 configuration selection requirements to match the implementation.
670669- 2026-01-30 (v0.1.10) — Enable ` lambda-rs ` audio features by default.
671670- 2026-01-29 (v0.1.9) — Fix YAML front matter to use a single ` version ` field.
672671- 2026-01-29 (v0.1.8) — Make the ` lambda-rs ` facade example the primary
673672 reference and remove the platform example requirement.
674673- 2026-01-29 (v0.1.7) — Rename the platform audio implementation module to
675- ` lambda_platform::cpal ` (package: ` lambda-rs-platform ` ) to reflect the
674+ ` lambda_platform::audio:: cpal ` (package: ` lambda-rs-platform ` ) to reflect the
676675 internal backend.
677676- 2026-01-29 (v0.1.6) — Specify ` lambda-rs ` as the only supported
678677 application-facing API and treat ` lambda-rs-platform ` as internal.
0 commit comments