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