At v0.6.3 (5afe010), audiocomponents' rebuilt Reverb at patch 7 ("Dark Chamber") renders a different digest on the boards than on any desktop build. It is the only cell of 76 measured on the boards whose difference has no known cause.
| Build |
sha256 prefix of the first 128 blocks, 48 kHz stereo |
| ESP32-P4 and ESP32-S3 (they agree) |
9750d1eaf6a95a0d |
| desktop CPython and desktop MicroPython, double-precision Python floats |
8e6e35910777df41 |
| desktop MicroPython built with single-precision Python floats |
5f503d4f7f4f9adb |
What is ruled out. Handing the desktop Tank the exact float32 settings the P4 computed reproduces the single-precision desktop digest, not the boards'. So the difference is not in what the class hands the node: it is inside the node, or in the C library under it, on the boards.
What is not known. How large the difference is in samples (only digests were taken), and which line produces it. Reverb's nine other patches on the boards are each reproduced exactly by the single-precision desktop build, so whatever it is depends on this patch's values.
Where to look first. A libm call in the node's C whose result differs between newlib and glibc at one argument, a float-to-integer conversion that lands on a boundary, or a multiply-add the board compilers fuse (#79 fixed that class of difference in the shared kernels; the tank's code changed in #172).
To reproduce. tools/measure_effect_cost.py in audiocomponents, target rebuilt:Reverb@7, on a board and on a desktop build. Dumping the first differing block on both would size it.
Cost and real time are fine at that cell on both boards. Found by the effects Phase 5 board session, 2026-09-29. It belongs with the node batch that follows Phase 5 (#166, #176 to #181).
At v0.6.3 (5afe010), audiocomponents' rebuilt
Reverbat patch 7 ("Dark Chamber") renders a different digest on the boards than on any desktop build. It is the only cell of 76 measured on the boards whose difference has no known cause.9750d1eaf6a95a0d8e6e35910777df415f503d4f7f4f9adbWhat is ruled out. Handing the desktop
Tankthe exact float32 settings the P4 computed reproduces the single-precision desktop digest, not the boards'. So the difference is not in what the class hands the node: it is inside the node, or in the C library under it, on the boards.What is not known. How large the difference is in samples (only digests were taken), and which line produces it. Reverb's nine other patches on the boards are each reproduced exactly by the single-precision desktop build, so whatever it is depends on this patch's values.
Where to look first. A libm call in the node's C whose result differs between newlib and glibc at one argument, a float-to-integer conversion that lands on a boundary, or a multiply-add the board compilers fuse (#79 fixed that class of difference in the shared kernels; the tank's code changed in #172).
To reproduce.
tools/measure_effect_cost.pyin audiocomponents, targetrebuilt:Reverb@7, on a board and on a desktop build. Dumping the first differing block on both would size it.Cost and real time are fine at that cell on both boards. Found by the effects Phase 5 board session, 2026-09-29. It belongs with the node batch that follows Phase 5 (#166, #176 to #181).