AtlatestRepositorysigil-audio
1# Changelog
2
3All notable changes to this project will be documented in this file.
4
5The format is based on [Keep a Changelog](https://keepachangelog.com/),
6and this project adheres to [Semantic Versioning](https://semver.org/).
7
8## [0.12.2] - 2026-09-20
9
10### Changed
12- **The playback device is miniaudio 0.11.25** (vendored, unpatched,
13 device layer only), replacing sokol_audio. Backends are loaded at run
14 time: on Linux PulseAudio (`libpulse.so`, then `.so.0`; pipewire-pulse on a
15 PipeWire desktop), then ALSA, then JACK; WASAPI on Windows; CoreAudio
16 on macOS. **Nothing audio-related is linked any more**: `-lasound`,
17 `AudioToolbox` and `ole32`/`winmm`/`ksuser` are gone from
18 `link-flags`. A game's NEEDED list loses `libasound.so.2`.
19- The stream is named after the program (`program_invocation_short_name`),
20 so `pactl list sink-inputs` shows the game, not "miniaudio".
21- With no backend library on the machine the mixer runs silent on
22 miniaudio's Null backend and one stderr line says so; `audio-setup`
23 still succeeds and `(audio-initialized?)` is `#t`, as under sokol_audio.
24- `src/c/dl-search.c`, a byte-identical copy of sigil-desktop's resolver
25 (`src/c/DL-SEARCH-ORIGIN.md` records the hash and `test/dl-search-test.sh`
26 enforces it), finds backend libraries in Guix and Nix profiles when the
27 loader alone cannot; miniaudio's `dlopen` is redirected to it. A program
28 that links sigil-desktop too has both copies; only sigil-desktop's
29 defines `dlopen` itself.
30- `SIGIL_AUDIO_VERBOSE=1` prints the backend, the device, the format
31 conversion miniaudio applies and every resolver hit.
32- `manifest.scm` no longer needs `alsa-lib` to build; it lists `pulseaudio`
33 for the test that opens a device (`test/test-device-drain.sgl`, which
34 proves the device thread drains a stream).
36### Added
38- `(audio-backend)`: the backend the device runs on as a symbol
39 (`'pulseaudio`, also on a PipeWire desktop through pipewire-pulse;
40 `'alsa`, `'jack`, `'wasapi`, `'dsound`, `'winmm`, `'coreaudio`, or
41 `'null` when frames are consumed in silence), `#f` before `audio-setup`.
42- `(audio-device?)`: `#t` when a real (non-null) device is open, i.e.
43 when sound can reach a listener. `audio-initialized?` keeps its meaning
44 (`audio-setup` ran; the mixer and streams work on every backend), as it
45 had under sokol_audio where an invalid device was silent but
46 initialized; the new predicate names the new fact.
47- `SIGIL_AUDIO_BACKEND=pulseaudio|alsa|jack|wasapi|coreaudio|null` picks
48 one backend instead of miniaudio's priority walk (tests run the suite
49 with `null` too; a desktop whose first choice misbehaves can pin one).
50- `test/test-device-drain.sgl`: opens the real device and proves the
51 device thread drains a stream, and checks the two predicates agree.
53### Removed
55- `vendor/sokol` (sokol_audio.h, sokol_log.h) and `src/c/sokol-audio.c`.
57### Requires
59- Sigil 0.20+, unchanged. The Sigil API is unchanged.
61## [0.12.0] - 2026-07-10
63### Added
65- `(sigil audio sink)`, a portable streaming audio-sink facade that selects
66 its backend with `cond-expand`. The native arm re-exports the sokol SPSC
67 ring from `(sigil audio)`; the WebAssembly arm imports `(sigil browser
68 audio-sink)` from the sigil-wasm-audio bridge package, so the same source
69 compiles and runs on both native and WebAssembly. The facade adds
70 WebAudio-shaped context lifecycle ops (`audio-context-open`,
71 `audio-context-resume`, `audio-context-sample-rate`, `audio-context-state`)
72 and a portable `make-float-buffer` re-export. On native the context ops are
73 thin shims over sokol's single always-running device.
75### Fixed
77- WebAssembly builds that depend on sigil-audio for the `(sigil audio sink)`
78 facade no longer fail to compile. The native audio C (sokol_audio, vendored
79 libogg/libvorbis) has no wasm32-wasi backend, so its C-compilation steps are
80 now gated out of wasm/wasi targets with `skip-on-wasm`; on wasm the facade
81 delegates to the WebAudio bridge, so none of that C is needed. Native builds
82 are byte-identical (the guard is false).
84## [0.11.0] - 2026-06-25
86### Changed
88- Raised the toolchain requirement to Sigil 0.17. The package now
89 declares `sigil: "^0.17"` and pins `sigil-stdlib` to `^0.17`. Sigil
90 0.17 makes the package-level `sigil:` field mandatory and derives the
91 native codegen runtime (`sigil-lib`) from it, so building under the
92 0.17 compiler requires this bump. This is a minor release because
93 consumers caret-pinning sigil-audio must move to the 0.17 line.
95### Requires
97- Sigil 0.17+ (`sigil-stdlib` / `sigil-lib` 0.17 line).
99## [0.10.2] - 2026-04-24
101### Fixed
103- `link-flags:` now uses `(lambda (ctx) (case (target-os ctx) ...))`
104 instead of a host-based `(case (host-os) ...)` expression. The
105 host-based form evaluated at package-load time on the host, so
106 Linux link flags leaked into Windows cross-compile builds; a
107 `sigil build --config windows-amd64` pass from a Linux host would
108 inject `-lasound` into the final link and fail against zig's MinGW
109 sysroot. The procedural form re-evaluates at link time with the
110 target triple, so cross-compile configs now pick the right branch.
111 The OS branches themselves are unchanged (`linux`: `-lasound`;
112 `darwin`: `-framework AudioToolbox`; `windows`: `-lole32 -lwinmm
113 -lksuser`).
115### Requires
117- `sigil-build` 0.14.0+ (for the `target-os` / `target-arch` helpers
118 and the procedural-link-flags dispatch in `collect-native-link-flags`).
120## [0.10.0] - 2026-04-24
122### Added
124- Vendored libogg 1.3.6 + libvorbis 1.3.7 under `vendor/ogg/` and
125 `vendor/vorbis/`. OGG Vorbis encoding/decoding is now
126 self-contained: no external `-lvorbis` / `-lvorbisenc` / `-logg`
127 link dependency, no system `libogg-dev` / `libvorbis-dev`
128 packages needed on Linux or macOS.
129- Windows cross-compile target (`sigil build --config
130 windows-amd64`) — uses zig with `x86_64-windows-gnu`. WASAPI
131 backend links against `-lole32 -lwinmm -lksuser`. Verified by
132 building libsigil-audio.a + test-linking a PE32+ Windows .exe.
133- Per-tree `vendor/ogg/README.md` and `vendor/vorbis/README.md`
134 recording upstream version + tarball SHA256 + upgrade procedure.
136### Changed
138- `package.sgl` library `link-flags`: dropped
139 `-lvorbis -lvorbisenc -logg` from every host branch; added a
140 `(windows)` branch with WASAPI link flags.
141- `manifest.scm`: removed `libvorbis` / `libogg` system deps —
142 vendored sources cover them.
143- Binary size grows by ~1 MB (libvorbis codebook tables dominate).
144 Acceptable trade-off for the install-time ergonomics + cross-
145 compile capability.
147## [0.9.0] - 2026-04-18
149### Added
151- Streaming audio sink: `open-audio-stream`, `push-audio-samples`,
152 `audio-stream-room`, `audio-stream-depth`, `audio-stream-capacity`,
153 `audio-stream-channels`, `audio-stream-underruns`,
154 `audio-stream-closed?`, `close-audio-stream!`,
155 `set-audio-stream-volume!`, `audio-stream?`. Lockless SPSC ring
156 lets Sigil callers feed interleaved float32 PCM from any thread
157 to sokol_audio's audio thread; coexists additively with
158 `play-sound` / `play-music`. See
159 `folio topics/sigil-audio-streaming-sink-architecture`.
161## [0.5.0] - 2026-02-17
163### Added
165- Added test harness generation and build support for packages with native dependencies. Improved native package handling, added c-flags field to library struct. Fixed stdlib inclusion in bundles with custom native runtimes, directory structure preservation in compile-c-sources, and absolute sigil-lib include path resolution.
166- Added test coverage.
167- Added test coverage.
168- Added test coverage for TCP/UDP/address operations and crypto primitives.
169- Added test coverage for TCP/UDP/address operations and crypto primitives.
170- Added test coverage.
171- Added test coverage.
172- Added test coverage.
173- Added test coverage.
174- Added test coverage.
175- Added test coverage.
176- Added opcode-level profiling with --profile flag. Added test harness support for packages with native dependencies. Build safety: warn when replacing the running binary, error on 0-byte output or missing target package. Fixed module cache clearing before running entry points, handling of missing sigil-lib in user-created packages.
177- Added test coverage.
178- Added test coverage.
180### Fixed
182- Fixed random seed initialization crash caused by flonum-to-bignum promotion in modulo. Fixed status command crash when displaying projected versions for packages without changes.
183- Fixed SSE and remove-after initialization on child elements. Added comprehensive test coverage for routing, middleware, cookies, security, SSE, and response helpers.
184- Fixed assq-ref to return values instead of aliasing assq, added assv-ref. Added async-aware process pipe I/O. Fixed REPL string-length error after exception recovery. Added comprehensive error path tests and GC stress tests for dicts.
185- Fixed Scheme module compilation in build task.
186- Fixed re-import of (sigil core) before calling entry main in bundled applications.
188### Other
190- New packages split from sigil-studio. Font and image modules moved to (sigil graphics *) namespace.
191- GC correctness: added write barriers to all heap mutation sites, enabled GC during compilation with full compiler rooting, and added GC stress testing infrastructure. Completed HAMT dict implementation (printing, equality, collision handling, structural removal). Added arbitrary-precision bignum type with full reader/VM/native/serializer integration. Performance: inline caching for module binding lookups, peephole optimizer with 8 superinstruction patterns. Improved error handling: replaced exit(1) with recoverable errors, fixed error propagation in vm_error_abort and OP_ABORT_TO_PROMPT. Added definition location tracking in stack traces. Implemented VFS/bundle directory listing. Fixed number->string precision for exact IEEE 754 roundtrip. Removed dead opcodes.
192- Configured custom mbedTLS for TLS 1.2 only. Added test coverage for connection predicates, failure paths, and error handling.
193- New packages split from sigil-studio. Font and image modules moved to (sigil graphics *) namespace.
194- New package split from sigil-studio. Added playlist support with wait-music-end and play-playlist. Fixed native exports in Scheme module.