Repository navigation
v0.4.0
Immutable
release. Only release title and notes can be modified.
Breaking
- macOS CLI and desktop archives use
.tar.gzinstead of.zip; update automated download and extraction commands. Apple silicon and Intel packages remain separate. - CLI and desktop archives add
COPYRIGHT-library.htmlfor Rust standard-library component notices. Keep it withTHIRD-PARTY-NOTICES.txtwhen redistributing, and update exact archive-member allowlists. - Desktop drawing requires an OpenGL-capable graphics driver (OpenGL 2.0 or newer on Windows). Software-renderer recovery and
SLINT_BACKEND=winit-softwareare unavailable; install a compatible graphics driver. - Integer-phase oscillators and exact frame-quantized pulse timing change generated sample bits. Click and rectangular-gate pulses last exactly
round(width_seconds × sample rate)frames and start on the first frame at or after each onset. Recipes that leave no closed frame in a period, or whose pulse widths exceed 2^36 frames at the selected rate, are rejected; reduce those widths. Regenerate sample-exact reference audio and expectations. Recipe schema 2 and the built-in catalog's signal parameters are unchanged. - Rust packages are
auditorylab-core,auditorylab,auditorylab-cliandauditorylab-gui, undercrates/core,crates/lib,crates/cliandcrates/gui. WAV, device and application APIs are consolidated inauditorylab; useStimulus::signal, immutable seekableSignaland the library's loading/export/playback and monitoring APIs. Update imports, observation consumers and exhaustive error matches. Install the CLI withcargo install --locked --path crates/cli. - Windows source builds require the native MSVC Rust host and Visual Studio Build Tools; downloads statically link the Microsoft C runtime. Linux source builds use distribution fontconfig and work with
--manifest-pathoutside the repository root. Linux desktop font preferences use Pango/GTK 3/GIO; Debian/Ubuntu users needlibpango-1.0-0 libgtk-3-0. See source prerequisites. - Source builds require Rust 1.99.1 or newer; the repository toolchain pins 1.99.1.
--build-infoand build-kind markers are removed. Use--versionor desktop About for product version, numeric native build counter and optional source revision; update identity parsers.- CLI playback completion moves from stdout to stderr alongside start/status text and warnings; update redirected-output consumers. Redirected stderr remains static, while terminal stderr displays generated status at 4 Hz. Other report formats also change; CLI commands, explicit input selection and exit codes are unchanged.
Added
- A desktop Workbench builds and changes up to 16 tone/click components live, with sliders, exact numeric fields, ear routing, level and modulation controls. Smooth ramps, glides and crossfades connect valid settings. Save drafts as schema-2 recipes with custom title/summary text, or stop audio and export a finite WAV. The Rust library exposes draft editing, shared control ranges, live generation/control and generated observations.
- Document-local Pattern explained shows static timing/envelope models for validated sounds and accepted draft settings, separately from actual-output captures. Click, gate and AM rhythms, steady companions and interaural/monaural pair conditions retain their distinct meanings.
- CLI
-Vas an alias for--version. - Positive frequencies too small to advance the previous phase model are accepted.
Changed
- Desktop navigation and Save stay fixed around a scrolling sound document, bounded optional Output monitor drawer and compact persistent transport. Large text/small space can use a focused monitor window with scrolling and keyboard access to its controls and warnings; full selectable diagnostics open separately. About is available through the application/Help menu.
- Native desktop typography follows San Francisco on macOS, Windows message-font/text-size settings and the configured Linux desktop family/size. Native font changes reflow application windows while preserving pending edits.
- Library search covers titles, IDs, research and sound parameters, with explicit human/mouse study context. Wrapped results, compact layers and collapsible settings keep sound actions accessible. Edited source research stays attributed separately from custom notes.
- Exact fields retain precision and admit valid pending corrections without an extra blur. Setting-specific diagnostics identify coupled constraints and whole-mix peak errors. Slider gestures use three significant digits for frequency/rate/width, 0.1 dB levels and whole-percent depths.
- One desktop player retains its session while browsing Library and editing Workbench. Generated rates, crossfade roles, stereo traces and window sample peak/RMS distinguish accepted settings from generated output. Waveforms show samples before device conversion, not microphone input, sound pressure or an acoustic playhead. Fixed/Fit use one stereo scale; Hold retains source/session/rate/span/scale/meter context across playback changes. Raw waveform history is bounded to 100 ms.
- Live/Held/Stale/Waiting/Unavailable/Last capture states and receipt age distinguish current captures from retained data. Current coverage warnings recover independently of cumulative gaps. Coverage/display-range advice stays readable without repeated automatic speech; stale/unavailable monitoring, capture errors and independent backend underruns remain announced. Native motion preferences distinguish enabled, disabled and unavailable, with Hold/Return overrides, Follow system and a diagnosed live fallback.
- Sound snapshots save while audio continues; later edits stay dirty, and obsolete results cannot mark replacement drafts saved. Audio Stop and file-task cancellation are independent. WAV export requires idle audio. Native Open/Save/Export dialogs select paths, and Save confirms replacement; CLI output remains no-clobber.
- After open native dialogs are resolved, New, draft replacement, window close and File/app-menu Quit protect unsaved content with Save/Discard/Cancel and wait for the required audio/file workers to finish, including native macOS Cmd-Q. Save-and-close preserves newer edits. Forced termination can leave a hidden
.NAME.RANDOM.partialfile beside an interrupted destination. - Finite Stop fades over up to 30 ms; live Stop finishes its current transition before a 30 ms fade, allowing almost 60 ms of generation plus device buffering. CLI Ctrl-C retains exit 130.
- CLI help and usage use clap. CLI/desktop durations use hours, minutes and seconds; desktop peak bounds use one decimal and silence reads −∞. Library waveform previews use the same seekable signal as finite playback/export; Workbench previews use the current valid settings.
Fixed
- Fatal Windows application errors appear in a native dialog, including graphics-context creation failures.
- macOS keyboard shortcuts honor native modifier flags when accessibility input supplies no separate modifier-key events.
- Linux ALSA fault-poll waits are bounded to one second so missed fault notifications can reach recovery without spending the full 30-second stall deadline in one wait.
Removed
- The sample observation transport and display-memory-budget API; library monitoring supplies bounded generated quantities and captures.
- Python build/release tools and committed generated third-party notices; use
cargo xtaskand the product-specific notices inside each archive.
Internal
- Authored Rust lint exceptions require an exact source scope and written rationale, checked across inactive platform code, macro attributes and opaque Rust syntax. Package lint inheritance and production lint-weakening flags are checked; numerical and native unsafe exceptions stay confined to their operations.
- Packaging and reusable CI generate separate native CLI/GUI archives and verify their identities, architectures, notices and license-text coverage. Asset collection rejects incomplete, duplicate or unexpected product/target sets. Release calls run every native target and all five scoped mutation suites. Dispatch defaults to non-publishing verification with downloadable checksums, notes and provenance; notes and assets are attested, and publication requires
publish: trueon the verified current main commit. - Core seekable/live rendering and generated-state observation allocate nothing. Device monitoring uses preallocated storage and one nonblocking lock attempt per buffer; observation does not determine playback completion.