123 Dawn Chorus

generativeambientdronefmphase-distortiondelayreverbweb-serialexperimental

Connect the Computer to a laptop, open the Dawn Chorus page in Chrome or Edge, and set your location. The page works out where the sun is and fetches the local weather, then streams both to the card over USB. As the sun rises, a drone swells and brightens, chimes ring out, and synthetic birds wake from first light, peak just after sunrise and stay through the day. Through dusk, everything settles back to silence. The weather is the score. Cloud dulls the drone. Wind adds vibrato, beating and gusts, and makes the echoes and chimes waver. Warmth brightens the chimes, humidity lengthens the echoes, and rain brings a soft vinyl crackle. Because the data comes from the real sky above you, no two sun rises and sun sets sound the same. A Fast mode plays a whole sunrise or sunset in a couple of minutes, and Manual mode lets you audition each value with sliders. Inspired by the tides of Matt Allison's Equanimity card.

Panel

Workshop Computer panelKeyBird TypeChime InstrumentBird Type CVChime Tone CVStrike ChimeStart BirdDroneChimes and BirdsDaylightChime PitchChime TriggerBird Trigger

Controls

Main knob

Key
12 o'clock is D, and each of the 12 steps is a semitone. The drone, chimes and CV Out 2 all follow, with a short glide when you change key.

X knob

Bird Type
Anticlockwise gives low, slow coos, 12 o'clock gives warbling songbirds, and clockwise gives small, fast tweets. CV In 1 is added.

Y knob

Chime Instrument
Anticlockwise to clockwise, marimba, harp, xylophone, bell, vibraphone and glockenspiel. The first three use Casio CZ-style phase distortion and the last three use FM. CV In 2 is added.

Switch

Sparse: Chimes and birds at 40% of normal density. The drone and weather responses are unchanged.

Normal: The full soundscape, following the sun and weather sent from the page.

Daylight Preview: Tap down to hear full daylight for 10 seconds. It fades in over half a second and back out over the last two, then returns to the real sky. Tapping again during a preview restarts the 10 seconds.

Inputs & Outputs

Inputs

Outputs

Inputs

CV 1

Bird Type CV
Added to the X knob. Patch a slope here and the species changes from phrase to phrase. About 0 to +5 V covers most of the range, so start with X well anticlockwise. Does nothing when unplugged.

CV 2

Chime Tone CV
Added to the Y knob, stepping through the six chime instruments. About 0 to +5 V covers most of the range, so start with Y well anticlockwise. Does nothing when unplugged.

Pulse 1

Strike Chime
Each rising edge strikes a chime straight away, using the current key, instrument and daylight.

Pulse 2

Start Bird
Each rising edge starts a bird phrase straight away, if one of the three bird voices is free.

Outputs

Audio 1

Drone
Root, fifth and octave. Daylight raises its level and brightness, cloud dulls it, and wind adds vibrato, beating and slow gusting swells. Rain adds a soft crackle and faint hiss.

Audio 2

Chimes and Birds
Chimes through a feedback delay that wind wobbles like tape, plus dry birds with a light reverb of their own. Chimes are quieter and softer before sunrise. Rain adds its own independent crackle.

CV 1

Daylight
0 V at night, rising to +5 V in full daylight. Patch it to a filter's FM input to open other sounds with the dawn.

CV 2

Chime Pitch
1 V/oct pitch of the most recent chime, so other voices can follow the melody.

Pulse 1

Chime Trigger
A 10 ms trigger on every chime, including those struck from Pulse In 1.

Pulse 2

Bird Trigger
A 10 ms trigger at the start of every bird phrase.

LEDs

LED 1

Daylight
Brightness follows the daylight level, as CV Out 1.

LED 2

USB Link
Solid while the page is sending. Blinking slowly means no page has connected yet, or the link has dropped and the card is holding its last values.

LED 3

Birdsong
Brightness follows how active the birds are at this time of day.

LED 4

Cloud
Brightness follows the cloud cover.

LED 5

Chime
Flashes on each chime.

LED 6

Bird
Flashes at the start of each bird phrase.

README

Dawn Chorus

An ambient soundscape that follows the real sun and the local weather. A browser page works out where the sun is for your location, fetches the weather, and streams both to the card over USB. As the sun rises, a drone swells and brightens, chimes ring out and birds wake. Through dusk, everything settles back to (almost) silence. Because the weather is the score, no two sun rises or sun sets sound the same.

Inspired by the tides of Matt Allison's Equanimity card.

What you need

  • A Workshop System or Workshop Computer with this card flashed.
  • A laptop or desktop running Chrome or Edge. Web Serial isn't available in Safari, Firefox or mobile browsers.
  • A USB cable from the Computer's USB-C port to the laptop.
  • An internet connection for the weather. Without one, the sun still works and mild default weather is used.

Getting started

  1. Flash UF2/dawn_chorus_v0.6.uf2 to a program card.
  2. Power the system and connect the Computer to the laptop over USB.
  3. Open the card's Web Editor page. You can also open web/index.html locally; it's a single file with nothing to install.
  4. Set your location by searching for a town, choosing Use my location, or typing coordinates.
  5. Click Connect card and choose the Raspberry Pi / Pico serial device.
  6. The top-right LED goes solid and the page shows Card is receiving.

To hear a whole sunrise straight away, choose Fast on the page.

The host page

The page has three time modes:

Mode What it does
Live Real time and real weather. The card follows today's actual sun.
Fast The real sun and forecast weather, played at 10× to 1440× from an hour before the next sunrise or sunset.
Manual Sliders for sun height, rising or setting, and each weather value, for auditioning.

A band across the top shows the day's sun path in sky colours, with sunrise and sunset times. The page remembers your location and mode.

How the sky becomes sound

Data What you hear
Daylight Rises smoothly from nautical twilight (sun 12° below the horizon) to the sun 12° up. It raises the drone's level and brightness, makes chimes louder, brighter, busier and higher, and drives CV Out 1.
Birdsong Builds slowly from first light, peaks just after sunrise, settles to 80% through the morning, eases to 60% when the sun is high, lifts again for an evening chorus, and fades through dusk. In winter the sun stays low, so there's little midday lull.
Cloud Dulls the drone.
Wind Adds vibrato, beating and slow gusting swells to the drone, makes the chime echoes waver like tape, and makes chimes busier. Above about 14 km/h the chime notes bend too, by up to about 9 cents in strong gusts.
Warmth Brightens the chime strike.
Humidity Lengthens the echoes.
Rain Adds a soft vinyl-style crackle with a faint hiss, independently on each output.

Values from the page are smoothed on the card: over about a second for the sun and about four seconds for the weather, so changes arrive gradually rather than in steps.

Outputs

Jack What it does
Audio Out 1 Drone: root, fifth and octave. Rain crackle.
Audio Out 2 Chimes through a feedback delay, plus birds. The birds skip the delay and have a light reverb of their own. Rain crackle.
CV Out 1 Daylight, 0 V at night to +5 V in full daylight.
CV Out 2 Pitch of the latest chime, 1 V/oct.
Pulse Out 1 10 ms trigger on each chime.
Pulse Out 2 10 ms trigger at the start of each bird phrase.

Inputs

Jack What it does
CV In 1 Added to X (bird type). A slope here changes the species from phrase to phrase.
CV In 2 Added to Y (chime instrument).
Pulse In 1 Strikes a chime immediately.
Pulse In 2 Starts a bird phrase immediately.

About 0 to +5 V covers most of a knob's range, so with a slope patched in, start with the knob well anticlockwise. Unplugged CV inputs have no effect.

Controls

Control What it does
Main Key. 12 o'clock is D, and each step is a semitone. The drone, chimes and CV Out 2 follow, with a short glide.
X Bird type. Anticlockwise gives low, slow coos, 12 o'clock warbling songbirds, and clockwise small, fast tweets.
Y Chime instrument, anticlockwise to clockwise: marimba, harp, xylophone, bell, vibraphone, glockenspiel. Marimba, harp and xylophone use Casio CZ-style phase distortion; the others use two-operator FM.
Switch middle Normal.
Switch up Sparse: chimes and birds at 40% of normal.
Tap down Preview full daylight for 10 seconds, then return to the real sky.

There's no volume control on the card, so set levels on the mixer.

LEDs

LED Meaning
Top left Daylight
Top right USB link: solid while receiving, slow blink while waiting or after the link drops
Middle left Birdsong activity
Middle right Cloud cover
Bottom left Flashes on each chime
Bottom right Flashes on each bird phrase

(Strongly) suggested patch

  • Audio Out 1 (drone) straight to Mix, volume knob about 12 o'clock.
  • Audio Out 2 (birds and chimes) to top Humpback Filter. Filter FM at max, cut-off knob at 9 o'clock.
  • Humpback Filter low-pass output into Mix, volume knob at 1-2 o'clock.
  • CV Out 1 to top Humpback Filter FM In (to open/close the filter slowly on birds and chimes as the sun rises).
  • Bottom Slope set to Loop mode, Up/Down shape, knob at 3 o'clock, to CV In 1 (this varies the bird type).
  • Top Slope set to Loop mode, Up/Down shape, knob at 3 o'clock, to CV In 2 (this varies the chime sound).
  • X knob at 12 o'clock
  • Y knob at 12 o'clock
  • Main knob (pitch) to taste

Without the page

The card needs the page to know where the sun is. With nothing connected it sits at night: almost silent, apart from an occasional chime. Tap the switch down to preview daylight. If the USB link drops, the card holds its last values until the page reconnects.

Protocol

USB CDC serial at 115200, newline-terminated ASCII. Ten times a second the page sends:

F el=-4.21 li=0.1830 ch=0.4200 ri=1 cl=0.400 wi=0.250 te=0.550 ra=0.000 hu=0.700

Key Meaning Range
el Solar elevation degrees
li Daylight (smoothstep from -12° to +12°) 0–1
ch Birdsong (see above) 0–1
ri Sun rising 0 or 1
cl Cloud cover ÷ 100 0–1
wi Wind km/h ÷ 40 0–1
te (Temperature °C + 5) ÷ 35 0–1
ra Precipitation mm ÷ 4 0–1
hu Relative humidity ÷ 100 0–1

The page also sends HELLO, and the card replies with its name and version. Twice a second the card sends S fr=<frames> ch=<chimes> bi=<birds> li=<0-1000>, which the page shows as counts.

The card ignores keys it doesn't recognise, and the mapping from raw weather to 0–1 lives in the page (weatherAt, buildFrame and birdsong in web/index.html). That means new data feeds can be added, or the mappings retuned, without reflashing. Anything that can write to a serial port can drive the card, for example a Python script or a Raspberry Pi in an installation.

Never open the port at 1200 baud: the Pico SDK treats that as a request to reboot into BOOTSEL.

Building

Needs the Pico SDK (tested with 2.1.1) and arm-none-eabi-gcc:

cd src

mkdir build && cd build

cmake .. -DPICO_SDK_PATH=/path/to/pico-sdk -DPICO_BOARD=pico

make

Core 0 runs ComputerCard's 48 kHz audio loop in integer maths. Core 1 reads USB serial, parses frames and smooths the values. The whole program runs from RAM (copy_to_ram) so the audio never waits on flash.

sim/ compiles the card's main.cpp on a desktop with a stand-in for ComputerCard, plays a compressed day, and writes day.wav. It's useful for checking sounds and levels without flashing:

cd sim

cp ../src/main.cpp card.cpp

g++ -O2 -std=c++17 -I. -Dprotected=public -Dprivate=public -include cmath -include cstring -include algorithm sim.cpp -o sim

./sim 0.6 0.3 # wind and rain, 0 to 1

Credits

Dawn Chorus by Joe Hedinger, designed and built with (significant) support from James Saunders. Vibe-coded with Claude. Weather data from Open-Meteo. Sun position from the NOAA solar calculator equations. With thanks to Matt Allison for the inspiration, and to Tom Whitwell for creating the Workshop System.

About this card

Creator
Joe Hedinger (isbn) with (significant) support from James Saunders
Language
C++ (Pico SDK + ComputerCard)
Version
0.6
Status
Beta
Created
2026-10-05
Updated
2026-10-09

Notes

Dawn Chorus host page: Opens from the Web Editor button in Chrome or Edge on a laptop or desktop. It calculates the sun's position for your location, fetches hourly weather from Open-Meteo (free, no account), and sends…

The card needs the page to know where the sun is. With nothing connected it sits at night, so it is almost silent apart from the occasional chime. Tap the switch down to preview daylight. If the USB link drops, the card…

Data sources

releases/123_Dawn_Chorus/info.yaml, releases/123_Dawn_Chorus/README.md

Verify your download

Confirm the file you downloaded really is that new firmware.

macOS / Linux (Terminal)

shasum -a 256 firmware.uf2

Linux also has sha256sum firmware.uf2.

Windows (PowerShell)

Get-FileHash firmware.uf2 -Algorithm SHA256

Compare the result to the SHA256 on the website — it should match exactly.