名称: flstudio-scripting
描述: FL Studio Python 脚本开发指南,涵盖 MIDI 控制器开发、钢琴卷帘操作、Edison 音频编辑、工作流自动化以及使用 PyFLP 解析 FLP 文件。适用于程序化配置、设备定制、MIDI 传输、宏操作和工程文件处理。覆盖 14 个 MIDI 脚本模块的 427+ 个 API 函数,以及钢琴卷帘、Edison 和 PyFLP 相关功能。
FL Studio Python API 完整参考:MIDI 控制器脚本(14 个模块,427+ 个函数)、钢琴卷帘音符操作、Edison 音频编辑以及使用 PyFLP 解析 FLP 文件。
import general
print(f"API 版本: {general.getVersion()}")
将脚本放置在 Shared\Python\User Scripts 文件夹中。
用途: 通过硬件 MIDI 控制器控制 FL Studio,并向设备发送反馈。
运行方式: FL Studio 开启期间持续运行。
可用模块: transport, mixer, channels, arrangement, patterns, playlist, device, ui, general, plugins, screen, launchMapPages, utils, callbacks
入口函数:
def OnInit():
"""脚本启动时调用。"""
pass
def OnDeInit():
"""脚本停止时调用。"""
pass
def OnMidiMsg(msg):
"""接收到 MIDI 消息时调用。"""
pass
def OnControlChange(msg):
"""接收到 CC 控制变更消息时调用。"""
pass
def OnNoteOn(msg):
"""接收到音符开启消息时调用。"""
pass
def OnRefresh(flags):
"""FL Studio 状态变更时调用。"""
pass
用途: 在钢琴卷帘编辑器中操作音符和标记。
运行方式: 用户通过脚本菜单调用时执行一次。
可用模块: flpianoroll, enveditor
import flpianoroll
score = flpianoroll.score
for note in score.notes:
note.velocity = 0.8 # 将所有音符力度设置为 80%
用途: 在 Edison 中编辑和处理音频样本。
运行方式: 在 Edison 上下文中执行一次。
可用模块: enveditor
根据你的控制需求,导航到相应的参考文件。
仅在需要特定 API 签名时阅读这些文件。
| 模块 | 函数数量 | 控制对象 | 参考文件 |
|---|---|---|---|
| transport | 20 | 播放、停止、录音、位置、速度、循环 | api-transport.md |
| mixer | 69 | 轨道音量/声像/静音/独奏、EQ、路由、效果器 | api-mixer.md |
| channels | 48 | 通道机架、网格位、步进音序器、音符 | api-channels.md |
| 模块 | 函数数量 | 控制对象 | 参考文件 |
|---|---|---|---|
| arrangement + patterns | 9 + 25 | 标记、时间、样式控制、组 | api-arrangement-patterns.md |
| playlist | 41 | 播放列表轨道、现场模式、演奏、区块 | api-playlist.md |
| 模块 | 函数数量 | 控制对象 | 参考文件 |
|---|---|---|---|
| device | 34 | MIDI 输入/输出、系统专用信息、调度、硬件刷新 | api-device.md |
| 模块 | 函数数量 | 控制对象 | 参考文件 |
|---|---|---|---|
| ui + general | 71 + 24 | 窗口、导航、撤销/重做、版本、吸附 | api-ui-general.md |
| 模块 | 函数数量 | 控制对象 | 参考文件 |
|---|---|---|---|
| plugins | 13 | 插件参数、预设、名称、颜色 | api-plugins.md |
| 模块 | 函数数量 | 控制对象 | 参考文件 |
|---|---|---|---|
| screen + launchMapPages | 9 + 12 | AKAI Fire 屏幕、Launchpad 页面管理 | api-screen-launchmap.md |
| 模块 | 函数数量 | 控制对象 | 参考文件 |
|---|---|---|---|
| utils + constants | 21 | 颜色转换、数学运算、音符名称、MIDI 表 | api-utils-constants.md |
| 模块 | 函数数量 | 控制对象 | 参考文件 |
|---|---|---|---|
| callbacks | 26 | 所有回调函数、FlMidiMsg 类、事件流 | api-callbacks.md |
用于钢琴卷帘操作的 Note、Marker、ScriptDialog、score 类,以及 Edison 的 enveditor 工具。
详见 piano-roll-edison.md
无需运行 FL Studio 即可读写 .flp 工程文件的外部库。支持批处理、分析和自动生成。
详见 pyflp.md
# name=我的控制器
# url=https://example.com
import device
import mixer
import transport
def OnInit():
if device.isAssigned():
print(f"已连接: {device.getName()}")
def OnDeInit():
print("脚本已关闭")
def OnControlChange(msg):
if msg.data1 == 7: # 音量 CC
mixer.setTrackVolume(mixer.trackNumber(), msg.data2 / 127.0)
msg.handled = True
def OnNoteOn(msg):
track = msg.data1 % 8
mixer.setActiveTrack(track)
msg.handled = True
def OnRefresh(flags):
pass # 在此处更新硬件显示
def OnInit():
if not device.isAssigned():
print("未链接输出设备!")
return
# 此时可安全使用 device.midiOutMsg() 等函数
def OnControlChange(msg):
if msg.data1 == 7:
mixer.setTrackVolume(0, msg.data2 / 127.0)
msg.handled = True # 防止 FL Studio 也处理此事件
def OnRefresh(flags):
if device.isAssigned():
# 更新音量推子 LED
vol = int(mixer.getTrackVolume(0) * 127)
device.midiOutMsg(0xB0, 0, 7, vol)
完整示例(MIDI 学习、音阶强制、LED 反馈、批量量化、系统专用信息处理、性能监控、自动化引擎、调试):
详见 examples-patterns.md
device.directFeedback() 处理控制器回显device.isAssigned()device.isAssigned() 是否返回 TrueShared\Python\User Scripts 文件夹中flpianoroll.score.notes 访问音符OnIdle() 中进行复杂计算(约每 20ms 调用一次)device.setHasMeters()device.isDoubleClick(index)device.dispatch(ctrlIndex, message)device.midiOutMsg(0x90, 0, note, velocity) 控制音符开启 LEDOn* 回调ui 模块有限访问;不支持完整的 UI 自动化device.getName() 识别设备,并按端口处理