> ## Documentation Index
> Fetch the complete documentation index at: https://comfytv.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Score Editor

> 一个拍域钢琴卷帘编辑器。在最多四个声部上绘制、步进录入并编辑音符，然后导出 MusicXML 乐谱。

<Frame caption="Score Editor（ComfyTV）">
  <img src="https://mintcdn.com/comfytv/dMkMxJDZdIo4YzAU/images/nodes/score-editor.png?fit=max&auto=format&n=dMkMxJDZdIo4YzAU&q=85&s=f3b7e5617ae0999cb4b14e7392bd5ec2" alt="Score Editor" width="1200" height="760" data-path="images/nodes/score-editor.png" />
</Frame>

## 这个节点做什么

**Score Editor（乐谱编辑器）** 是一个完整的浏览器内钢琴卷帘，让你直接在画布上作曲。不必像
**Score** stage 那样手写 MusicXML，你在以 **拍与小节** 为单位的网格上绘制音符，把它们组织
成最多四个命名声部（每个可设自己的乐器或切到打击乐模式），并设置速度与拍号。你画的一切都
存储在节点上。

按 **▶ Run** 在后端把你的卷帘转换成 MusicXML；`score` 输出是一份 `COMFYTV_TEXT` 的
MusicXML 文档，可供 **Score Performer**、**Score Synth** 或任意音乐 stage 使用。卷帘为空时
运行会以 “the piano roll is empty” 失败。

你也可以把接入的乐谱（`score` 输入，`COMFYTV_TEXT`）导入卷帘，以编辑一首已有的曲子。

## 编辑器

卡片由工具栏加钢琴卷帘组成。自上而下：

**工具行。**

* **Draw / Select / Step（绘制 / 选择 / 步进）** —— 三种编辑模式。
  * *绘制*：在网格上按住拖动创建音符；拖动决定其长度，放置时音符会发声。
  * *选择*：拖出选框框选音符（Shift 追加到选区）；点击音符即抓取。
  * *步进*：在一个移动光标处用键盘逐个录入音符 —— 按字母键 **A–G** 插入对应音高，**0** 或
    **空格** 为休止，**Backspace** 删除上一步，方向键用于移调（上/下，Shift 为八度）或移动
    光标（左/右）。步进模式下会出现时值选择器（**1、1/2、1/4、1/8、1/16、1/32**）以及附点
    开关（**·**）；一条黄色光标线标记插入点。
* **Play（▶ / ■）** —— 用内置的振荡器/鼓合成器播放整个卷帘；一条绿色播放头扫过，视图自动
  跟随滚动。
* **Snap（吸附）** —— 网格吸附：**1/4、1/8、1/16、1/32** 或 **free**。
* **Tempo（速度）** —— BPM（20–400）。
* **Time sig（拍号）** —— 每小节拍数（1–12）比拍型（2、4 或 8）。
* **Bars（小节数）** —— 总长度（1–256 小节）。
* **Undo（↩）撤销**、**Clear part（清空声部）**，以及（接入乐谱时）**Import score（导入
  乐谱）**。

**声部行。**

* 每个 **声部** 一个按钮（最多四个）；点击设为激活，双击重命名。**＋ / −** 增删声部。
* **🥁 Percussion（打击乐）** 把激活声部切到鼓道 —— 左侧键盘从音高切换为 General MIDI
  鼓名。
* **Instrument（乐器）** —— 激活（非打击乐）声部的 General MIDI 乐器下拉框。
* **Q Quantize（量化）** 把选中的音符吸附到网格。
* 导入状态/警告显示在这里（例如导入时跳过了打击乐）。

**钢琴卷帘。** 一个可滚动网格，左缘是一排钢琴键盘（点击某键试听其音高；C 音有标注）。音符
是方块，你可以：

* 拖动本体 **移动**，
* 拖动左/右边缘手柄 **调整长度**，
* 双击 **删除**，
* 多选后一起拖动/调整。
  其它（非激活）声部的音符显示为暗淡的 “幽灵” 方块，方便你据此对齐。底部有一条 **力度带** ——
  横向拖动即可为光标下的音符涂刷响度。

**缩放与导航。** Ctrl/Cmd + 鼠标滚轮缩放拍网格；滚动条平移。键盘快捷键：**Delete/Backspace**
删除选中音符，**Ctrl/Cmd+Z** 撤销，**Ctrl/Cmd+A** 全选，**Ctrl/Cmd+D** 复制选区。

## 工作流 / 分步

1. 为曲子设置 **Tempo**、**Time sig** 和 **Bars**。
2. 选一个 **Snap** 值；选择或新增一个 **声部** 并设置其 **Instrument**（或切 🥁 为鼓）。
3. **绘制** 音符（或用 **步进** 模式打入）；用边缘手柄调整长度。
4. 为其它乐器添加更多声部；用幽灵音符把它们对齐。
5. 在 **力度带** 里塑造强弱；按 **Play** 试听。
6. 按 **▶ Run** 输出 MusicXML **score**，再接到 **Score Performer** / **Score Synth**。

## 输入与输出

| 槽位        | 方向    | 类型             | 含义                     |
| --------- | ----- | -------------- | ---------------------- |
| **score** | 入（可选） | `COMFYTV_TEXT` | 要导入卷帘的一份已有 MusicXML 乐谱 |
| **score** | 出     | `COMFYTV_TEXT` | 由你的卷帘构建出的 MusicXML     |

卷帘本身以一个隐藏的 `notes_json` 字段存储在节点上，因此你的工作会随工作流一起保存。

## 提示

* **步进模式** 是精确录入旋律最快的方式：设好时值，再敲音名字母 —— 无需拖动。
* 写对位或和声时，把其它声部的 **幽灵音符** 当作参考。
* 打击乐声部在键盘上用鼓名；导入乐谱会跳过打击乐声部（若有被丢弃会给出警告）。
* 不按 ▶ Run 就没有数据到达下游 —— 卷帘是编辑器，运行才输出乐谱。

## 相关节点

* **Score** —— MusicXML 优先的替代方案（粘贴 XML 而非绘制）。
* **Score Performer** —— 带律动演奏你导出的乐谱并输出 MIDI。
* **Score Synth** —— 把它渲染成音频。
* **MIDI Editor** —— 面向 MIDI 文件的秒域钢琴卷帘（非 MusicXML）。
* **Bridge** —— 与原生 ComfyUI 类型互转。见
  [https://github.com/jtydhr88/ComfyTV/blob/main/docs/bridges.md](https://github.com/jtydhr88/ComfyTV/blob/main/docs/bridges.md)
