Skip to content

v0.1.1

Choose a tag to compare

@bdbarnett bdbarnett released this 24 Sep 14:46
· 9 commits to main since this release
  • audiobusio.I2SOut.starved() reports silence on the wire, in bytes. It
    used to return the engine's sink-refusal count, which needs the pump running
    and the DMA full -- the one case that is not an underrun -- so it read 0
    through a stall that plainly starved the wire, on both chips. It now reports
    audio that should have played and did not, taking whichever of two witnesses
    is further on: the DMA's own byte count, which is right when the ring runs
    dry and auto_clear clocks zeros, and the wall clock, which is right when
    the DMA itself stops -- which is what a flash erase does on the ESP32-S3,
    measured at 1.14 seconds of audio lost from one 32 kB write with the pump
    sitting level with the DMA throughout. Neither witness alone sees both. The
    old number keeps its meaning under its real name, sink_timeouts(), and
    _audioif gains i2s_sink_bytes() and i2s_starved_bytes() so the
    subtraction is checkable from Python. Silence that was asked for -- a
    stopped or paused output -- is not charged: the count restarts wherever
    feeding legitimately begins, and arms for one ring period so the wait for
    the pump's first block reads as the latency it is.
    (#8)
  • _audioif.lock_probe() asks FreeRTOS whether it refuses a give of the
    pump mutex from a task that does not own it, and one with nobody holding it.
    ESP32 only; nothing in the audio path calls it.
    (#14)
  • __revision__ says which audioif a firmware was built from: a
    git describe of this repository, or unknown without git.
    (#17)
  • One include() line adds this module to your own MicroPython 1.29 build.
    manifest.py names the C module with c_module(), and the README shows the
    line. (#19)
  • micropython.cmake skips the driver on CMake ports other than esp32, so an
    rp2 build that includes it no longer fails on ESP-IDF's I2S header.
    (#15)
  • tests/run_probes.sh runs CI's probes against a desktop interpreter, and
    refuses one that was not built from this checkout's HEAD. CI builds against
    audiodsp v0.5.1 rather than its default branch.
    (#6)
  • A newcomer's guide in docs/newcomers.md.

Add it to your own MicroPython build beside audiodsp with one include() line; the README shows it. It is a firmware C module, so there is nothing on PyPI or MIP to install.