跳到正文
Hacker News· androsynth89·· 21 天前精选AI 评分42

Blokkily:支持 MCP 的实验性 pattern-first 数字音频工作站

Show HN: An experimental pattern-first DAW that supports MCP

AI 导读

Blokkily 是一款支持 MCP 的实验性 pattern-first 数字音频工作站,事件模型同步驱动 tracker、钢琴卷和 step grid 三种编辑器。

推荐理由

它把多轨数字音频工作站的会话、混音和插件控制都接进了 MCP,让 AI 智能体可以直接驱动音乐制作。

正文 · AI 翻译

Blokkily 是一款实验性的、模式优先(pattern-first)的数字音频工作站(DAW)。单一事件模型驱动三个同步编辑器——追踪器(tracker)、钢琴卷帘(piano roll)和步进网格(step grid)——它们反过来又构成多轨歌曲中的一条轨道。CLAP 是必需的原生插件格式,而非兼容性附加项。

Blokkily workstation showing an arrangement, synchronized editors, plugin browser, mixer, and keyboard

工作站截图是渲染出的 bdd_session_everything 会话:一首包含渐快节拍(tempo ramp)、7/8 小节、键控(keyed)与切片(sliced)采样器、CLAP、VST3 和 SoundFont 乐器、一段被扭曲(warped)的音频片段、内置及 CLAP/VST3 效果器、一个返回/发送(return/send)总线、增益与效果自动化、预备拍(count-in),以及两条从确定性输入接收 MIDI 的待录(armed)轨道的歌曲。编辑器上方是 LLM 作曲助手的提示栏(prompt bar,详见下文)。

框架无关的音乐模型与实时插件边界层位于这一切之下。模型涵盖音符、语义和弦、转位、扫弦(strum)、微时序(microtiming)、概率、ratchets、循环条件与参数锁(parameter locks)。它还包括一个原生 CLAP 目录(catalog),用于加载 CLAP 模块、初始化其入口点、查询工厂,并记录插件描述符与特性。CLAP 实例适配器实现创建、初始化、激活、样本精确的音符/参数事件、立体声处理以及状态流。基于 JUCE 的 VST3 适配器扫描包文件与默认系统位置,并通过同一实时边界实例化插件,将每个块按参数偏移拆分,使 VST3 自动化也达到样本精度。参数锁由调度器编译为样本精确的参数事件,并由两个插件适配器应用;自动化设置参数的值,而调制对其进行偏移,两者互不抹除。 内部 FluidSynth 适配器加载 SF2/SF3 文件,接受带采样偏移的音符事件,渲染立体声音频,选择预设,并持久化项目状态。FluidSynth 仅在其 64 帧块的起始处启动声音,因此适配器维护一个小型渲染器池,共享音色库的样本数据,并在块起始帧与音符自身帧对齐的渲染器上演奏每个音符:无论模式的样本长度如何,每次通过都相位一致地发声。音色库自身的合唱效果(chorus)运行于其独立时钟,正如自由运行的 LFO。 项目可保存并重新加载整个会话:每个具名模式及其和弦、锁、ratchets、微时序与循环条件,带通道条和片段的轨道,以及每个 CLAP、VST3 与 SoundFont 乐器和效果器的不透明状态。无分配的实时传输将模式刻度(ticks)编译为采样事件,循环模式,驱动任一乐器适配器,并馈入低延迟非交错立体声 RtAudio 回调。

在歌曲播放时进行编辑不会中断播放。一次编辑会重新编译编曲,并在下一个块边界将其交给渲染回调,且不在音频线程上分配内存、不重建图、不重载乐器、不移动播放头;正在发声而被擦除步骤的音符会被释放,而非让其持续鸣响。在任意编辑器中输入的音符都会通过运行中的引擎进行试听,无论传输是停止的还是正在播放的;而一个打开时没有乐器的会话会被赋予机器的通用 MIDI SoundFont——鼓轨道上的打击乐音色库——因此工作站打开的瞬间就会发声。

一个会话(session)是一首歌曲,而非单个 pattern。命名的 pattern 以片段(clip)的形式放置在混音器轨道的时间线上:每条轨道承载各自的乐器和通道条——增益(以分贝为单位)、等功率声相、静音、独奏和峰值电平表——并经由一个主推子汇总。歌曲引擎对每条轨道的整条时间线编译一次,随后渲染,期间不分配、不加锁、不执行 I/O;片段的每次重复都计为其 pattern 的下一轮循环,因而概率和循环条件在整首 arrangement 中保持有效。混音器上的操作直达运行中的引擎,所以歌曲播放时也能拉动推子。同一引擎将 arrangement 导出(bounce)为 16 位、24 位或 32 位浮点 WAVE 文件,与试听结果逐采样一致。

会话中还声明了作品所用的调律(tuning)与音阶。调律以音分为单位——可以是任意周期的等分、有理调律与历史调律,以及 Scala 风格的列表——因此十二个等分半音只是众多调律之一。每个音符承载着为其乐器所设定的十二平均律键位,以及相对于该键位的 retune(重调),和弦的每个声部亦是如此;这正是十九等分或四分之一音 pattern 能以原本写下的音高,而非最近近似音高,传入 CLAP、VST3 和 SoundFont 合成器的方式。共有四种可演奏界面映射同一调律与音阶:钢琴键盘、七种布局的同构网格(六边形与方形,并各自可横向或纵向铺满窗口)、九种弦乐调弦的指板,以及用数字命名每个和声并按转位列叠一排的和弦垫。即便在停止的 transport 上演奏其中任一界面,也会通过当前轨道的乐器进行试听,并把音符写入主 pattern 的当前步进;所有编辑器都按歌曲自身的调律来命名该音符。

追踪器将段落中的乐器轨道并列显示;Tab 与 Shift+Tab 切换到下一或上一通道。较长的 pattern 沿垂直方向滚动。钢琴卷帘的箭头按钮以八度为单位移动其音高窗口,覆盖 MIDI 键位 0–127。arrangement 具备水平滚动与 +/− 缩放控件;长歌曲也能保持可用的小节宽度。

项目面板的 MIDI IN / MIDI OUT 按钮用于导入与导出标准 MIDI 文件。导出由回放所用的同一歌曲调度器写入已编排的音符与控制器,并保留轨道名称、速度与拍号。导入支持格式 0 与 1,将通道拆分为乐器声部,并以一次可撤销的编辑追加四小节段落。它保留当前歌曲的速度与乐器;新增轨道需要分配乐器。导入沿用录制网格:落在同一十六分音符上的音符构成共享时值的和弦,音符时值上限为段落长度。MIDI 交换省去插件状态、参数自动化、逐音符表情、音频片段与微分调律。速度渐变作为十六分音符级的速度步进导出。这是音符交换,而非项目备份。

MIDI 键盘也会演奏这首曲子。它的按键抵达端口各自的线程后,经由无锁队列送入渲染回调,因此即便界面繁忙,按键也不会被阻塞;在停止和播放的曲子里,按键都会通过所选轨道的乐器发声,并且控制器的按键与屏幕钢琴的按键一样,对应曲子调律与音阶的一个音级。当录制已启用时,正在运行的曲子会把演奏内容写入播放头下的音型:每个音符落在最近的步上,偏离网格的程度作为微时间予以保留,时值等于按键保持的时长,若该步上已有音符则与之叠成和弦。写入的便是引擎听到的,以及听到时的位置,每一遍录制对应一步撤销。导出(Bounce)既听不到键盘也不录制键盘。

编辑器上方的提示栏可向 LLM 作曲助手下达指令,让其写入当前打开的音型:一行类似 "a 小调五声音阶上行" 或 "offbeat 踩镲" 的文本被发送至所选的后端(默认是本地 Ollama 模型,使用密钥时为 Gemini 或 MiniMax 接口),返回内容会像任何其他输入一样被解析并裁剪,结果作为提案停留在栏上,直到制作人点击 Apply —— 在此之前它不会进入曲子,且每生成一次对应一步撤销。助手只在 GUI 线程上运行;音频线程不会发起 LLM 调用。有关传输协议、后端以及 docs/llm-assistant.md 中所述的内容,请参阅 bdd_llm_assistant 处的网关,它在没有网络的情况下也能端到端驱动渲染栏。

构建

需要 Qt 6.5+、FluidSynth、RtAudio、RtMidi、libsndfile、libsamplerate 以及 Rubber Band 4(通过 pkg-config 查找),并准备一份 SoundFont 以通过验证关卡。

许可说明:片段伸缩(对音频片段进行时间拉伸和变调)链接了 Rubber Band 库,该库采用 GPL(版本 2 或更高)许可,除非另行向其作者购买商业许可。因此,包含该库构建的 Blokkily 二进制同样受到 GPL 约束。JUCE 与 CLAP 头文件被以 third_party/ 的方式随源代码一同提供。界面字体 IBM Plex Sans 与 JetBrains Mono 以 SIL 开放字体许可证 1.1 打包在 resources/fonts/ 中(许可证文本紧邻其旁),因此无论桌面环境的默认字体为何,界面布局都能一致呈现。

cmake -S . -B build -G Ninja
cmake --build build
ctest --test-dir build --output-on-failure
./build/blokkily

主可执行程序是一个 Qt Quick 工作站,它围绕一个规范化的 pattern,同步呈现步进格栅、tracker 与钢琴卷三种视图,共享同一根播放头,并配备一个步进检视器,揭示模型的完整表达:移调、力度、微时序、概率、ratchets(细分触发)、循环条件,以及带有自动化/调制开关的参数锁。每个编辑器都是输入端而非只读显示:点击步进会切换其开关;按下钢琴卷的某一行将该音高写入指针所在列,拖动则可跨行绘制一个乐句;拖动已绘制的音符可移动它,拖动其右边缘可设置发声时长;tracker 的音符列支持点击与拖动,其力度列写入该行的音量;而各行沿用 tracker 一贯的录入方式 —— 一个八度用 ZSXDCVGBHNJM,再往上的两行用于下一个八度,当前录入的八度显示在屏幕上,可通过 Ctrl+Left 与 Ctrl+Right 切换,Backspace 清空一行。Ctrl+C 复制所选步进,Ctrl+V 粘贴至光标处,参数锁与长度一并复制。 无论使用哪一种编辑器,编辑都会落到同一个规范化 pattern 上,立即在所有其他编辑器、检视器以及歌曲播放中同步显现;视图切换器可聚焦于某一编辑器,也可一并显示。 编辑器上方是编排视图:每条音轨一条 lane,每小节一格。点击空白小节会放置一个片段(clip),内容为当前打开的 pattern;点击已有片段则会在所有编辑器中打开该 pattern,并将播放位置定位到此处;右键点击可移除该片段;Shift+点击可将片段跨小节拉长(一个片段具有多次重复,而非另作一次放置);Alt+点击可将片段沿其 lane 移动。小节上方的数字是标尺,点击可将音频引擎定位到该小节。右侧是调音台,每个音轨一条通道条,外加一条主控。播放头由音频引擎自身的位置驱动,以 bar.beat.sixteenth 跨整曲读取。 编辑器下方是键盘区:包含本曲的调律、音阶与根音,以及在钢琴、同构格栅、品格板与和弦垫之间切换的开关,外加一个自动音阶开关,可将所按键吸附到音阶内的音符上。同构格栅提供七种布局 —— Wicki-Hayden、Bosanquet、基于六边形铺砌的谐波表与 B-system 手风琴,以及基于正方形铺砌的 Jankó、四度与大三度。每种布局都以分音程(cents)而非半音为单位,因此无论歌曲处于何种调律,同一指法都能落到对应音高上。任何界面都可横向或纵向铺满窗口:将其旋转四分之一圈,原本向右延伸的音高就会改为向上延伸,且不会触动任何音符或音高,只移动按键位置。若某界面无法在可演奏的键大小下完整绘出,则改为滚动显示,而非将按键缩小到难以按下的程度。 空格键播放,Return 键或 Home 键回到歌曲开头,方向键移动步进光标(Shift+上与 Shift+下以半音为单位移调,Ctrl+上与 Ctrl+下以八度为单位移调),Insert 将其后的行下移,Shift+Backspace 将其后的行上移,Alt+方向键微调微时序与音符长度,Ctrl+D 将所选步进复制到下一行,Ctrl+1..0(以及后半个小节的 Ctrl+Shift+1..6)切换步进开关,Ctrl+M 静音、Ctrl+L 独奏所选音轨,Ctrl+R 预备录音,Ctrl+E 将编排导出(bounce)为音频文件落盘,Ctrl+K 聚焦助手提示栏(Escape 把按键交还编辑器)。左侧的 MIDI IN 面板用于选择键盘,每当有键信号到来时指示灯都会闪烁。当文本字段获得键盘焦点时,这些键信号会让位,因此输入搜索或名称时不会触动歌曲。

每一次编辑都可以撤销:Ctrl+Z 撤销,Ctrl+Shift+Z(或 Ctrl+Y)重做 步骤、笔画、片段、轨道、模式、推子动作以及调音,拖动—— 在卷帘上画出一条乐句,拉动一下推子——算作一步历史记录, 而不是每个像素算一步。Ctrl+S 写回到会话来源的文件, Ctrl+Shift+S 询问保存到新文件;只要还有未保存的内容,窗口标题就会 带一个点;打开文件、用 Ctrl+N 新建会话或关闭窗口时, 会先询问是否丢弃未保存的工作。DUP 把打开的模式复制到一个新模式; 右键点击模式会显示重命名、复制、清空和删除,对轨道右键则 显示重命名、静音、独奏和删除;双击其中任一项即可命名。 用 +TRK 添加的轨道会被赋予会话已经在使用的 SoundFont,因此 立即就能听到声音。可演奏界面上的按键按下时发声, 松开之前一直延音。速度(tempo)可拖动、可滚动(按住 Shift 以十分位为单位), 或双击后键入数值。引擎以音频设备实际协商得到的 采样率进行渲染,因此被锁定在 44.1 kHz 的输出端会以 歌曲自身的音高和速度播放,而不是变平变慢。 它的插件浏览器会扫描平台标准的 CLAP 和 VST3 路径, 通过一个共享的插件边界列出找到的内容,并用产生该条目的 格式标记每一项。如此规模的安装包要靠输入而非滚动来浏览: Ctrl+F 定位到浏览器的输入框,输入名称、厂商或格式的几个字母, 列表就会按这些字母命中的顺序收窄到对应的乐器——例如 "fbs" 找到 "Fat Bass"——方向键和 Return 在其中移动 并加载一项,Escape 则重新列出全部。./build/blokkily_cli 运行无头调度器 演示。

行为规范在 features/ 中,仓库范围的完成规则 在 AGENTS.md 中。可重复的 BDD、集成、端到端 以及截图验证流程见 docs/verification.md。

架构

若要使用 GCC 测量 C++ 行覆盖率,请使用 cmake -S . -B build-coverage -G Ninja -DCMAKE_BUILD_TYPE=Debug -DBLOKKILY_COVERAGE=ON 配置一个单独的构建, 然后运行 cmake --build build-coverage、 ctest --test-dir build-coverage --output-on-failure 和 python3 scripts/coverage.py build-coverage。 报告和未覆盖的行号会写入 build-coverage/artifacts/coverage/。 内嵌(vendored)的框架、生成的代码、QML 以及内嵌的 GUI 验证 驱动被排除在百分比统计之外。

回放会在事件边界处切分密集的时间线,这样在设备请求较大缓冲区时, 音符和释放事件也不会被丢弃。每个轨道在同一样点上 最多支持 256 个同时调度的事件;超出该限制的编辑 会报告错误,并保留上一次可演奏的编排。

  • blokkily_core:规范的项目/事件模型与确定性调度器
  • Tuning/Scale/KeyboardSpec:基于音分(cents)的调音、音阶,以及由它们 投射出的可演奏界面
  • Song:命名的模式、混音器轨道,以及编排它们的片段
  • SongEngine:通过一条混音器总线实现无分配的多轨回放
  • 离线导出(bounce)以及支持 16 位、24 位和 32 位浮点的 WAVE 写入器
  • PluginInstance:格式中立的、保留调制信息的实时边界
  • Qt Quick 原型:同步的自定义编辑器与 CLAP/VST3 插件浏览器
  • FluidSynth 内置乐器:真实的 SF2/SF3 加载与离线渲染
  • 实时传输(transport)与 RtAudio 硬件输出适配器
  • MidiInput:RtMidi 端口适配器,将按键解码、调音,并通过无锁队列 路由到渲染回调,并提供用于测试的确定性模式
  • TakeRecorder:将引擎在录制时听到的内容转换为播放头下 模式的步骤
  • 下一层引擎:Tracktion 回放/录制适配器
  • CLAP 宿主适配器:发现、生命周期、处理与状态
  • 版本化的工程文件:整首歌曲加上每个乐器的插件状态
  • 原生 CLAP 与 VST3 插件窗口;立体声插件端口
  • 额外适配器:通过 JUCE 的 VST3

规范模型刻意不使用 Tracktion MIDI 片段。适配器将其编译为引擎与插件事件,保留更丰富的音序器语义。

录制、效果与音频

节拍通道可编辑阶梯与斜坡;标尺可编辑拍号,使片段保持在其所在的小节上。Pattern 可具有不同长度。+AUD 将 WAV、FLAC 或 AIFF 导入为带有裁剪、淡入淡出与增益的波形片段。重叠部分相加。片段的 W 控件启用跟随节拍、手动拉伸比例或移调。Rubber Band 在后台工作线程渲染这些更改;待处理的渲染在完成前保持静音。

Sampler 与 Drum Sampler 出现在乐器浏览器中。它们支持键位分区、循环、包络、套鼓垫与切片。FX 浏览器将 CLAP、VST3 或内置的 EQ、延迟、混响与压缩器作为插入效果添加到选定轨道、辅助或主控机架。发送位于推子后、声相前;当源轨道被独奏时辅助仍可听到。播放与导出都会补偿插件延迟。插入行以浏览器中所列名称命名效果,独占一行;其下方的 E 可打开其原生窗口;A 可选择一个参数在选定轨道的自动化通道中进行编辑。插件窗口的一次手势算作一步撤销,包括在辅助与主控插入上的手势。

每个轨道的 R 按钮可预录音符与音频,其输入控件用于选择 MIDI 通道或设备输入以及监听。在没有轨道预录的情况下,所选轨道进行录制。屏幕键盘与跟踪器可在歌曲播放时进行录制。和弦音色各自保持力度与时值。自动化具有独立的 OFF / READ / TOUCH / LATCH / WRITE 模式。一次录制产生的音符、自动化与音频共享一步撤销。CLICK 跟随节拍与拍号,CI 最多可倒数四小节而不推进歌曲,且除非启用 + CLICK,否则节拍器声不会包含在导出中。

在所选机架中,RESAMPLE 为下一次录制预录其轨道、辅助或主控输出。开启走带的录制按钮并按下播放。录制结束时,输出脱离音频线程写入一条新的音频轨道;目标不能反馈到自身的录制中。主控点不包含引导节拍器声。STEM 将该机架经同一引擎以新音频片段形式导出,并可选择性地静音其源。这两种操作都会对所选点之前的延迟进行补偿。被导出的主控在其源被静音的同时也会绕过旧的主控插入效果并重置其推子,以避免对已完成的混音进行二次处理;撤销可恢复所有这些更改。

分轨为 总线点:轨道分轨包含其插入效果与立体声推子/声相,辅助分轨包含其发送与辅助处理,主控分轨包含完整的混音。轨道分轨不包含其发送所对应的辅助信号;在重建混音时也应一并导出辅助。轨道与辅助分轨的总和为主控处理前的信号。非线性主控效果无法分配到独立的分轨之中。静音源轨道也会同时停止其发送,因此若需保留这些辅助,请单独将其导出。

机架中的某个压缩器带有一个 SIDECHAIN 芯片,任何声明了侧链输入的 CLAP 或 VST3 效果器也是如此(即非主的 CLAP 输入端口,或 VST3 的辅助输入总线):选择另一条轨道,效果器就会通过其侧链输入监听该轨道(压缩器监听这条轨道,而不是监听它正在压缩的内容)。触发信号取自源轨道自身的插入效果之后、推子之前的输出,因此即使底鼓被静音或推子拉低,仍会对贝斯产生闪避;引擎会先渲染触发源所在的轨道,并拒绝接受来自插入效果自身所在轨道的触发源,以及由触发链路构成的循环。

声明了额外输出的乐器(即非主的 CLAP 输出端口,或 VST3 的辅助输出总线)在其调音台条上会带有一个 + OUT 芯片:每个输出都可以单独拆分到自己的调音台通道("PAD AUX 1"),这是一条没有乐器的轨道,其信号即为该输出,会在源轨道之后渲染。它的推子、声相、静音、独奏、插入效果、发送和自动化与任何普通轨道一样工作,输出仅通过该通道听到——不会再从源轨道同时听到。独奏源轨道时,其各通道仍保持可听(它们是乐器自身的声音);单独独奏某一通道时则只听到该通道。该通道是歌曲的一部分:随歌曲一起保存、可撤销、并按实际听到的效果导出;移除源轨道后,该通道会作为一条普通轨道保留下来。检视器下方的 MODULATION 面板可以添加 LFO(正弦、三角、锯齿、方波、随机;速率以 Hz 为单位,或开启 SYNC 后按照速度映射的音符值,从 1/16 到 4 小节)、宏旋钮(一个 0..1 的旋钮)以及包络跟随器(取自卡片源选择器所选轨道在自身插入效果之后、推子之前的电平)。+ TARGET 将一个调制器对准所选轨道乐器或插入效果的某个参数,深度范围为该参数变化范围的 -100% 到 +100%。调制是在参数自身值与自动化之上的一个偏移量,通过 CLAP 参数调制接口(以及 VST3 和内置效果上的等价机制)发送,不会写入自动化通道;同一参数上的多个调制会累加。速率、波形、深度和宏可实时调整,无需重新编译。调制器与触发源随歌曲一起保存、随歌曲撤销、并按实际播放效果导出:歌曲播放时,LFO 的相位取自歌曲当前位置。

LAUNCH 视图是一个场景启动器:场景纵向排列,音轨横向排列,每个单元格命名歌曲的一个 pattern(也就是编辑器所编辑的同一个 pattern)。点击空白单元格会把当前打开的 pattern 放入其中;点击已填充的单元格会在该音轨上按单元格的量化(无、十六分音符、一拍、一小节、两小节或四小节)启动它,场景的 chip 会按网格的量化启动整行。单元格可以播放若干次循环后再接续(停止、下一首、上一首、第一首、最后一首、随机或再来一次)。启动、停止、循环切换与接续动作都精确地发生在其边界的采样点上,在渲染回调内执行;被启动的音轨会一直播放其单元格而非 arrangement,直到走带停止。开启 REC ARRANGEMENT 时,音轨从一个单元格播放的每一段在结束时会被作为 clip 写入 arrangement,每段一步撤销;写入的 arrangement 逐采样地播放和导出听到的内容。在较长的 clip 上写入的 take 会将其拆分,保留该 take 之后 clip 播放的内容。在 jam 中途添加或删除音轨、改变乐器时,会重建引擎而不打断 jam:已启动的单元格继续同相位播放,播放头停在原位。引擎队列无法容纳的启动会被拒绝并显示在状态栏上,同样显示的还有因 take 队列已满而丢失的 take。网格随歌曲一同保存。

MIDI 键盘将其发送通道上的弯音轮、控制变更与压力输入到音轨的乐器(SoundFont、VST3、CLAP 与采样器都跟随弯音轮;SoundFont 还接收复音压力),延音踏板则在输入端为所有乐器按住已松开的键。录制时,弯音轮、控制器、通道压力与复音压力(在歌曲调律发送给乐器的那个键上)会以控制器动作的形式写入 pattern:随工程保存,逐采样播放,播放头跳转时被追奏,并按所听到的导出。钢琴卷帘下方的控制器 lane 一次显示一个控制器(BEND、MOD、EXPR、任意编号的 CC 或 PRESSURE,可从其选择器中选择):拖动绘制一笔,拖动一个点来移动它,右键擦除;每个手势为一步撤销,正在运行的歌曲会在下一个 block 上播放它。

MPE 键盘:在 MIDI IN 面板上开启 MPE(或让键盘发送其 MPE 配置消息)。每个音符自身的弯音、CC 74 与压力仅作用于该音符本身,并随其一起录制,再回放为 CLAP note expression,或在 SoundFont 和 VST3 乐器上使用该音符自身所在的一个通道(每种乐器接收哪些内容见 features/continuous_midi.feature)。

解码后大小超过流式阈值(默认 128 MiB;BLOKKILY_STREAM_THRESHOLD_BYTES 可覆盖此值)的音频 clip 会从磁盘流式读取,而不是解码到内存中:后台工作线程为每个 clip 填充一个无锁环形缓冲区,使用与内存路径相同的转换器重采样到引擎采样率,渲染回调只进行读取。流跟随歌曲(在 clip 起始前和歌曲循环点前预先缓冲,在定位时被重新放置);缓冲区耗尽时淡出再淡入,避免产生爆音。导出在自己的线程上阻塞读取流式 clip,因此与流式播放逐采样一致。

导入的文件保持原位。录音会进入 <project>.audio/,或在首次保存前的临时会话文件夹中。COLLECT 会把被引用的剪辑和采样器样本复制到已保存工程的音频文件夹中,对共享文件进行去重,并把它们的引用作为一次可撤销的编辑统一修改。之后保存即可使这些引用持久化。原始文件会被保留,以便撤销操作依然可播放。

从代理(MCP)驱动 Blokkily

Blokkily 是一个 MCP 服务器,因此 AI 代理可以驱动正在运行的窗口:读取会话、写入笔记、播放与停止、调用控件所用的任何方法,以及截屏。使用你的代理来注册该桥接,例如使用 Claude Code:

claude mcp add blokkily -- blokkily --mcp

或者,对于任何接受 JSON 配置的客户端:

{ "mcpServers": { "blokkily": { "command": "blokkily", "args": ["--mcp"] } } }

blokkily --mcp 通过 stdin 和 stdout 通信 MCP,并通过本地套接字(Windows 上是 $XDG_RUNTIME_DIR/blokkily-mcp.sock 或命名管道)将每个工具调用转发到打开的窗口。连接和列出工具不会打开任何窗口;首次工具调用会在 Blokkily 未运行时启动它。只有运行 Blokkily 的用户可以连接。

这些工具包括 get_session、get_pattern、write_notes、transport、list_plugins、set_instrument、list_parameters、set_parameter(按名称指定的合成器预设或任何旋钮)、set_soundfont_preset(General MIDI 音色库与程序号)和 screenshot,以及 describe、call 与 get_property,它们能访问窗口控件所用的全部方法和属性(混音器、效果、自动化、剪辑、速度、调音、保存、导出、撤销)。代理的编辑会走与点击相同的可撤销路径。BLOKKILY_MCP=0 关闭服务器;BLOKKILY_MCP_SOCKET 用于移动套接字位置(为窗口和桥接设置相同的值);BLOKKILY_MCP_NO_LAUNCH=1 阻止桥接启动窗口。参见 features/mcp.feature。

尚未包含的内容

  • MPE 仅涵盖来自 MPE 芯片的下半区(上半区仅来自键盘的配置消息)。逐音符表情会被录制和播放,但不会在编辑器中绘制。VST3 乐器仅在两个半音的通道弯音范围内接收逐音符音高;SoundFonts 除非 SF2 映射了 CC 74,否则没有音色;采样器仅接收逐音符音高。不读取 MIDI 时钟。内建的采样器忽略多键压力;控制器通道也无法编辑多键压力。音符和控制器的打戳时间为回调块的时间。
  • Comping(对录制轨道录制多个备用段落)尚未包含。
  • 磁盘流式播放仅涵盖未经时间拉伸的音频剪辑:经过时间拉伸的剪辑会被解码到内存中再进行拉伸处理,而采样器始终会进行解码。在歌曲的循环点处播放的单个流式剪辑会在循环点处短暂出现下凹(每个剪辑仅一个流)。
  • 采样器面板一次仅加载一个文件;它没有多样本导入向导、力度分层编辑器或波形编辑界面。
  • 步进参数锁定针对轨道乐器。插入参数使用自动化通道;以插入为目标的步进锁定在本次发布之外。
  • 仅有 CLAP 或 VST3 效果的首个辅助输入接收按键信号,作为立体声(或单声道)信号;具有多个侧链的效果在其他侧链上接收静音。VST3 插件的额外总线仅在立体声主总线旁使用。
  • 调制每个块评估一次(最多为设备的块大小),因此同步 LFO 在其节拍后的一个块内开启。指向自身轨道或指向渲染顺序无法排在信号源之后轨道的跟随器,会听到前一块的电平。同步划分均为直接的音符时值(没有附点或三连音),其中的 "小节" 固定为四拍,无论拍号如何。
  • 场景启动器没有逐场景的节奏速度,导出始终是编曲(已启动的轨道不在导出中)。在已打印片段之后保留的片段尾部不会跟随在其裁剪之前设置的控制器值。
  • 输出录制每次过录选择一个总线。为一组分轨渲染额外的机架通道。当录制停止时部分实况过录结束,且不会自动追加效果尾音;离线分轨包含它们。
  • 原生插件窗口像素需要 X11 显示器。离屏验证检查嵌入生命周期,而单独的显示检测在 X 服务器可用时检查真实的 VST3 像素。

来源:Hacker News · github.com