What it does
Everything Clouds plays comes out of a recording buffer that the input keeps writing into, about one second of 16-bit stereo. POSITION says where in that second to read, SIZE how long each piece is, PITCH how far to transpose it and DENSITY how many pieces play at once. TEXTURE shapes them and BLEND mixes the result with the dry input.
FREEZE stops the recording. The buffer holds what it has, and you play that snapshot for as long as you like. A gate on J3 does the same, so a sequencer can freeze and release it.
The original Clouds used one BLEND knob for four jobs: dry/wet, stereo spread, feedback and reverb, chosen with a button. Here each of those four has its own pot. That is why this firmware has a second page.
The panel
Every hole sits where it sits on an Alchemy Lab. The rings show what the firmware draws for the example values. Hold B3 and the pots become the Setup page; hold B2 and B3 together for two seconds and Settings opens.
The panel
| Pot | Play page | Setup page (hold B3) |
|---|---|---|
| P1 · top left | Position: where grains read from, now to oldest | Mode: Granular · Stretch · Looping delay · Spectral |
| P2 · top right | Size: grain size, loop length, FFT window | Quality: 16-bit stereo · 16-bit mono · 8-bit stereo · 8-bit mono |
| P3 · middle left | Pitch: −24 to +24 semitones, detents near noon, plus J5 | Spread: how far grains scatter across the stereo field |
| P4 · middle right | Density: noon silent, CCW regular, CW random | Feedback: output back into the buffer |
| P5 · bottom left | Texture: grain envelope; past 3 o'clock, a diffuser | Reverb: the built-in reverb |
| P6 · bottom right | Blend: dry / wet | In gain: −12 to +12 dB, 0 dB at noon |
| Button | Does |
|---|---|
| B1 · Freeze | Hold to freeze while held; tap (under 0.3 s) to latch freeze on or off. The J3 gate freezes too. |
| B2 · Seed | Fires a grain now, the same as a trigger on J4. Stands down while B3 is held, so B2 + B3 can open Settings. |
| B3 · Setup | Hold to show the Setup page. Each pot has to catch its stored value before it takes over, so nothing jumps. |
| B2 + B3 · 2 s | Opens Settings: page 1 is brightness and presets, page 2 is the SD-card firmware picker. B1 steps between them; B2 or B3 leaves. |
Modes and quality
Granular
The classic cloud: up to 32 to 57 overlapping grains (more at lower quality). DENSITY sets how many; below noon they come at a steady rate, above noon at random. TEXTURE morphs each grain's envelope and, past 3 o'clock, adds a diffuser.
Stretch
A pitch-shifter and time-stretcher (WSOLA): two overlapping windows aligned by a correlation search, so pitch and speed come apart without the usual flutter. TEXTURE is a low-pass left of noon, high-pass right of it.
Looping delay
A delay line whose loop you can freeze and scan. SIZE sets the loop length and POSITION the delay time; FEEDBACK does what it does on a tape delay. TEXTURE filters as in Stretch.
Spectral
A phase vocoder. The sound is taken apart as frequency bins: TEXTURE quantizes them, DENSITY sets how often the spectrum refreshes, SIZE warps it. The FFT work runs in the main loop, like on the original.
| Quality | Buffer | Grains | Sound |
|---|---|---|---|
| 16-bit stereo | about 1 s | 32 | clean, the default |
| 16-bit mono | about 2 s | 40 | clean, mono in |
| 8-bit stereo | about 2 s | 46 | µ-law, the gritty lo-fi Clouds |
| 8-bit mono | about 4 s | 57 | µ-law, longest memory |
Grain counts are the firmware's own: 32 for stereo or 40 for mono, times 23/16 at 8 bits (granular_processor.cc). Changing mode or quality resets the buffer.
Jacks and CV
| Jack | Signal | How it is read |
|---|---|---|
| J1 · J2 | Audio in, left and right | Codec input. Use IN GAIN (Setup P6) if it records too hot or too quiet. |
| J3 | Freeze gate | Read raw once per 1 ms audio block; high above 1.5 V, low below 0.5 V. ORs with B1. |
| J4 | Trigger: seed a grain | Same reading. The edge is held one block, as upstream holds it for its ADC, so the grain lands with the CV that came with it. |
| J5 | V/Oct → pitch | Calibrated volts × 12 semitones, added to the PITCH knob. Jumps over half a semitone land at once; smaller moves glide. |
| J6 · J7 · J8 | CV → Position · Size · Density | Through the SDK's CV matrix, summed with the pot. Re-route them in the web programmer if you want Texture or Blend instead. |
| J9 · J10 | Audio out, left and right | Codec output. |
Clouds had CV inputs for Texture and Blend. The Lab has six CV jacks, so those two are left to re-routing.
Reading the lights
| Light | Means |
|---|---|
| B1 white | Frozen, by B1 or by the J3 gate. Dim blue when not. |
| B2 green | The input meter: brighter as the input gets louder. |
| B2 amber | Input above 70 % of full scale. |
| B2 red | The input is clipping, or the audio callback is averaging over 80 % of the CPU. |
| B2 white flash | A grain was seeded from B2 (60 ms). |
| B3 dim teal | Setup is one hold away. |
| P1 ring at boot | For 2.5 s: the previous session's worst CPU load. Green under 75 %, amber to 90 %, red above; one dim blue dot means no data yet (first boot after a flash). |
Installing
Download v0.2.0 · built and tested on a computer, not yet run on a module
clouds_alchemy.binSD card zip · all seven
The zip holds all seven firmwares and the Elements samples, laid out for the card: unzip it onto the card's top level and the .bin files land in /alchemy, elements.smp in /mi. Release notes and SHA-256 checksums.
Copy the firmware into the card's alchemy folder next to the others. Open Settings on
whatever firmware is running (hold B2 + B3 for two seconds), press B1 to reach the firmware page,
choose the file with P1 and fire P2: turn it below about 85 %, then past 95 %. It writes, verifies
and reboots into Clouds.
Clouds keeps its knobs in its own file on the card, /alchemy/state/clouds.st, and saves five seconds after the last change, with your hands off the buttons. Switching to another firmware and back brings Clouds' settings back; the pots catch before they take over. Up to v0.1.0 it used preset slot 8; the first boot of v0.2.0 copies that onto the card. The other Lab firmwares keep their own slots, 1–5 and 12–15, so 6–11 are free for presets you save by hand.
/alchemy/ clouds_alchemy.bin this firmware elements_alchemy.bin marbles_alchemy.bin plaits_alchemy.bin …the rest of your firmwares build it yourself: make libdaisy make FW=clouds → build-clouds/clouds_alchemy.bin
v0.1 uses the front USB-C for HostLink only (the web programmer, presets and the card). It does not host a Launchpad or act as an audio interface, and it never changes the card's shared USB setting, so your other firmwares keep theirs.
Where it stands
Done
- Builds: 387 KB of the Lab's 480 KB program memory. The two buffers (116 KB and 64 KB) sit in fast on-chip RAM.
- Native test suite green: all 4 modes × 4 qualities render, freeze holds the buffer, the pitch curve spans ±24 semitones.
- That test found an upstream bug: on eurorack's master branch, Stretch mode goes silent after its first window. The one missing line is restored here and sent upstream as pichenettes/eurorack #72.
Not yet tested
- It has not been flashed or heard on a module.
- CPU load on the Lab's processor is unmeasured. It should be light (Clouds ran on a slower chip), but Spectral mode shares the main loop with the lights and HostLink.
- Input level against Clouds' original ±10 V range is unverified.
- Freeze, seed and V/Oct from real gates and CV.
Left out, compared with a real Clouds
- Saving the audio buffer to flash (hold both buttons on the original). Presets hold the knobs only.
- CV inputs for Texture and Blend, unless you re-route J6–J8.
- The Parasites alternate firmware's extra modes. This is stock Clouds.
How it is built
The DSP is clouds::GranularProcessor from Mutable Instruments' eurorack repository at
commit 08460a6, compiled unchanged apart from the one restored line. It runs at its own 32 kHz with its
own 32-sample block, so the parameter smoothing reads once a millisecond exactly as the original's did.
The firmware around it does what the original's cv_scaler.cc and ui.cc did:
the same smoothing coefficients, the same pitch curve, the same dry/wet scaling.
Source: github.com/timncox/mi-alchemy
(src/clouds/). Clouds is by Emilie Gillet, Mutable Instruments, MIT licence. The Alchemy
SDK and hardware are Hermetic Modular's.