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
SensitivityEnv AttackEnv ReleaseEnv1 GateEnv 2 GateVoice 1 ASR
EnvelopeVoice 2 ASR
EnvelopeVoice 1
PitchVoice 2
PitchVoice 1 Trig
/ GateVoice 2 Trig
/ Gate
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
Env1 Gate
Toggles AudioOut1 envelope state and refreshes envelope parameters
Env 2 Gate
Toggles AudioOut2 envelope state and refreshes envelope parameters
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 Trig / Gate
Trigger on assignment or gate while voice 1 is active
Voice 2 Trig / 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.