Digitakt MIDI MCP服务器
用于通过MIDI控制Elektron Digitakt II的MCP(模型上下文协议)服务器。
项目结构
digitakt-midi-mcp/
├── server.py # Main MCP server
├── nrpn_constants.py # MIDI CC and NRPN mappings
├── tests/ # Test scripts
│ ├── test_midi.py
│ ├── test_track_triggers.py
│ ├── test_transport.py
│ ├── test_pattern_tools.py
│ ├── test_save_melody.py
│ ├── test_tracks_and_melody.py
│ └── verify_cc_mappings.py
└── analysis/ # Research and analysis tools
└── analyze_sysex.py特性
- 发送MIDI音符:触发特定曲目上的鼓声
- 控制参数:通过CC消息调整过滤器、信封和其他参数
- 程序更改:在图案之间切换
- 注释序列:以编程方式发送节奏模式
- NRPN支持:先进的参数控制,包括每个触发音符、速度和长度
- 传输控制:启动/停止/继续序列器播放并跳到位置
- SysEx支持:发送原始SysEx消息以进行高级控制和模式编程
安装
- 创建并激活虚拟环境:
python3 -m venv venv
source venv/bin/activate- 安装依赖项:
pip install -r requirements.txt- 确保您的Digitakt II通过USB与天桥连接
- 为多轨触发配置Digitakt MIDI设置:
MCP服务器在每首MIDI通道上发送曲目触发器(通道1上的曲目1,通道2上的曲目2等)。要启用多个轨道的同时触发,您必须配置Digitakt:
设置→ MIDI配置→ 频道:
- 选项A:每条轨道信道(建议用于MCP)
- 将每个曲目设置为相应的MIDI通道: - 轨道1:通道1 - 轨道2:频道2 - ... - 曲目16:频道16 - 这允许MCP服务器同时触发多个轨道
- 选项B:自动频道(简单但有限)
- 将所有曲目设置为“自动频道”(默认) - 只有当前选定的曲目会响应触发器 - 您不能从MCP服务器同时触发多个轨道
要在Digitakt上设置每首曲目的频道:
- 按 \[FUNC\]+\[设置\]
- 引导到 MIDI → 配置 → 频道
- 对于每个曲目(TRK 1-16),设置MIDI IN通道以匹配曲目号
- 保存设置
用法
手动运行服务器
source venv/bin/activate
python server.py使用Claude Desktop进行配置
将此添加到您的Claude Desktop配置中(~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"digitakt-midi": {
"command": "/Users/feamster/src/digitakt-midi-mcp/venv/bin/python",
"args": ["/Users/feamster/src/digitakt-midi-mcp/server.py"]
}
}
}然后重新启动Claude Desktop。
可用工具
send_note
发送MIDI音符以触发Digitakt上的鼓声。
参数:
note(必填):MIDI音符编号(0-127)。注释0-7触发轨迹1-8。Notes 12-84以彩色方式播放主动曲目。velocity(可选):注意速度(1-127),默认值为100duration(可选):按住钞票的时间(秒),默认值为0.1channel(可选):MIDI通道(1-16),默认1
示例:
Play note 0 to trigger track 1
Play note 60 on the active tracktrigger_track
在特定的Digitakt II轨道上触发单次采样(方便包装)。
参数:
track(必填):曲目编号(1-16)velocity(可选):注意速度(1-127),默认值为100duration(可选):按住钞票的时间(秒),默认值为0.1channel(可选):MIDI通道(1-16),默认1
示例:
Trigger track 1 (kick)
Trigger track 9 with velocity 127
Trigger track 16send_cc
发送控制更改消息以调整Digitakt参数。
参数:
cc_number(必填):CC编号(0-127)value(必填):CC值(0-127)channel(可选):MIDI通道(1-16),默认1
Digitakt II的通用CC编号:
- 轨道:
- 94:静音 - 95:轨道水平
- 来源:
- 16:调音 - 23:样本级别
- 过滤器封套:
- 70:攻击时间 - 71:衰变时间 - 72:维持水平 - 73:发布时间 - 74:滤波器频率 - 77:包络深度
- AMP信封:
- 79:攻击时间 - 80:保持时间 - 81:腐烂时间 - 82:维持水平 - 83:发布时间 - 89:体积 - 90:潘
- FX:
- 84:延迟发送 - 85:混响发送 - 12:合唱发送 - 57:超速行驶
注: Filter和AMP具有不同CC编号的单独信封。一些参数,如LFO速度和深度,具有高分辨率,并使用CC MSB和LSB。
例子:
Set filter frequency to maximum on track 1send_program_change
在Digitakt上切换到不同的模式。
参数:
program(必填):图案编号(0-127)channel(可选):MIDI通道(1-16),默认1
例子:
Switch to pattern 5send_note_sequence
发送一系列带有定时的笔记。
参数:
notes(必填):\[注、速度、持续时间\]三元组数组delay(可选):音符之间的时间(秒),默认值为0.25channel(可选):MIDI通道(1-16),默认1
例子:
Play a simple 4-on-the-floor kick patternsend_nrpn
发送NRPN(非注册参数号)消息以进行高级参数控制。
参数:
msb(必填):NRPN MSB(1=轨道/触发/源/滤波器/放大器,2=FX,3=触发注释/速度/长度)lsb(必填):NRPN LSB(参数编号)value(必填):参数值(0-127)channel(可选):MIDI通道(1-16),默认1
例子:
Set filter frequency using NRPN常见NRPN:
- MSB=3,LSB=0:三角音符
- MSB=3,LSB=1:三角速度
- MSB=3,LSB=2:三角函数长度
- MSB=1,LSB=20:滤波器频率
- MSB=1,LSB=21:滤波器谐振
set_trig_note
设置触发注释的便利工具(步骤)。
参数:
note(必填):MIDI音符编号(0-127)channel(可选):MIDI通道(1-16),默认1
例子:
Set the current trig to C3 (note 60)set_trig_velocity
设置触发(步进)速度的便利工具。
参数:
velocity(必填):速度(0-127)channel(可选):MIDI通道(1-16),默认1
set_trig_length
方便工具,用于设置三角(步长)的长度。
参数:
length(必填):备注长度(0-127)channel(可选):MIDI通道(1-16),默认1
send_midi_start
发送MIDI启动消息,从头开始启动Digitakt的定序器。
参数: 无
例子:
Start the Digitakt sequencer重要提示: Digitakt需要MIDI时钟在外部控制时才能实际播放。使用 play_with_clock 而是为了可靠的播放,或者确保你单独发送时钟脉冲。需要在MIDI同步设置中启用TRANSPORT RECEIVE和CLOCK RECEIVE。
send_midi_stop
发送MIDI停止消息以停止Digitakt的音序器。
参数: 无
例子:
Stop the Digitakt sequencersend_midi_concontinue
发送MIDI继续消息,使Digitakt的音序器从当前位置恢复。
参数: 无
例子:
Resume the Digitakt sequencersend_song_position
发送MIDI歌曲位置指针以跳转到序列中的特定位置。
参数:
position(必填):MIDI节拍中的歌曲位置(第16个音符)。0=开始,16=4/4时间内1巴。
示例:
Jump to the beginning (position 0)
Jump to bar 2 (position 32)
Jump to the 3rd 16th note (position 2)play_with_clock
启动Digitakt定序器,并在指定的持续时间内发送MIDI时钟。这是远程控制Digitakt播放的推荐方式。
参数:
bars(可选):4/4时间内要玩的酒吧数量。默认值为4 bar。bpm(可选):节奏(节拍/分钟)。默认值为120 BPM。send_stop(可选):持续时间结束后发送MIDI停止。默认值为true。
示例:
Play for 4 bars at 120 BPM
Play for 8 bars at 140 BPM
Play for 2 bars and keep running (send_stop=false)使用案例: 此工具发送MIDI开始+时钟脉冲+停止,Digitakt在外部控制时需要实际播放。您可以使用此功能播放Digitakt的音序器,同时发送音符或CC消息。
play_pattern_with_tracks
启动Digitakt模式,并在特定时间触发特定轨迹。将MIDI传输控制与精确的曲目触发相结合。
参数:
bars(可选):4/4时间内要玩的酒吧数量。默认值为4 bar。bpm(可选):节奏(节拍/分钟)。默认值为120 BPM。triggers(必填):数组[beat, track, velocity]其中节拍是从0开始的四分之一音符(0=开始,1=节拍2,以此类推),轨道是1-16,速度是1-127。send_stop(可选):持续时间结束后发送MIDI停止。默认值为true。
示例:
Play 4 bars with kick on every beat
triggers: [[0, 1, 100], [1, 1, 100], [2, 1, 100], [3, 1, 100]]
Play 2 bars with kick and snare pattern
triggers: [[0, 1, 100], [1, 2, 80], [2, 1, 100], [3, 2, 80]]使用案例: 非常适合在Digitakt的图案上叠加额外的鼓声。在播放模式时,您可以在精确的时间触发特定的轨迹。
play_pattern_with_mlody
启动Digitakt模式,在活动曲目上播放旋律序列。将MIDI传输控制与旋律音符序列相结合。
参数:
bars(可选):4/4时间内要玩的酒吧数量。默认值为4 bar。bpm(可选):节奏(节拍/分钟)。默认值为120 BPM。notes(必填):数组[beat, note, velocity, duration]其中节拍是从0开始的四分之一音符,音符是MIDI音符12-127,速度是1-127,持续时间是秒。channel(可选):MIDI通道(1-16)。默认值为1(自动通道)。send_stop(可选):持续时间结束后发送MIDI停止。默认值为true。
示例:
Play a C major scale over 2 bars
notes: [[0, 60, 100, 0.2], [1, 62, 100, 0.2], [2, 64, 100, 0.2], [3, 65, 100, 0.2],
[4, 67, 100, 0.2], [5, 69, 100, 0.2], [6, 71, 100, 0.2], [7, 72, 100, 0.4]]
Play a simple melody
notes: [[0, 60, 100, 0.3], [1.5, 64, 100, 0.3], [3, 67, 100, 0.5]]使用案例: 在Digitakt模式之上添加旋律元素或低音线。图案运行时,活动曲目将以彩色播放。
play_pattern_with_loop
启动Digitakt模式,并在循环中连续触发音符。将MIDI传输控制与循环音符模式相结合。
参数:
bars(可选):4/4时间内要玩的酒吧数量。默认值为4 bar。bpm(可选):节奏(节拍/分钟)。默认值为120 BPM。loop_notes(必填):数组[beat_offset, note_or_track, velocity]其中beat_offset相对于循环开始(1小节循环为0-3.99),音符/曲目可以是0-15的曲目或12+的旋律,速度为1-127。loop_length(可选):以条为单位的循环长度(4/4时间)。默认值为1 bar。channel(可选):MIDI通道(1-16)。默认值为1(自动通道)。send_stop(可选):持续时间结束后发送MIDI停止。默认值为true。
示例:
Play a 1-bar hi-hat pattern that loops for 4 bars
loop_notes: [[0, 2, 80], [0.5, 2, 60], [1, 2, 80], [1.5, 2, 60],
[2, 2, 80], [2.5, 2, 60], [3, 2, 80], [3.5, 2, 60]]
loop_length: 1
bars: 4
Play a 2-bar melodic ostinato
loop_notes: [[0, 60, 100], [1, 64, 100], [2, 67, 100], [3, 64, 100],
[4, 60, 100], [5, 67, 100], [6, 64, 100], [7, 60, 100]]
loop_length: 2
bars: 8使用案例: 创建重复的节奏或旋律模式,在Digitakt模式运行时连续播放。非常适合高帽、打击乐圈或低音提琴。
play_pattern_with_tracks_and_mlody
启动Digitakt模式,同时播放两个曲目触发器和旋律音符。在单个MIDI时钟会话中组合所有功能。
参数:
bars(可选):4/4时间内要玩的酒吧数量。默认值为4 bar。bpm(可选):节奏(节拍/分钟)。默认值为120 BPM。track_triggers(可选):数组[beat, track, velocity]或[beat, track, velocity, note]其中节拍是从0开始的四分之一音符,音轨是1-16,速度是1-127,可选音符是MIDI音符0-127 彩色触发 (如果省略,则使用轨道号进行标准触发)。默认值为空数组。melody_notes(可选):数组[beat, note, velocity, duration]其中节拍是从0开始的四分之一音符,音符是MIDI音符12-127,速度是1-127,持续时间是秒。默认值为空数组。channel(可选):用于旋律音符的MIDI通道(1-16)。跟踪触发器始终使用通道1。默认值为1。midi_start_at_beat(可选):节拍数字(从0开始)发送MIDI开始并开始MIDI时钟。在此节拍之前,只发送音符触发器(没有传输控制)。当开始中间序列(节拍>0)时,在MIDI开始之前会发送一条MIDI歌曲位置指针消息,以确保Digitakt定序器与正确的节拍位置对齐。默认值为0(立即发送MIDI Start)。 将其用于工作流中的计数 在您想要在计数过程中进行录音的地方,然后在特定节拍启动Digitakt测序仪。preroll_bars(可选):延迟旋律音符的小节数(不是曲目触发器)。曲目在预滚时立即触发播放,旋律音符在预滚后开始。 用于实时录制:将preroll_bars设置为您的循环长度(例如,4个小节的循环为4),让鼓在预滚过程中播放,同时您进行录音,然后旋律音符到达并完美录制。默认值为0(无预滚)。send_stop(可选):持续时间结束后发送MIDI停止。默认值为true。
示例:
1-bar count-in on track 15, then 4-bar melody (immediate start):
bars: 5
track_triggers: [[0, 15, 100], [1, 15, 100], [2, 15, 100], [3, 15, 100]]
melody_notes: [[4, 62, 85, 0.5], [5, 65, 80, 0.5], [6, 69, 85, 0.5], [7, 71, 80, 0.5], ...]
4-bar count-in, THEN start transport (live recording workflow):
bars: 12
midi_start_at_beat: 16 # MIDI Start at beat 16 (bar 5)
track_triggers: [[0,15,100], [1,15,100], ... [15,15,100]] # 16 clicks (4 bars)
melody_notes: [[16, 62, 85, 0.5], [17, 65, 80, 0.5], ...] # Melody starts at beat 16
# Workflow: User hears count-in → arms recording → Song Position Pointer + MIDI Start sent → melody recorded in sync
4-bar loop with preroll for live recording (BEST FOR LIVE RECORDING):
bars: 8 # 4 bars preroll + 4 bars melody
preroll_bars: 4
track_triggers: [[0,1,105], [2,2,95], [4,1,105], [6,2,95], ...] # Drums loop entire 8 bars
melody_notes: [[0, 60, 85, 0.5], [1, 64, 80, 0.5], ...] # Melody scheduled for beats 0-15, but will play at 16-31 due to preroll
# Workflow: Drums start → arm live recording during first 4-bar loop → melody plays second loop → recorded perfectly!
Kick on beats 0, 4, 8, 12 with melody throughout:
track_triggers: [[0, 1, 100], [4, 1, 100], [8, 1, 100], [12, 1, 100]]
melody_notes: [[0, 60, 85, 0.3], [1, 64, 80, 0.3], [2, 67, 85, 0.3], ...]
Both track triggers and melody overlapping:
track_triggers: [[0, 3, 80], [1, 3, 60], [2, 3, 80], [3, 3, 60]] # hi-hat pattern
melody_notes: [[0, 48, 100, 0.5], [2, 52, 90, 0.5], [3.5, 55, 85, 0.3]] # bassline
Chromatic triggering - play Track 13 sample at different pitches:
track_triggers: [
[0, 13, 100, 60], # Track 13 at C4
[1, 13, 90, 64], # Track 13 at E4
[2, 13, 95, 67], # Track 13 at G4
[3, 13, 85, 72] # Track 13 at C5
]
# Note: Track 13 must have chromatic mode enabled on the Digitakt使用案例: 非常适合您在录制一首曲目的同时在另一首曲目上录制旋律的录音会话。也非常适合将鼓声与旋律部分结合起来,或通过精确的时间控制创建复杂的分层序列。
主要特点: 曲目触发器和旋律音符都安排在相同的基于节拍的时间线上,因此它们可以重叠、交错,并以完美的时机同时播放。
重要提示: 曲目触发器在每个曲目的MIDI通道上发送(曲目1→ 频道1,轨道2→ 频道2等)。要同时触发多个曲目,请将Digitakt的MIDI设置配置为使用每个曲目的通道,而不是“自动通道”(有关设置说明,请参阅安装部分)。
play_pattern_with_multi_channel_midi
在多个通道上同时播放带有MIDI音符的图案。将鼓声发送到Digitakt曲目,同时将MIDI音符发送到不同通道上的多个外部乐器,所有这些乐器都同步在一起。
参数:
bars(可选):4/4时间内要玩的酒吧数量。默认值为4 bar。bpm(可选):节奏(节拍/分钟)。默认值为120 BPM。track_triggers(可选):数组[beat, track, velocity]或[beat, track, velocity, note]对于节拍为0的四分之一音符的Digitakt鼓曲目,曲目为1-16,速度为1-127,可选音符为MIDI音符0-127 彩色触发 (如果省略,则使用轨道号进行标准触发)。默认值为空数组。midi_channels(可选):将MIDI通道号(1-16)映射到数组的字典[beat, note, velocity, duration]每个通道可以有独立的音符序列。默认为空对象{}.send_clock(可选):发送MIDI时钟消息以进行传输同步。默认值为true。midi_start_at_beat(可选):节拍数字(从0开始)发送MIDI开始并开始MIDI时钟。当开始中间序列(节拍>0)时,MIDI歌曲位置指针消息会在MIDI开始之前发送。默认值为0(立即启动)。preroll_bars(可选):延迟MIDI通道音符的小节数(不是曲目触发器)。曲目在预滚期间立即触发播放,MIDI音符在预滚后开始播放。 用于实时录制:将preroll_bars设置为您的循环长度,让鼓在预滚过程中播放,同时您进行录音,然后MIDI音符到达并完美录制。默认值为0(无预滚)。send_stop(可选):持续时间结束后发送MIDI停止。默认值为true。
示例:
Drums on Digitakt + chords on channel 9 + pad melody on channel 12:
bars: 8
bpm: 82
track_triggers: [[0, 1, 105], [2, 2, 95], [4, 1, 105], [6, 2, 95]] # Digitakt drums
midi_channels: {
"9": [[0, 54, 75, 3.9], [0.01, 57, 75, 3.9], [0.02, 61, 75, 3.9]], # Chord on channel 9
"12": [[0, 69, 70, 1.9], [2, 73, 65, 1.9], [4, 76, 70, 1.9]] # Pad melody on channel 12
}
Multi-synth orchestration with count-in:
bars: 12
bpm: 120
midi_start_at_beat: 16 # 4-bar count-in
track_triggers: [[0,15,100], [1,15,100], ... [15,15,100]] # Count-in clicks
midi_channels: {
"1": [[16, 48, 100, 0.5], [18, 52, 95, 0.5]], # Bass on channel 1
"2": [[16, 60, 85, 2.0], [20, 64, 85, 2.0]], # Chords on channel 2
"3": [[17, 72, 70, 0.3], [17.5, 74, 65, 0.3]] # Lead on channel 3
}使用案例: 非常适合混合设置,您可以在不同的MIDI通道上使用Digitakt作为鼓,同时控制多个外部合成器(硬件或软件)。所有乐器都与MIDI时钟保持完美同步,您可以在工作流程中使用延迟启动进行计数。
主要特点: 每个MIDI通道都可以有完全独立的音符序列,允许您从单个函数调用中编排多个乐器。所有事件都是精确计时和同步的。
保存_最后_日志
保存上次播放的旋律 play_pattern_with_melody 转换为标准MIDI文件。非常适合捕捉您喜欢的生成旋律。
参数:
filename(必填):MIDI文件的文件名(例如“my_melody.mid”)。将保存在当前目录中。
示例:
Save the last melody to a file
filename: "cool_melody.mid"
Save with a descriptive name
filename: "bassline_120bpm.mid"使用案例: 使用后 play_pattern_with_melody 要生成或播放旋律,您可以将其保存到MIDI文件中,以便在DAW、其他硬件中使用或存档。MIDI文件包括原始节奏和计时。
注: 这只有在您使用后才有效 play_pattern_with_melody 至少一次。旋律与上次播放时的精确BPM、音符、速度和持续时间一起保存。
保存_最后模式
保存上次播放的模式 play_pattern_with_multi_channel_midi 转换为标准MIDI文件。捕捉所有鼓和MIDI通道音符的完整多轨模式。
参数:
filename(必填):MIDI文件的文件名(例如“my_pattern.mid”)。如果不存在,将添加.mid扩展名。
输出位置: 文件保存到 /mnt/user-data/outputs/
示例:
Save the last pattern after playing it
filename: "lofi_beat_v1.mid"
# Saves to: /mnt/user-data/outputs/lofi_beat_v1.mid
Save with descriptive name
filename: "drums_and_chords_85bpm" # .mid will be added automatically
# Saves to: /mnt/user-data/outputs/drums_and_chords_85bpm.mid使用案例: 使用后 play_pattern_with_multi_channel_midi 要使用鼓和多个MIDI通道播放复杂的模式,请将其保存为多轨MIDI文件。非常适合:
- 捕捉您创建并希望保留的模式
- 导入DAW以进行进一步编辑
- 与合作者分享模式
- 归档您的工作
保存的内容:
- 各自MIDI通道上的所有曲目触发器(Digitakt曲目1-16)
- 指定通道上的所有MIDI通道音符(外部合成器)
- 速度和时间信息
- 多轨MIDI文件格式(类型1)
- 正确的曲目名称,便于在DAW中识别
注: 这只有在您使用后才有效 play_pattern_with_multi_channel_midi 至少一次。该模式与上次播放时的精确BPM、条形图、曲目触发器和MIDI通道数据一起保存。
export_pattern_to_midi
将完整的Digitakt模式导出到标准MIDI文件(.mid)。创建一个多轨MIDI文件,其中鼓在通道1上,旋律在指定通道上。支持彩色轨迹触发器。
参数:
filename(必填):输出文件名(如果不存在,将添加.mid扩展名)bpm(可选):节奏(节拍/分钟)。默认值为120 BPM。bars(可选):总长度(4/4倍)。默认值为4 bar。track_triggers(可选):数组[beat, track, velocity]或[beat, track, velocity, note]用于滚筒/样品触发器melody_notes(可选):数组[beat, note, velocity, duration]用于旋律音符melody_channel(可选):用于旋律音符的MIDI通道(1-16)。默认值为1。
示例:
Export a 4-bar drum pattern:
export_pattern_to_midi(
filename="drums.mid",
bars=4,
bpm=120,
track_triggers=[[0, 1, 100], [2, 2, 95], [4, 1, 100], [6, 2, 95]]
)
Export drums + melody:
export_pattern_to_midi(
filename="full_pattern.mid",
bars=8,
bpm=140,
track_triggers=[[0, 1, 105], [2, 2, 95], [4, 1, 105], [6, 2, 95]],
melody_notes=[[0, 60, 85, 0.5], [1, 64, 80, 0.5], [2, 67, 85, 0.5]],
melody_channel=2
)
Export chromatic pad pattern:
export_pattern_to_midi(
filename="pad.mid",
bars=4,
track_triggers=[
[0, 13, 100, 60], # Track 13 at C4
[4, 13, 95, 64], # Track 13 at E4
[8, 13, 100, 67], # Track 13 at G4
[12, 13, 90, 72] # Track 13 at C5
]
)使用案例: 导出模式以在DAW中使用,与合作者共享,存档您的工作,或导入其他硬件测序仪。不像 save_melody_to_midi,此函数允许您直接指定模式数据,而无需先播放。
send_sysex
向Digitakt发送系统专用(SysEx)消息,以进行高级控制和模式编程。
参数:
data(可选):作为SysEx数据发送的字节数组(0-127)。F0和F7字节是自动添加的。hex_string(可选):替代data-以十六进制字符串形式提供SysEx(例如“00203C…”)
Elektron制造商ID: 0x00 0x20 0x3C
例子:
Send a custom SysEx message to the Digitakt注: Elektron没有公开记录Digitakt模式编程的确切SysEx格式。你可以:
- 使用此工具发送您捕获或反向工程的原始SysEx数据
- 从Elektron Transfer软件捕获SysEx转储
- 通过分析保存的.syx文件来尝试该格式
request_sysex_dump
从Digitakt请求SysEx数据转储(模式、声音、套件或项目)。
参数:
dump_type(必填):转储类型-“模式”、“声音”、“套件”或“项目”bank(可选):银行编号(0-15)pattern_number(可选):银行内的图案编号(0-15)
例子:
Request a pattern dump from bank 0, pattern 0重要提示: 这将发送最佳猜测转储请求格式。确切的协议没有公开记录。您可能需要:
- 使用MIDI监控软件监控SysEx响应
- 使用Elektron Transfer进行官方转储
- 根据实验调整命令字节
参数自动化框架
Digitakt MIDI MCP服务器包括一个强大的参数自动化框架,允许您通过实时自动化任何参数来创建动态、不断发展的声音。这包括滤波器扫描、包络整形、LFO调制等。
重要提示: 参数自动化通过MIDI实时发送,不保存为Digitakt模式。它非常适合现场表演、录音到音频或DAW集成。
预设存储位置
所有自动化预设都存储在: ~/.mcp-config/digitakt/presets/
服务器启动时会自动创建此目录。
可用参数
使用 list_parameters 工具查看按类别组织的所有可用参数:
- 过滤器:截止、共振、类型、包络(ADSR+深度)
- 安培:体积、盘、信封(ADSHR)、模式
- 来源/样本:曲调、音高、采样开始/长度/循环、采样级别
- LFO 1/2/3:速度、倍数、衰减、目的地、波形、起始相位、触发模式、深度
- 外汇发送:合唱、延迟、混响、超速
- 延迟/混响/合唱FX:每种效果的详细参数
- 轨道:级别,静音
- 三角学:注释、速度、长度
set_parameter
立即将任何参数设置为特定值。使用此选项可在不扫掠或封套的情况下立即更改参数。
参数:
parameter(必填):参数名称(例如,“filter_cutoff”、“lfo1_depth”、“amp_volume”)value(必填):参数值(0-127)channel(可选):MIDI通道(1-16),默认1
⚠️ 重要提示-通道路由: 在Digitakt II上,每个曲目(1-16)都有自己的MIDI通道(1-18)。要控制特定轨道上的参数,您必须设置通道参数以匹配轨道号:
- 轨道1参数→ 频道1
- 轨道12参数→ 频道12
- 等等
默认通道为1,仅影响轨迹1。
示例:
Set LFO1 depth to maximum on Track 13
set_parameter(parameter="lfo1_depth", value=127, channel=13)
Set filter cutoff to middle position on Track 5
set_parameter(parameter="filter_cutoff", value=64, channel=5)
Set LFO1 destination on Track 12
set_parameter(parameter="lfo1_destination", value=20, channel=12)
Mute Track 8
set_parameter(parameter="track_mute", value=1, channel=8)send_parameter_sweep
在指定的持续时间内,将任何参数从一个值平滑地扫到另一个值。非常适合滤波器扫频、俯仰弯曲、LFO深度衰减等。
参数:
parameter(必需):参数名称(例如,“filter_cutoff”、“lfo1_depth”、“sample_start”)start_value(必填):起始值(0-127)end_value(必填):结束值(0-127)duration_sec(必填):持续时间(秒)curve(可选):“线性”、“指数”或“对数”,默认为“线性”steps(可选):要发送的消息数(更多=更平滑),默认值为50channel(可选):MIDI通道(1-16),默认1
⚠️ 重要提示-通道路由: 在Digitakt II上,每个曲目(1-16)都有自己的MIDI通道(1-18)。要控制特定轨道上的参数,您必须设置通道参数以匹配轨道号:
- 轨道1参数→ 频道1
- 轨道12参数→ 频道12
- 等等
默认通道为1,仅影响轨迹1。
示例:
Sweep filter cutoff on Track 1 from closed to open over 4 seconds
send_parameter_sweep(parameter="filter_cutoff", start_value=20, end_value=127, duration_sec=4.0, channel=1)
Exponential LFO depth fade-in on Track 12
send_parameter_sweep(parameter="lfo1_depth", start_value=0, end_value=127, duration_sec=2.0, curve="exponential", channel=12)
Pitch bend down on Track 5
send_parameter_sweep(parameter="pitch", start_value=80, end_value=40, duration_sec=1.5, curve="logarithmic", channel=5)send_parameter_envelople
将ADSR样式封套应用于任何参数。创建具有攻击、衰减、维持和释放阶段的有机参数运动。
参数:
parameter(必填):参数名称attack_sec(必填):攻击时间(达到峰值的时间127)decay_sec(必填):衰减时间(降至维持水平的时间)sustain_level(必填):维持值(0-127)release_sec(必填):释放时间(返回0的时间)steps_per_stage(可选):每个阶段的消息数(更多=更平滑),默认值为20channel(可选):MIDI通道(1-16),默认1
⚠️ 重要提示-通道路由: 在Digitakt II上,每个曲目(1-16)都有自己的MIDI通道(1-18)。要控制特定轨道上的参数,您必须设置通道参数以匹配轨道号:
- 轨道1参数→ 频道1
- 轨道12参数→ 频道12
- 等等
默认通道为1,仅影响轨迹1。
示例:
Filter cutoff envelope on Track 1 (classic filter pluck)
send_parameter_envelope(parameter="filter_cutoff", attack_sec=0.01, decay_sec=0.5, sustain_level=40, release_sec=1.0, channel=1)
LFO depth swell on Track 8
send_parameter_envelope(parameter="lfo1_depth", attack_sec=2.0, decay_sec=1.0, sustain_level=80, release_sec=2.0, channel=8)
Sample start modulation on Track 3
send_parameter_envelope(parameter="sample_start", attack_sec=0.1, decay_sec=0.3, sustain_level=60, release_sec=0.5, channel=3)播放模式_带参数_自动
在特定节拍下播放具有自动参数更改的模式。这是创建复杂、不断变化的声音的主要工具。支持同时更改多个参数。
参数:
parameter_automation(必需):将参数名称映射到\[beat,value\]对的对象bars(可选):要播放的小节数(4/4次),默认为4bpm(可选):BPM中的速度,默认值为120track_triggers(可选):用于触发轨迹的\[节拍、轨迹、速度\]数组send_clock(可选):发送MIDI开始/时钟,默认为truesend_stop(可选):在持续时间后发送MIDI停止,默认为truechannel(可选):MIDI通道(1-16),默认1
⚠️ 重要提示-通道路由: 在Digitakt II上,每个曲目(1-16)都有自己的MIDI通道(1-18)。要控制特定轨道上的参数,您必须设置通道参数以匹配轨道号。默认通道为1,仅影响轨迹1。
示例:
Multi-parameter filter automation on Track 12
play_pattern_with_parameter_automation(
bars=4,
bpm=128,
channel=12,
parameter_automation={
"filter_cutoff": [[0, 20], [4, 80], [8, 127], [12, 60]],
"filter_resonance": [[0, 40], [8, 100], [16, 40]],
"lfo1_depth": [[0, 0], [8, 127]]
}
)
Envelope shaping over time on Track 5
play_pattern_with_parameter_automation(
bars=8,
bpm=120,
channel=5,
parameter_automation={
"filter_attack": [[0, 60], [16, 10], [32, 60]],
"filter_decay": [[0, 100], [16, 30]],
"amp_release": [[0, 40], [16, 80]]
}
)
LFO modulation build on Track 1 with triggers
play_pattern_with_parameter_automation(
bars=4,
channel=1,
track_triggers=[[0, 1, 100], [4, 1, 100], [8, 1, 100], [12, 1, 100]],
parameter_automation={
"lfo1_speed": [[0, 30], [8, 80], [16, 30]],
"lfo1_depth": [[0, 0], [4, 80], [12, 127]],
"lfo2_destination": [[0, 20], [8, 21]]
}
)save_automationpreset
将参数自动化保存为可重用的JSON预设文件。
参数:
preset_name(必填):预设名称(不带.json扩展名)automation(必填):自动化数据(格式与play_pattern_with_parameter_Automation相同)description(可选):此预设功能的描述
例子:
save_automation_preset(
preset_name="wobble_bass",
description="LFO-modulated filter wobble for bass",
automation={
"bars": 4,
"bpm": 140,
"parameter_automation": {
"filter_cutoff": [[0, 60], [16, 60]],
"lfo1_speed": [[0, 40], [8, 80]],
"lfo1_depth": [[0, 100], [16, 100]]
}
}
)预设值保存到: ~/.mcp-config/digitakt/presets/wobble_bass.json
load_automation_preset
加载并可选择播放已保存的自动化预设。
参数:
preset_name(必填):要加载的预设名称(不带.json扩展名)play(可选):如果为真,立即播放预设,默认为假
示例:
Load preset data
load_automation_preset(preset_name="wobble_bass")
Load and play preset
load_automation_preset(preset_name="wobble_bass", play=true)list_automation_presets
列出所有可用的自动化预设。
例子:
list_automation_presets()输出显示中的所有预设 ~/.mcp-config/digitakt/presets/ 他们的描述。
export_automation_to_midi
将参数自动化导出到可以导入任何DAW的标准MIDI文件。
参数:
filename(必填):输出MIDI文件名(如果不存在,将添加.mid扩展名)automation(必填):自动化数据channel(可选):MIDI通道(1-16),默认1
例子:
export_automation_to_midi(
filename="my_loop",
automation={
"bars": 4,
"bpm": 128,
"parameter_automation": {
"filter_cutoff": [[0, 20], [8, 127]],
"filter_resonance": [[0, 40], [8, 80]]
}
}
)创建 my_loop.mid 可以导入Ableton、Logic、FL Studio等。
列表参数
按类别列出所有可以自动化的可用参数。
参数:
category(可选):按类别名称筛选
示例:
List all parameters
list_parameters()
List only Filter parameters
list_parameters(category="Filter")
List only LFO 1 parameters
list_parameters(category="LFO 1")工作流示例
现场表演:
1. Create several automation presets for different song sections
2. During your set, trigger different presets:
- Verse: load_automation_preset(preset_name="verse_filter", play=true)
- Chorus: load_automation_preset(preset_name="chorus_wobble", play=true)
- Breakdown: load_automation_preset(preset_name="slow_build", play=true)作曲录音循环:
1. Program basic pattern on Digitakt (kicks, snares, etc.)
2. Create automation in Python/Claude:
play_pattern_with_parameter_automation(
bars=4,
bpm=128,
parameter_automation={"filter_cutoff": [[0, 20], [8, 127]]}
)
3. Record audio output from Digitakt while automation runs
4. Import audio loop into DAW
5. Layer guitar over the loop
6. Save automation as preset for future useDAW集成:
1. Create automation in MCP server
2. Export to MIDI file:
export_automation_to_midi(filename="digitakt_automation.mid", automation={...})
3. Import MIDI file into DAW
4. Route MIDI track to Digitakt
5. DAW now controls Digitakt automation on playback资源
midi://ports
列出系统上所有可用的MIDI输入和输出端口。
midi://digitakt/status
显示Digitakt MIDI端口的当前连接状态。
数字MIDI参考
曲目的注释编号
要在特定轨迹上触发一次射击(无论活动轨迹如何):
- 曲目1:MIDI音符 0 (C-2/C0)
- 曲目2:MIDI音符 1 (C#-2/C#0)
- 曲目3:MIDI音符 2 (D-2/D0)
- 曲目4:MIDI音符 3 (D#-2/D#0)
- 曲目5:MIDI音符 4 (E-2/E0)
- 曲目6:MIDI音符 5 (F-2/F0)
- 曲目7:MIDI音符 6 (F#-2/F#0)
- 曲目8:MIDI音符 7 (G-2/G0)
- 曲目9:MIDI音符 8 (G#-2/G#0)
- 曲目10:MIDI音符 9 (A-2/A0)
- 曲目11:MIDI音符 10 (A#-2/A#0)
- 曲目12:MIDI音符 11 (B-2/B0)
- 曲目13:MIDI音符 12 (C-1/C1)
- 曲目14:MIDI音符 13 (C#-1/C#1)
- 曲目15:MIDI音符 14 (D-1/D1)
- 曲目16:MIDI音符 15 (D#-1/D#1)
要以彩色方式播放当前活动曲目,请执行以下操作:
- MIDI音符 12岁及以上 (C1+)将以不同的音高演奏现行曲目
- 注意:这与曲目13-16的触发器重叠,因此如果你想进行彩色播放,请使用高于15的音符
注: MIDI通道1-16可以被分配给轨道1-16,或者使用自动通道来控制当前活动的轨道。
通用CC参数
查看Digitakt II手册(OS 1.03)附录B了解完整的CC图。关键参数:
轨道:
- 94:静音
- 95:轨道水平
来源:
- 16:调音
- 23:样本级别
滤波器包络(与AMP分开):
- 70:攻击时间
- 71:衰变时间
- 72:维持水平
- 73:发布时间
- 74:滤波器频率
- 77:包络深度
AMP信封:
- 79:攻击时间
- 80:保持时间(AMP独有)
- 81:腐烂时间
- 82:维持水平
- 83:发布时间
- 89:体积
- 90:潘
外汇发送:
- 84:延迟发送
- 85:混响发送
- 12:合唱发送
- 57:超速行驶
重要: 过滤器和AMP具有不同CC编号的单独信封。CC 70-73控制滤波器包络,而CC 79-83控制AMP包络。
NRPN参数
NRPN(非注册参数编号)提供比标准CC更多的参数访问。服务器包括一个完整的 nrpn_constants.py 包含所有参数定义的文件。
NRPN结构:
- MSB(CC 99):类别(1、2或3)
- LSB(CC 98):特定参数
- 数据输入MSB(CC 6):值(0-127)
- 数据输入LSB(CC 38):精细值(通常为0)
类别:
- MSB 1:跟踪、源、滤波器、放大器、LFO参数
- MSB 2:FX(延迟和混响)参数
- MSB 3:三角参数(注、速度、长度)
关键触发参数(MSB=3):
- LSB 0:三角音符(每步音高)
- LSB 1:三角速度(每步速度)
- LSB 2:三角长度(每步音符长度)
滤波器参数(MSB=1):
- LSB 16:攻击时间
- LSB 17:衰减时间
- LSB 18:维持水平
- LSB 19:发布时间
- LSB 20:频率
- LSB 23:包络深度
AMP参数(MSB=1):
- LSB 30:攻击时间
- LSB 31:保持时间
- LSB 32:衰减时间
- LSB 33:维持水平
- LSB 34:发布时间
- LSB 36:延迟发送
- LSB 37:混响发送
- LSB 38:平移
- LSB 39:音量
看 nrpn_constants.py 查看完整的参数列表。
测试和开发
运行测试
测试脚本位于 tests/ 目录。所有测试都要求Digitakt II通过USB连接。
# Verify MIDI CC and NRPN mappings
python tests/verify_cc_mappings.py
# Test basic MIDI connectivity
python tests/test_midi.py
# Test track triggering (notes 0-15 for tracks 1-16)
python tests/test_track_triggers.py
# Test transport control (Start/Stop/Continue)
python tests/test_transport.py
# Test pattern + MIDI combination tools
python tests/test_pattern_tools.py
# Test melody export to MIDI file
python tests/test_save_melody.py
# Test combined track triggers and melody
python tests/test_tracks_and_melody.py分析工具
分析工具位于 analysis/ 研究和逆向工程目录。
# Analyze SysEx files from Elektron Transfer
python analysis/analyze_sysex.py 故障排除
未找到MIDI设备:
- 确保Digitakt通过USB连接
- 检查天桥是否正确安装
- 验证设备是否显示在音频MIDI设置(macOS)中
权限错误:
- 在macOS上,您可能需要向Terminal/iTerm授予麦克风权限
- 检查系统首选项>安全和隐私>隐私>麦克风
与SysEx合作
Digitakt支持SysEx进行高级操作,但Elektron尚未发布详细的协议规范。以下是使用SysEx的一些方法:
捕获SysEx数据
- 使用Elektron传输:
- 使用Elektron Transfer将图案/声音保存为.syx文件 - 分析这些文件以了解格式 - 使用 send_sysex 使用捕获的数据
- MIDI监听:
- 使用MIDI监视器(macOS)或MIDI-OX(Windows)等工具 - 从设备中捕获SysEx转储 - 分析字节结构
- 逆向工程:
- 研究社区项目,如Analog Rytm SysEx库 - 发送修改后的SysEx数据的实验 - 记录你的发现
SysEx结构
所有Elektron SysEx消息都遵循以下基本结构:
F0 - SysEx start byte
00 20 3C - Elektron manufacturer ID
[device_id] - Device identifier
[command] - Command byte
[data...] - Message-specific data
F7 - SysEx end byte模式编程技巧
- 首先通过Transfer捕获现有模式
- 比较多个模式以识别字段
- 仔细测试修改,避免损坏设备内存
- 在实验之前,始终备份您的项目
许可证
麻省理工学院
