Commitcf104a11Recorded24 Sep 2026Repositorysigil-audio
CHANGELOG: the ladder, cues, resampling streams and the underrun split
Changed
CHANGELOG.md | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)Diff
CHANGELOG.mdmodified
@@ -5,6 +5,36 @@ All notable changes to this project will be documented in this file.
5
The format is based on [Keep a Changelog](https://keepachangelog.com/), 6
and this project adheres to [Semantic Versioning](https://semver.org/). 7
+8
## [Unreleased]+9
+10
### Added+11
+12
- **`(sigil audio ladder)`**: steps a producer's render rate down a rung when+13
its steady cost per frame is over budget, the policy Crash the Stack tuned on+14
a phone. The median of a 60-pull window decides; pulls within 150 ms of a+15
cue, and the 30 after an open or a step, are not measured; the rate only goes+16
down (a pin is the one way up); a remembered rate carries a buffering key and+17
is ignored under a different one. `rate-ladder-report` gives the readout+18
line (`48000/24000 BY LADDER@20.2S`). Pure Sigil; `test/test-ladder.sgl`.+19
- **Cues in `(sigil audio sink)`**: `load-audio-cue`, `play-audio-cue`,+20
`unload-audio-cue!`, `stop-audio-cues!`, `set-audio-cue-volume!`,+21
`audio-cue-mode`, `audio-cue-lag`. On the web they come from+22
sigil-wasm-audio (mixed in the AudioWorklet in the next render quantum);+23
natively a cue is a sound in memory played through `play-sound`, mixed in+24
the device callback. Neither waits behind a stream's ring.+25
- **Streams below the device's rate**: `open-audio-stream rate:` and+26
`set-audio-stream-rate!`, upsampled on the audio thread with a 4-tap cubic;+27
a change lands at the write head it was asked at. `audio-stream-rate`.+28
- **The underrun split**: `audio-stream-underruns-sounding` (starved frames+29
that cut sound off) and `audio-stream-underruns-idle` (a quiet stream+30
running dry), natively and on the web. `test/test-sink-rate-split.sgl`.+31
+32
### Fixed+33
+34
- `play-sound` publishes a slot's `playing` flag with release ordering and+35
the device callback reads it with acquire, so the callback never mixes a slot+36
whose sound and position were not yet written.+37
38
## [0.12.2] - 2026-09-20 39
40
### Changed