Skip to main content
Glama

Digitakt MIDI MCP Server

by feamster
nrpn_constants.py6.36 kB
#!/usr/bin/env python3 """ Digitakt II MIDI CC and NRPN Constants (OS 1.03) Source: Digitakt II User Manual OS 1.03, Appendix B NRPNs provide access to more parameters than standard MIDI CCs. Each NRPN requires sending 4 CC messages to set a value. Structure: MSB (CC 99) = Category LSB (CC 98) = Parameter Data Entry MSB (CC 6) = Value (0-127) Data Entry LSB (CC 38) = Fine value (usually 0) """ # ============================================================================ # MIDI CC CONSTANTS # ============================================================================ class TrackCC: """Track-level CC parameters""" MUTE = 94 LEVEL = 95 class SourceCC: """Source/sample CC parameters""" TUNE = 16 SAMPLE_LEVEL = 23 class FilterCC: """Filter envelope CC parameters (separate from AMP)""" ATTACK = 70 DECAY = 71 SUSTAIN = 72 RELEASE = 73 FREQUENCY = 74 ENV_DEPTH = 77 class AmpCC: """AMP envelope CC parameters (separate from Filter)""" ATTACK = 79 HOLD = 80 # Unique to AMP envelope DECAY = 81 SUSTAIN = 82 RELEASE = 83 VOLUME = 89 PAN = 90 class FXCC: """Effects send CC parameters""" CHORUS_SEND = 12 DELAY_SEND = 84 REVERB_SEND = 85 OVERDRIVE = 57 # ============================================================================ # NRPN CONSTANTS # ============================================================================ # NRPN MSB Categories class NRPN_MSB: TRACK_TRIG_SOURCE_FILTER_AMP = 1 FX = 2 TRIG_NOTE_VEL_LEN = 3 # Track Parameters (MSB 1) class TrackParams: MSB = 1 LEVEL = 100 GLOBAL_MUTE = 101 SOLO = 102 PATTERN_MUTE = 104 # Trig Parameters (MSB 3 for note/velocity/length) class TrigParams: MSB = 3 NOTE = 0 VELOCITY = 1 LENGTH = 2 # Source Parameters (MSB 1, LSB 0-7) class SourceParams: MSB = 1 TUNE = 0 FINE_TUNE = 1 SAMPLE_SLOT = 2 SAMPLE_START = 3 SAMPLE_LENGTH = 4 SAMPLE_LOOP = 5 SAMPLE_VOLUME = 6 SAMPLE_LEVEL = 7 # Filter Parameters (MSB 1, LSB 16-23) class FilterParams: MSB = 1 ATTACK = 16 DECAY = 17 SUSTAIN = 18 RELEASE = 19 FREQUENCY = 20 RESONANCE = 21 TYPE = 22 ENVELOPE_DEPTH = 23 # Amp Parameters (MSB 1, LSB 30-39) class AmpParams: MSB = 1 ATTACK = 30 HOLD = 31 DECAY = 32 SUSTAIN = 33 RELEASE = 34 CHORUS_SEND = 35 DELAY_SEND = 36 REVERB_SEND = 37 PAN = 38 VOLUME = 39 MODE = 40 ENV_RESET = 41 # LFO 1 Parameters (MSB 1, LSB 42-49) class LFO1Params: MSB = 1 SPEED = 42 MULTIPLIER = 43 FADE = 44 DESTINATION = 45 WAVEFORM = 46 START_PHASE = 47 TRIG_MODE = 48 DEPTH = 49 # LFO 2 Parameters (MSB 1, LSB 50-57) class LFO2Params: MSB = 1 SPEED = 50 MULTIPLIER = 51 FADE = 52 DESTINATION = 53 WAVEFORM = 54 START_PHASE = 55 TRIG_MODE = 56 DEPTH = 57 # LFO 3 Parameters (MSB 1, LSB 58-65 + 70-72) class LFO3Params: MSB = 1 SPEED = 58 MULTIPLIER = 59 FADE = 60 DESTINATION = 61 WAVEFORM = 62 START_PHASE = 70 TRIG_MODE = 71 DEPTH = 72 # Delay FX Parameters (MSB 2, LSB 0-7) class DelayParams: MSB = 2 TIME = 0 PINGPONG = 1 STEREO_WIDTH = 2 FEEDBACK = 3 HPF = 4 LPF = 5 REVERB_SEND = 6 MIX = 7 # Reverb FX Parameters (MSB 2, LSB 8-15) class ReverbParams: MSB = 2 PREDELAY = 8 DECAY = 9 SHELVING_FREQ = 10 SHELVING_GAIN = 11 HPF = 12 LPF = 13 MIX = 15 # Chorus FX Parameters (MSB 2, LSB 41-47) class ChorusParams: MSB = 2 DEPTH = 41 SPEED = 42 HPF = 43 WIDTH = 44 DELAY_SEND = 45 REVERB_SEND = 46 MIX = 47 # Helper dictionary for parameter names NRPN_PARAMS = { (1, 100): "Track Level", (1, 101): "Global Mute", (1, 102): "Solo", (1, 104): "Pattern Mute", (3, 0): "Trig Note", (3, 1): "Trig Velocity", (3, 2): "Trig Length", (1, 0): "Source Tune", (1, 1): "Source Fine Tune", (1, 2): "Sample Slot", (1, 3): "Sample Start", (1, 4): "Sample Length", (1, 5): "Sample Loop", (1, 6): "Sample Volume", (1, 7): "Sample Level", (1, 16): "Filter Attack", (1, 17): "Filter Decay", (1, 18): "Filter Sustain", (1, 19): "Filter Release", (1, 20): "Filter Frequency", (1, 21): "Filter Resonance", (1, 22): "Filter Type", (1, 23): "Filter Envelope Depth", (1, 30): "Amp Attack", (1, 31): "Amp Hold", (1, 32): "Amp Decay", (1, 33): "Amp Sustain", (1, 34): "Amp Release", (1, 35): "Chorus Send", (1, 36): "Delay Send", (1, 37): "Reverb Send", (1, 38): "Pan", (1, 39): "Volume", (1, 40): "Amp Mode", (1, 41): "Amp Env Reset", (1, 42): "LFO1 Speed", (1, 43): "LFO1 Multiplier", (1, 44): "LFO1 Fade", (1, 45): "LFO1 Destination", (1, 46): "LFO1 Waveform", (1, 47): "LFO1 Start Phase", (1, 48): "LFO1 Trig Mode", (1, 49): "LFO1 Depth", (1, 50): "LFO2 Speed", (1, 51): "LFO2 Multiplier", (1, 52): "LFO2 Fade", (1, 53): "LFO2 Destination", (1, 54): "LFO2 Waveform", (1, 55): "LFO2 Start Phase", (1, 56): "LFO2 Trig Mode", (1, 57): "LFO2 Depth", (1, 58): "LFO3 Speed", (1, 59): "LFO3 Multiplier", (1, 60): "LFO3 Fade", (1, 61): "LFO3 Destination", (1, 62): "LFO3 Waveform", (1, 70): "LFO3 Start Phase", (1, 71): "LFO3 Trig Mode", (1, 72): "LFO3 Depth", (2, 0): "Delay Time", (2, 1): "Delay Pingpong", (2, 2): "Delay Stereo Width", (2, 3): "Delay Feedback", (2, 4): "Delay HPF", (2, 5): "Delay LPF", (2, 6): "Delay Reverb Send", (2, 7): "Delay Mix", (2, 8): "Reverb Predelay", (2, 9): "Reverb Decay", (2, 10): "Reverb Shelving Freq", (2, 11): "Reverb Shelving Gain", (2, 12): "Reverb HPF", (2, 13): "Reverb LPF", (2, 15): "Reverb Mix", (2, 41): "Chorus Depth", (2, 42): "Chorus Speed", (2, 43): "Chorus HPF", (2, 44): "Chorus Width", (2, 45): "Chorus Delay Send", (2, 46): "Chorus Reverb Send", (2, 47): "Chorus Mix", } def get_param_name(msb: int, lsb: int) -> str: """Get the human-readable name for an NRPN parameter""" return NRPN_PARAMS.get((msb, lsb), f"Unknown NRPN {msb}:{lsb}")

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/feamster/digitakt-midi-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server