Lyrebird

M5Stack Fire · CoreS3

ESP32 / ESP32-S3/ 2423 species · 12724 syllables/ 22.05 kHz, synthesized on the board/ no SD card, no samples

A pocket dawn chorus. Two thousand four hundred songbirds, integrated in real time from the Mindlin–Laje model of the avian vocal organ — the same oscillator as Lyrebird for the browser, ported to the board. No audio is stored: every note is computed from the two parameters real birds control, air-sac pressure and syringeal tension.

It boots into all birds — twelve species at a time, two individuals of each, arriving as a Poisson process, and the twelve turn over every few minutes so the corpus comes past you rather than sitting still. Step off that with a button and you get one species, alone. Plug a Fire or a CoreS3 in and flash it from this page.

A Fire and a CoreS3 on the all-birds slot, with sound. Both are drawing the same picture: a camera inside the corpus, following whoever is singing. The Fire has three real buttons; the CoreS3 has the same three drawn along the bottom as touch zones.

01 Connect

A data USB cable, not a charge-only one. The picker is filtered to USB-UART bridges and Espressif devices — the Fire's bridge is in the first group (a CP2104 on older units, a CH9102 on a v2.7), and the CoreS3 appears as an Espressif device because it programs over the ESP32-S3's own USB rather than a bridge.

Fire: just click Connect. The screen goes dark and comes back several times — that is the reset sequence putting the board into its bootloader, not a fault, and it can take half a minute. The Core has no BOOT button, so the reset has to happen over the cable.

CoreS3, first time only: put it into download mode before connecting. Hold the reset button on the left side for 2–3 seconds until the green LED lights, then let go. Click Connect and pick USB JTAG/serial debug unit — a new entry, not the one named after the board.

Why only the first time: the factory firmware puts the CoreS3 on the USB bus under its own identity, and resetting into the bootloader swaps it for another — the browser loses the port mid-connect. Lyrebird uses the chip's own USB-Serial-JTAG instead, which survives a reset, so once it is installed the board reflashes from here like any other.

02 Board

The Fire is an ESP32 and the CoreS3 an ESP32-S3 — different processors, so there is an image for each and no one binary that runs on both. Connecting above read the chip off the board and picked for you. Change it only if you know better than the chip did.

03 Install

Writes bootloader, partition table and firmware as one image. About a minute.

04 Without Web Serial

Safari, mobile, or any browser where the picker stays empty. The same image, written by esptool (pip install esptool).

Download firmware

Run it beside the downloaded file. Add --port /dev/ttyUSB0 (or COM3) if esptool picks the wrong one. On a permission error, run sudo usermod -aG dialout $USER, then log out and log in again.

05 Controls

Three buttons under the screen. A and C step one dial of 2424 positions; B changes how the current position sings. A hold does something else than a press.

The CoreS3 has no physical buttons — the same three live on the touch strip in the bezel below the screen, left to right.

A · C short
Previous / next position on the dial. Position 1 is all birds — twelve species at a time, rolling. Positions 2–2424 are one species each, and it wraps. One press is one position and there is no search, so the dial is for wandering.
B short
Chorus ↔ solo, on a single-species position: four individuals answering each other, or one bird singing its songs back to back. All birds is a chorus by definition, so B does nothing there.
A · C hold
Volume down / up, in 2 % steps.
B hold
Pause and resume. Paused, the Fire's DAC goes high-Z — no idle hiss.

The screen puts a camera inside the corpus. Nothing is drawn for a bird until it sings, so the band is black until something happens. When a bird starts a song, a cross of dashed rules is struck through it and a thread of stretched dots grows out of it — fat where the note is loud, pinched where it is quiet, with a haloed bead at the note being sung right now. The camera frames whoever is singing: close in on one, easing back to hold two together, and easing back again as a long song outgrows the frame.

So the screen answers a different question than a spectrogram would: not what pitch is sounding, but which of the 2423 birds it is, where that bird sits among the rest, and what its song is doing.