Skip to content

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 21 Oct 13:31
Immutable release. Only release title and notes can be modified.

Breaking

  • macOS CLI and desktop archives use .tar.gz instead of .zip; update automated download and extraction commands. Apple silicon and Intel packages remain separate.
  • CLI and desktop archives add COPYRIGHT-library.html for Rust standard-library component notices. Keep it with THIRD-PARTY-NOTICES.txt when 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-software are 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-cli and auditorylab-gui, under crates/core, crates/lib, crates/cli and crates/gui. WAV, device and application APIs are consolidated in auditorylab; use Stimulus::signal, immutable seekable Signal and the library's loading/export/playback and monitoring APIs. Update imports, observation consumers and exhaustive error matches. Install the CLI with cargo 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-path outside the repository root. Linux desktop font preferences use Pango/GTK 3/GIO; Debian/Ubuntu users need libpango-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-info and build-kind markers are removed. Use --version or 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 -V as 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.partial file 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 xtask and 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: true on 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.