98 Duo MIDI
Duophonic MIDI-to-CV card running a Blackbird Lua script. Z up is duophonic voice allocation, Z middle is mirrored mono, and Z down toggles pulse outputs between trigger and gate mode. Main sets velocity sensitivity; X and Y set envelope attack and release. Receives MIDI note, velocity, pitch bend, and mod wheel.
Panel
Controls
Velocity Sensitivity
Scales envelope sustain by MIDI velocity
Env Attack
Sets ASR attack time
Env Release
Sets ASR release time
Duophonic: Duophonic voice allocation across the two voices
Mirrored Mono: Both voices mirror the same mono note
Trigger/Gate Toggle: Toggles pulse outputs between 10ms trigger and sustained gate behavior
Inputs & Outputs
Inputs
Outputs
Inputs
Env1 Gate
Toggles AudioOut1 envelope state and refreshes envelope parameters
Env 2 Gate
Toggles AudioOut2 envelope state and refreshes envelope parameters
Outputs
Voice 1 ASR Envelope
ASR envelope for voice 1
Voice 2 ASR Envelope
ASR envelope for voice 2
Voice 1 Pitch
1V/oct pitch for assigned voice 1
Voice 2 Pitch
1V/oct pitch for assigned voice 2 (or mirrored in mono mode)
Voice 1 Trigger/Gate
Trigger on assignment or gate while voice 1 is active
Voice 2 Trigger/Gate
Trigger on assignment or gate while voice 2 is active
README
Duo MIDI
A duophonic MIDI-to-CV + envelope card! The first ever card released using Blackbird as a platform under the hood.
Customize the behavior to make your own midi card by opening the duo_midi.lua file in web-druid. Note this script is big so you need to use the upload button in web-druid. for some reason run doesn't.
The version of blackbird included in the UF2 (version 1.1M) is technically unreleased at the time of writing because I haven't tested much blackbird functionality other than this script (so if you load a different script onto it, YMMV).

What it does
- Receives MIDI note, velocity, pitch bend, and mod-wheel (receives on all channels)
- DUO mode: Does round-robin style voice allocation (voices are distributed regardless of MIDI channel)
- MONO mode: Outputs incoming midi to both voices
- Outputs two pitches (duophonic or mirrored mono).
- Outputs two ASR envelopes (at the audio outputs).
- Outputs two triggers / gates on voice assignment.
Controls
Switch
- Up: Duophonic (two voices, dynamically assigned).
- Middle: Monophonic (both channels mirror the same note).
- Down: Toggles gate mode for pulse outputs.
- Gate mode off (default): pulse outputs emit a 10ms trigger on voice assignment.
- Gate mode on: pulse outputs behave like gates (high while the voice is active).
Note: Device/Host mode switching is automatic, but changing it requires a Workshop Computer power cycle.
Knobs
- Main: Velocity sensitivity (scales envelope level by MIDI velocity).
- X: Envelope attack.
- Y: Envelope release.
MIDI behavior
- Pitch bend: ±2 semitones (configurable in code via
BEND_RANGE). - Mod wheel (CC #1): Sets pitch slew on outputs 1–2 from 0 to 1 second.
Voice allocation (duophonic)
When two voices are active, new notes get assigned to the closest existing voice (by pitch distance). When only one voice is active, notes within ~5 semitones tend to reuse the nearby voice; otherwise they take the other voice.