Provides comprehensive MIDI control capabilities including sending notes, control change messages, program changes, note sequences, and SysEx messages for controlling MIDI devices and hardware synthesizers.
Digitakt MIDI MCP Server
An MCP (Model Context Protocol) server for controlling the Elektron Digitakt II via MIDI.
Project Structure
Features
Send MIDI Notes: Trigger drum sounds on specific tracks
Control Parameters: Adjust filters, envelopes, and other parameters via CC messages
Program Changes: Switch between patterns
Note Sequences: Send rhythmic patterns programmatically
NRPN Support: Advanced parameter control including per-trig note, velocity, and length
Transport Control: Start/Stop/Continue sequencer playback and jump to positions
SysEx Support: Send raw SysEx messages for advanced control and pattern programming
Installation
Create and activate a virtual environment:
Install dependencies:
Make sure your Digitakt II is connected via USB with Overbridge
Configure Digitakt MIDI Settings for Multi-Track Triggering:
The MCP server sends track triggers on per-track MIDI channels (Track 1 on Channel 1, Track 2 on Channel 2, etc.). To enable simultaneous triggering of multiple tracks, you must configure your Digitakt:
Settings → MIDI Config → Channels:
Option A: Per-Track Channels (Recommended for MCP)
Set each track to its corresponding MIDI channel:
Track 1: Channel 1
Track 2: Channel 2
...
Track 16: Channel 16
This allows the MCP server to trigger multiple tracks simultaneously
Option B: Auto Channel (Simple but Limited)
Set all tracks to "Auto Channel" (default)
Only the currently selected track will respond to triggers
You cannot trigger multiple tracks simultaneously from the MCP server
To set per-track channels on Digitakt:
Press [FUNC] + [SETTINGS]
Navigate to MIDI → CONFIG → CHANNELS
For each track (TRK 1-16), set MIDI IN channel to match track number
Save settings
Usage
Running the Server Manually
Configuring with Claude Desktop
Add this to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):
Then restart Claude Desktop.
Available Tools
send_note
Send a MIDI note to trigger drums on the Digitakt.
Parameters:
note(required): MIDI note number (0-127). Notes 0-7 trigger tracks 1-8. Notes 12-84 play active track chromatically.velocity(optional): Note velocity (1-127), default 100duration(optional): How long to hold the note in seconds, default 0.1channel(optional): MIDI channel (1-16), default 1
Examples:
trigger_track
Trigger a one-shot sample on a specific Digitakt II track (convenience wrapper).
Parameters:
track(required): Track number (1-16)velocity(optional): Note velocity (1-127), default 100duration(optional): How long to hold the note in seconds, default 0.1channel(optional): MIDI channel (1-16), default 1
Examples:
send_cc
Send a Control Change message to adjust Digitakt parameters.
Parameters:
cc_number(required): CC number (0-127)value(required): CC value (0-127)channel(optional): MIDI channel (1-16), default 1
Common CC Numbers for Digitakt II:
Track:
94: Mute
95: Track Level
Source:
16: Tune
23: Sample Level
Filter Envelope:
70: Attack Time
71: Decay Time
72: Sustain Level
73: Release Time
74: Filter Frequency
77: Envelope Depth
AMP Envelope:
79: Attack Time
80: Hold Time
81: Decay Time
82: Sustain Level
83: Release Time
89: Volume
90: Pan
FX:
84: Delay Send
85: Reverb Send
12: Chorus Send
57: Overdrive
Note: Filter and AMP have separate envelopes with different CC numbers. Some parameters like LFO Speed and Depth are high-resolution and use both CC MSB and LSB.
Example:
send_program_change
Switch to a different pattern on the Digitakt.
Parameters:
program(required): Pattern number (0-127)channel(optional): MIDI channel (1-16), default 1
Example:
send_note_sequence
Send a sequence of notes with timing.
Parameters:
notes(required): Array of [note, velocity, duration] tripletsdelay(optional): Time between notes in seconds, default 0.25channel(optional): MIDI channel (1-16), default 1
Example:
send_nrpn
Send an NRPN (Non-Registered Parameter Number) message for advanced parameter control.
Parameters:
msb(required): NRPN MSB (1=Track/Trig/Source/Filter/Amp, 2=FX, 3=Trig Note/Velocity/Length)lsb(required): NRPN LSB (parameter number)value(required): Parameter value (0-127)channel(optional): MIDI channel (1-16), default 1
Example:
Common NRPNs:
MSB=3, LSB=0: Trig Note
MSB=3, LSB=1: Trig Velocity
MSB=3, LSB=2: Trig Length
MSB=1, LSB=20: Filter Frequency
MSB=1, LSB=21: Filter Resonance
set_trig_note
Convenience tool to set the note for a trig (step).
Parameters:
note(required): MIDI note number (0-127)channel(optional): MIDI channel (1-16), default 1
Example:
set_trig_velocity
Convenience tool to set the velocity for a trig (step).
Parameters:
velocity(required): Velocity (0-127)channel(optional): MIDI channel (1-16), default 1
set_trig_length
Convenience tool to set the length for a trig (step).
Parameters:
length(required): Note length (0-127)channel(optional): MIDI channel (1-16), default 1
send_midi_start
Send MIDI Start message to start the Digitakt's sequencer from the beginning.
Parameters: None
Example:
Important: The Digitakt requires MIDI Clock to actually play when externally controlled. Use play_with_clock instead for reliable playback, or ensure you're sending clock pulses separately. Requires TRANSPORT RECEIVE and CLOCK RECEIVE enabled in MIDI SYNC settings.
send_midi_stop
Send MIDI Stop message to stop the Digitakt's sequencer.
Parameters: None
Example:
send_midi_continue
Send MIDI Continue message to resume the Digitakt's sequencer from its current position.
Parameters: None
Example:
send_song_position
Send MIDI Song Position Pointer to jump to a specific position in the sequence.
Parameters:
position(required): Song position in MIDI beats (16th notes). 0 = start, 16 = 1 bar in 4/4 time.
Examples:
play_with_clock
Start the Digitakt sequencer and send MIDI clock for a specified duration. This is the recommended way to control Digitakt playback remotely.
Parameters:
bars(optional): Number of bars to play in 4/4 time. Default is 4 bars.bpm(optional): Tempo in beats per minute. Default is 120 BPM.send_stop(optional): Send MIDI Stop after duration. Default is true.
Examples:
Use case: This tool sends MIDI Start + Clock pulses + Stop, which the Digitakt needs to actually play when externally controlled. You can use this to play the Digitakt's sequencer while also sending notes or CC messages.
play_pattern_with_tracks
Start the Digitakt pattern and trigger specific tracks at specific times. Combines MIDI transport control with precise track triggering.
Parameters:
bars(optional): Number of bars to play in 4/4 time. Default is 4 bars.bpm(optional): Tempo in beats per minute. Default is 120 BPM.triggers(required): Array of[beat, track, velocity]where beat is 0-based quarter note (0=start, 1=beat 2, etc), track is 1-16, velocity is 1-127.send_stop(optional): Send MIDI Stop after duration. Default is true.
Examples:
Use case: Perfect for layering additional drum hits on top of your Digitakt's pattern. You can trigger specific tracks at precise times while the pattern plays.
play_pattern_with_melody
Start the Digitakt pattern and play a melodic sequence on the active track. Combines MIDI transport control with melodic note sequences.
Parameters:
bars(optional): Number of bars to play in 4/4 time. Default is 4 bars.bpm(optional): Tempo in beats per minute. Default is 120 BPM.notes(required): Array of[beat, note, velocity, duration]where beat is 0-based quarter note, note is MIDI note 12-127, velocity is 1-127, duration is in seconds.channel(optional): MIDI channel (1-16). Default is 1 (auto channel).send_stop(optional): Send MIDI Stop after duration. Default is true.
Examples:
Use case: Add melodic elements or basslines on top of your Digitakt pattern. The active track will play chromatically while the pattern runs.
play_pattern_with_loop
Start the Digitakt pattern and continuously trigger notes on a loop. Combines MIDI transport control with looping note patterns.
Parameters:
bars(optional): Number of bars to play in 4/4 time. Default is 4 bars.bpm(optional): Tempo in beats per minute. Default is 120 BPM.loop_notes(required): Array of[beat_offset, note_or_track, velocity]where beat_offset is relative to loop start (0-3.99 for 1 bar loop), note/track can be 0-15 for tracks or 12+ for melody, velocity is 1-127.loop_length(optional): Length of the loop in bars (in 4/4 time). Default is 1 bar.channel(optional): MIDI channel (1-16). Default is 1 (auto channel).send_stop(optional): Send MIDI Stop after duration. Default is true.
Examples:
Use case: Create repeating rhythmic or melodic patterns that play continuously while your Digitakt pattern runs. Perfect for hi-hats, percussion loops, or ostinato basslines.
play_pattern_with_tracks_and_melody
Start the Digitakt pattern and play both track triggers AND melody notes simultaneously. Combines all capabilities in a single MIDI clock session.
Parameters:
bars(optional): Number of bars to play in 4/4 time. Default is 4 bars.bpm(optional): Tempo in beats per minute. Default is 120 BPM.track_triggers(optional): Array of[beat, track, velocity]or[beat, track, velocity, note]where beat is 0-based quarter note, track is 1-16, velocity is 1-127, and optional note is MIDI note 0-127 for chromatic triggering (if omitted, uses track number for standard triggering). Default is empty array.melody_notes(optional): Array of[beat, note, velocity, duration]where beat is 0-based quarter note, note is MIDI note 12-127, velocity is 1-127, duration is in seconds. Default is empty array.channel(optional): MIDI channel for melody notes (1-16). Track triggers always use channel 1. Default is 1.midi_start_at_beat(optional): Beat number (0-based) to send MIDI Start and begin MIDI Clock. Before this beat, only note triggers are sent (no transport control). When starting mid-sequence (beat > 0), a MIDI Song Position Pointer message is sent before MIDI Start to ensure the Digitakt sequencer aligns with the correct beat position. Default is 0 (send MIDI Start immediately). Use this for count-in workflows where you want to arm recording during count-in, then start Digitakt sequencer at a specific beat.preroll_bars(optional): Number of bars to delay melody notes (not track triggers). Track triggers play immediately during preroll, melody notes start after preroll. Use for live recording: Set preroll_bars to your loop length (e.g., 4 for a 4-bar loop), let drums play during preroll while you arm recording, then melody notes arrive and get recorded perfectly. Default is 0 (no preroll).send_stop(optional): Send MIDI Stop after duration. Default is true.
Examples:
Use case: Perfect for recording sessions where you want a count-in on one track while recording melody on another. Also great for combining drum hits with melodic parts, or creating complex layered sequences with precise timing control.
Key feature: Both track triggers and melody notes are scheduled in the same beat-based timeline, so they can overlap, interleave, and play simultaneously with perfect timing.
Important: Track triggers are sent on per-track MIDI channels (Track 1 → Channel 1, Track 2 → Channel 2, etc.). To trigger multiple tracks simultaneously, configure your Digitakt's MIDI settings to use per-track channels instead of "Auto Channel" (see Installation section for setup instructions).
play_pattern_with_multi_channel_midi
Play patterns with MIDI notes on multiple channels simultaneously. Send drums to Digitakt tracks while also sending MIDI notes to multiple external instruments on different channels all synchronized together.
Parameters:
bars(optional): Number of bars to play in 4/4 time. Default is 4 bars.bpm(optional): Tempo in beats per minute. Default is 120 BPM.track_triggers(optional): Array of[beat, track, velocity]or[beat, track, velocity, note]for Digitakt drum tracks where beat is 0-based quarter note, track is 1-16, velocity is 1-127, and optional note is MIDI note 0-127 for chromatic triggering (if omitted, uses track number for standard triggering). Default is empty array.midi_channels(optional): Dictionary mapping MIDI channel numbers (1-16) to arrays of[beat, note, velocity, duration]. Each channel can have independent note sequences. Default is empty object{}.send_clock(optional): Send MIDI Clock messages for transport sync. Default is true.midi_start_at_beat(optional): Beat number (0-based) to send MIDI Start and begin MIDI Clock. When starting mid-sequence (beat > 0), a MIDI Song Position Pointer message is sent before MIDI Start. Default is 0 (immediate start).preroll_bars(optional): Number of bars to delay MIDI channel notes (not track triggers). Track triggers play immediately during preroll, MIDI notes start after preroll. Use for live recording: Set preroll_bars to your loop length, let drums play during preroll while you arm recording, then MIDI notes arrive and get recorded perfectly. Default is 0 (no preroll).send_stop(optional): Send MIDI Stop after duration. Default is true.
Examples:
Use case: Perfect for hybrid setups where you're using the Digitakt for drums while controlling multiple external synths (hardware or software) on different MIDI channels. All instruments stay perfectly synchronized with MIDI Clock, and you can use delayed start for count-in workflows.
Key feature: Each MIDI channel can have completely independent note sequences, allowing you to orchestrate multiple instruments from a single function call. All events are precisely timed and synchronized.
save_last_melody
Save the last played melody from play_pattern_with_melody to a standard MIDI file. Perfect for capturing generated melodies you like.
Parameters:
filename(required): Filename for the MIDI file (e.g., 'my_melody.mid'). Will be saved in the current directory.
Examples:
Use case: After using play_pattern_with_melody to generate or play a melody, you can save it to a MIDI file for use in your DAW, other hardware, or for archival. The MIDI file includes the original tempo and timing.
Note: This only works after you've used play_pattern_with_melody at least once. The melody is saved with the exact BPM, notes, velocities, and durations from the last playback.
save_last_pattern
Save the last played pattern from play_pattern_with_multi_channel_midi to a standard MIDI file. Captures the complete multi-track pattern with all drums and MIDI channel notes.
Parameters:
filename(required): Filename for the MIDI file (e.g., 'my_pattern.mid'). Will add .mid extension if not present.
Output Location: Files are saved to /mnt/user-data/outputs/
Examples:
Use case: After using play_pattern_with_multi_channel_midi to play a complex pattern with drums and multiple MIDI channels, save it to a multi-track MIDI file. Perfect for:
Capturing patterns you created and want to preserve
Importing into your DAW for further editing
Sharing patterns with collaborators
Archiving your work
What gets saved:
All track triggers (Digitakt tracks 1-16) on their respective MIDI channels
All MIDI channel notes (external synths) on their designated channels
Tempo and timing information
Multi-track MIDI file format (Type 1)
Proper track names for easy identification in DAWs
Note: This only works after you've used play_pattern_with_multi_channel_midi at least once. The pattern is saved with the exact BPM, bars, track triggers, and MIDI channel data from the last playback.
export_pattern_to_midi
Export a complete Digitakt pattern to a standard MIDI file (.mid). Creates a multi-track MIDI file with drums on channel 1 and melody on a specified channel. Supports chromatic track triggers.
Parameters:
filename(required): Output filename (will add .mid extension if not present)bpm(optional): Tempo in beats per minute. Default is 120 BPM.bars(optional): Total length in bars (4/4 time). Default is 4 bars.track_triggers(optional): Array of[beat, track, velocity]or[beat, track, velocity, note]for drum/sample triggersmelody_notes(optional): Array of[beat, note, velocity, duration]for melody notesmelody_channel(optional): MIDI channel for melody notes (1-16). Default is 1.
Examples:
Use case: Export patterns for use in DAWs, share with collaborators, archive your work, or import into other hardware sequencers. Unlike save_melody_to_midi, this function lets you specify the pattern data directly without needing to play it first.
send_sysex
Send a System Exclusive (SysEx) message to the Digitakt for advanced control and pattern programming.
Parameters:
data(optional): Array of bytes (0-127) to send as SysEx data. F0 and F7 bytes are added automatically.hex_string(optional): Alternative todata- provide SysEx as hex string (e.g., "00203C...")
Elektron Manufacturer ID: 0x00 0x20 0x3C
Example:
Note: The exact SysEx format for Digitakt pattern programming is not publicly documented by Elektron. You can:
Use this tool to send raw SysEx data you've captured or reverse-engineered
Capture SysEx dumps from Elektron Transfer software
Experiment with the format by analyzing saved .syx files
request_sysex_dump
Request a SysEx data dump from the Digitakt (pattern, sound, kit, or project).
Parameters:
dump_type(required): Type of dump - "pattern", "sound", "kit", or "project"bank(optional): Bank number (0-15)pattern_number(optional): Pattern number within bank (0-15)
Example:
Important: This sends a best-guess dump request format. The exact protocol is not publicly documented. You may need to:
Monitor SysEx responses using MIDI monitoring software
Use Elektron Transfer for official dumps
Adjust the command bytes based on experimentation
Parameter Automation Framework
The Digitakt MIDI MCP server includes a powerful parameter automation framework that allows you to create dynamic, evolving sounds by automating any parameter in real-time. This includes filter sweeps, envelope shaping, LFO modulation, and more.
Important: Parameter automation is sent in real-time via MIDI and is NOT saved to Digitakt patterns. It's perfect for live performance, recording to audio, or DAW integration.
Preset Storage Location
All automation presets are stored in: ~/.digitakt-mcp/presets/
This directory is automatically created when the server starts.
Available Parameters
Use the list_parameters tool to see all available parameters organized by category:
Filter: cutoff, resonance, type, envelope (ADSR + depth)
Amp: volume, pan, envelope (ADSHR), mode
Source/Sample: tune, pitch, sample start/length/loop, sample level
LFO 1/2/3: speed, multiplier, fade, destination, waveform, start phase, trig mode, depth
FX Sends: chorus, delay, reverb, overdrive
Delay/Reverb/Chorus FX: detailed parameters for each effect
Track: level, mute
Trig: note, velocity, length
set_parameter
Set any parameter to a specific value instantly. Use this for immediate parameter changes without sweeping or envelopes.
Parameters:
parameter(required): Parameter name (e.g., 'filter_cutoff', 'lfo1_depth', 'amp_volume')value(required): Parameter value (0-127)channel(optional): MIDI channel (1-16), default 1
⚠️ IMPORTANT - Channel Routing: On the Digitakt II, each track (1-16) has its own MIDI channel (1-16). To control parameters on a specific track, you MUST set the channel parameter to match the track number:
Track 1 parameters → channel 1
Track 12 parameters → channel 12
etc.
The default channel is 1, which only affects Track 1.
Examples:
send_parameter_sweep
Smoothly sweep any parameter from one value to another over a specified duration. Perfect for filter sweeps, pitch bends, LFO depth fades, etc.
Parameters:
parameter(required): Parameter name (e.g., 'filter_cutoff', 'lfo1_depth', 'sample_start')start_value(required): Starting value (0-127)end_value(required): Ending value (0-127)duration_sec(required): Duration in secondscurve(optional): 'linear', 'exponential', or 'logarithmic', default 'linear'steps(optional): Number of messages to send (more = smoother), default 50channel(optional): MIDI channel (1-16), default 1
⚠️ IMPORTANT - Channel Routing: On the Digitakt II, each track (1-16) has its own MIDI channel (1-16). To control parameters on a specific track, you MUST set the channel parameter to match the track number:
Track 1 parameters → channel 1
Track 12 parameters → channel 12
etc.
The default channel is 1, which only affects Track 1.
Examples:
send_parameter_envelope
Apply an ADSR-style envelope to any parameter. Creates organic parameter movements with attack, decay, sustain, and release stages.
Parameters:
parameter(required): Parameter nameattack_sec(required): Attack time (time to reach peak 127)decay_sec(required): Decay time (time to drop to sustain level)sustain_level(required): Sustain value (0-127)release_sec(required): Release time (time to return to 0)steps_per_stage(optional): Messages per stage (more = smoother), default 20channel(optional): MIDI channel (1-16), default 1
⚠️ IMPORTANT - Channel Routing: On the Digitakt II, each track (1-16) has its own MIDI channel (1-16). To control parameters on a specific track, you MUST set the channel parameter to match the track number:
Track 1 parameters → channel 1
Track 12 parameters → channel 12
etc.
The default channel is 1, which only affects Track 1.
Examples:
play_pattern_with_parameter_automation
Play a pattern with automated parameter changes at specific beats. This is the main tool for creating complex, evolving sounds. Supports multiple parameters changing simultaneously.
Parameters:
parameter_automation(required): Object mapping parameter names to [beat, value] pairsbars(optional): Number of bars to play (4/4 time), default 4bpm(optional): Tempo in BPM, default 120track_triggers(optional): Array of [beat, track, velocity] for triggering trackssend_clock(optional): Send MIDI Start/Clock, default truesend_stop(optional): Send MIDI Stop after duration, default truechannel(optional): MIDI channel (1-16), default 1
⚠️ IMPORTANT - Channel Routing: On the Digitakt II, each track (1-16) has its own MIDI channel (1-16). To control parameters on a specific track, you MUST set the channel parameter to match the track number. The default channel is 1, which only affects Track 1.
Examples:
save_automation_preset
Save parameter automation as a reusable JSON preset file.
Parameters:
preset_name(required): Name for the preset (without .json extension)automation(required): Automation data (same format as play_pattern_with_parameter_automation)description(optional): Description of what this preset does
Example:
Presets are saved to: ~/.digitakt-mcp/presets/wobble_bass.json
load_automation_preset
Load and optionally play a saved automation preset.
Parameters:
preset_name(required): Name of preset to load (without .json extension)play(optional): If true, immediately play the preset, default false
Examples:
list_automation_presets
List all available automation presets.
Example:
Output shows all presets in ~/.digitakt-mcp/presets/ with their descriptions.
export_automation_to_midi
Export parameter automation to a standard MIDI file that can be imported into any DAW.
Parameters:
filename(required): Output MIDI filename (will add .mid extension if not present)automation(required): Automation datachannel(optional): MIDI channel (1-16), default 1
Example:
Creates my_loop.mid that can be imported into Ableton, Logic, FL Studio, etc.
list_parameters
List all available parameters that can be automated, organized by category.
Parameters:
category(optional): Filter by category name
Examples:
Workflow Examples
Live Performance:
Recording Loops for Composition:
DAW Integration:
Resources
midi://ports
Lists all available MIDI input and output ports on the system.
midi://digitakt/status
Shows the current connection status to the Digitakt MIDI ports.
Digitakt MIDI Reference
Note Numbers for Tracks
To trigger one-shots on specific tracks (regardless of active track):
Track 1: MIDI note 0 (C-2 / C0)
Track 2: MIDI note 1 (C#-2 / C#0)
Track 3: MIDI note 2 (D-2 / D0)
Track 4: MIDI note 3 (D#-2 / D#0)
Track 5: MIDI note 4 (E-2 / E0)
Track 6: MIDI note 5 (F-2 / F0)
Track 7: MIDI note 6 (F#-2 / F#0)
Track 8: MIDI note 7 (G-2 / G0)
Track 9: MIDI note 8 (G#-2 / G#0)
Track 10: MIDI note 9 (A-2 / A0)
Track 11: MIDI note 10 (A#-2 / A#0)
Track 12: MIDI note 11 (B-2 / B0)
Track 13: MIDI note 12 (C-1 / C1)
Track 14: MIDI note 13 (C#-1 / C#1)
Track 15: MIDI note 14 (D-1 / D1)
Track 16: MIDI note 15 (D#-1 / D#1)
To play the currently active track chromatically:
MIDI notes 12 and above (C1+) will play the active track at different pitches
Note: This overlaps with track 13-16 triggers, so if you want chromatic playback, use notes higher than 15
Note: MIDI channels 1-16 can be assigned to tracks 1-16, or use AUTO CHANNEL to control the currently active track.
Common CC Parameters
Check the Digitakt II manual (OS 1.03) Appendix B for the full CC map. Key parameters:
Track:
94: Mute
95: Track Level
Source:
16: Tune
23: Sample Level
Filter Envelope (separate from AMP):
70: Attack Time
71: Decay Time
72: Sustain Level
73: Release Time
74: Filter Frequency
77: Envelope Depth
AMP Envelope:
79: Attack Time
80: Hold Time (unique to AMP)
81: Decay Time
82: Sustain Level
83: Release Time
89: Volume
90: Pan
FX Sends:
84: Delay Send
85: Reverb Send
12: Chorus Send
57: Overdrive
IMPORTANT: The Filter and AMP have separate envelopes with different CC numbers. CC 70-73 control the Filter envelope, while CC 79-83 control the AMP envelope.
NRPN Parameters
NRPNs (Non-Registered Parameter Numbers) provide access to more parameters than standard CCs. The server includes a complete nrpn_constants.py file with all parameter definitions.
NRPN Structure:
MSB (CC 99): Category (1, 2, or 3)
LSB (CC 98): Specific parameter
Data Entry MSB (CC 6): Value (0-127)
Data Entry LSB (CC 38): Fine value (usually 0)
Categories:
MSB 1: Track, Source, Filter, Amp, LFO parameters
MSB 2: FX (Delay and Reverb) parameters
MSB 3: Trig parameters (Note, Velocity, Length)
Key Trig Parameters (MSB=3):
LSB 0: Trig Note (pitch per step)
LSB 1: Trig Velocity (velocity per step)
LSB 2: Trig Length (note length per step)
Filter Parameters (MSB=1):
LSB 16: Attack Time
LSB 17: Decay Time
LSB 18: Sustain Level
LSB 19: Release Time
LSB 20: Frequency
LSB 23: Envelope Depth
AMP Parameters (MSB=1):
LSB 30: Attack Time
LSB 31: Hold Time
LSB 32: Decay Time
LSB 33: Sustain Level
LSB 34: Release Time
LSB 36: Delay Send
LSB 37: Reverb Send
LSB 38: Pan
LSB 39: Volume
See nrpn_constants.py for the complete parameter list.
Testing and Development
Running Tests
Test scripts are located in the tests/ directory. All tests require the Digitakt II to be connected via USB.
Analysis Tools
Analysis tools are located in the analysis/ directory for research and reverse engineering.
Troubleshooting
MIDI device not found:
Make sure the Digitakt is connected via USB
Check that Overbridge is properly installed
Verify the device shows up in Audio MIDI Setup (macOS)
Permission errors:
On macOS, you may need to grant microphone permissions to Terminal/iTerm
Check System Preferences > Security & Privacy > Privacy > Microphone
Working with SysEx
The Digitakt supports SysEx for advanced operations, but Elektron hasn't published the detailed protocol specification. Here are some approaches to work with SysEx:
Capturing SysEx Data
Using Elektron Transfer:
Use Elektron Transfer to save patterns/sounds as .syx files
Analyze these files to understand the format
Use
send_sysexwith the captured data
MIDI Monitoring:
Use tools like MIDI Monitor (macOS) or MIDI-OX (Windows)
Capture SysEx dumps from the device
Analyze the byte structure
Reverse Engineering:
Study community projects like the Analog Rytm SysEx library
Experiment with sending modified SysEx data
Document your findings
SysEx Structure
All Elektron SysEx messages follow this basic structure:
Tips for Pattern Programming
Start by capturing existing patterns via Transfer
Compare multiple patterns to identify fields
Test modifications carefully to avoid corrupting device memory
Always backup your projects before experimenting
License
MIT