开发者生态
morning
显示 HN:macOS 中使用 Behringer FCB1010 MIDI 踏板的宏
2026-09-15
1 阅读
约9分钟阅读
fretlessjazz
字号:
使用 MIDI 脚踏控制器作为 Mac 的额外键盘。 fcbnerd 连接到您的 MIDI 源,并在脚踏开关或踏板发送您绑定的消息时运行 shell 命令,或者为每条消息每行打印一个 JSON 对象,以便另一个程序可以决定踩踏的含义。 $ fcbnerd -q --bind ' 1:20:127=open ~/Downloads ' --bind ' pc:1:0=say hello ' 或者将所有内容流式传输给另一个程序来处理: $ fcbnerd {"type":"connected","source":"UM-ONE","time":"2026-09-14T20:01:00.120Z"} {"type":"pc","channel":1,"program":0,"source":"UM-ONE","time":"2026-09-14T20:01:02.345Z"} {"type":"cc","channel":1,"controller":27,"value":84,"source":"UM-ONE","time":"2026-09-14T20:01:03.910Z"} 专为 Behringer FCB1010 打造,但其中没有特定于 FCB1010 的内容:任何 CoreMIDI 源都可以工作。为什么使用命令行工具而不是应用程序在 Mac 上执行的任何操作(例如按键或运行脚本)都需要沙盒应用程序无法获得的权限,而且每个用户都需要不同的操作集。 fcbnerd 只读取 MIDI,不需要任何权限。这些操作属于您的 shell,或者属于已经具有访问权限的工具,例如 Hammerspoon 或 Keyboard Maestro。 brew trust --tap jamesryanatx/tap # Homebrew 7+ 不会加载第三方 Tap,除非您信任它们brew install JamesRyanATX/tap/fcbnerd 或者从没有 Homebrew 的源(Xcode 或 Swift 工具链,macOS 13+): swift build -c release cp .build/release/fcbnerd /usr/local/bin/ fcbnerd [listen] [--source NAME] [--format json|text] [--bind BINDING]... [--quiet] [--shell PATH] fcbnerd list [--format json|text] fcbnerd 模拟监听(默认)连接到每个 MIDI 源,或仅连接到名称包含 --source 的源,并传输事件直到中断。它遵循热插拔:拔下接口中间装置并将其重新插入,并且流通过断开/连接的线路继续进行。 list 打印当前可用的资源。 Simulate 发布了一个名为 fcbnerd Simulator 的虚拟 MIDI 源,它可以循环播放合成按下、踏板扫描和 sysex 消息。在一个终端中运行它,在另一个终端中运行 fcbnerd,以构建一个不连接踏板的消费者。 --format text 打印对齐的列以方便观察,包括您可以绑定的每条消息的 bind= 模式。脚本应使用默认的 JSON;文本布局可能会改变。 --bind 当消息匹配时运行命令;见下文。 --quiet 停止打印事件,只留下绑定的命令。 --shell PATH 选择运行绑定命令的 shell(默认 /bin/sh )。状态消息发送至 stderr;标准输出仅携带事件。每行写入后都会被刷新,因此管道会立即看到事件。首先找出您的踏板发送的内容。运行 fcbnerd -f text 并按下开关: $ fcbnerd -f text 16:30:41.115 pc channel=1 program=7 bind=pc:1:7 [USB MIDI Interface] 16:30:41.115 cc channel=1controller=20 value=127 bind=1:20:127 [USB MIDI Interface] 然后将命令绑定到该模式: fcbnerd --bind ' 1:20:127=open ~/Downloads ' 绑定是 PATTERN=COMMAND 。第一个 = 之后的所有内容都是命令,因此它可以包含 = 和 : 本身。使用 --bind 任意多次。每个与消息匹配的绑定都会按照给定的顺序启动,并且同时运行。模式匹配 CHANNEL:CONTROLLER:VALUE 控制更改,例如1:20:127。抄送:1:20:127 也有效。 pc:CHANNEL:PROGRAM 程序更改,例如电脑:1:7。任何数字都可以是 * : 1:27:* 是通道 1 上控制器 27 的每个值,这就是绑定表情踏板的方式。命令通过 /bin/sh -c 或使用 --shell 提供的 shell 在后台运行。他们的标准输入是 /dev/null 。它们的标准输出进入 fcbnerd 的标准错误,因此它不会破坏事件流;使用 --quiet 它会转到标准输出。他们看到这些环境变量: 变量 MIDI_TYPE cc 或 pc MIDI_CHANNEL 1–16 MIDI_CONTROLLER , MIDI_VALUE 对于 cc MIDI_PROGRAM 对于 pc MIDI_SOURCE MIDI 源名称 # 表情踏板设置输出音量 fcbnerd -q --bind ' 1:27:*=osascript -e "设置音量输出音量 $((MIDI_VALUE * 100 / 127))" ' 每次踩踏都会运行该命令,因此即使第一次运行尚未完成,两次快速按下也会运行两次。这也意味着每个匹配的消息都会启动一个 shell。使 *:*:127 或 pc:*:* 等宽泛模式远离嘈杂的设备。踏板扫掠是个例外。扫描每秒发送数十个值,因此对于具有 * 值的绑定,每个控件(通道和控制器)一次仅运行一个命令副本。当它运行时,fcbnerd 仅保留该控件的最新值并运行下一个,这使 shell 保持倒计时并仍以踏板的最终位置结束。如果命令在 5 秒后仍在运行,fcbnerd 会在 stderr 上如此说明。以非零值退出的命令会将其绑定和退出状态打印到 stderr。停止 fcbnerd(Ctrl+C、kill、关闭终端或关闭的标准输出)会将 SIGTERM 发送到仍在运行的任何命令,包括它启动的进程。交互式 shell 中的函数和别名不会加载到 sh -c 中。在 bash 中,前
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱