六孔哨笛洞洞谱生成器
触发词
哨笛谱、六孔哨笛、哨笛洞洞谱、洞洞谱、笛子谱、哨笛谱生成、哨音谱、whistle sheet、six hole whistle
流程
1. 获取简谱
- 用户说出歌曲名
- 用 online_search 搜索「歌曲名 简谱 数字简谱」
- 若搜索到简谱图片,用 image_understanding 识别,逐个音符提取:
- 简谱数字 1-7
- 高低音标记(上/下点)
- 下划线(时值线):单线/双线,照搬原图位置
- 附点(右侧·)
- 弧线(连音线)
- 小节线 |
- 休止符 0、延长线 -
- 歌词与音符的对应关系 - 搜不到时告知用户"未找到完整谱,请手动提供简谱"
- 用户直接提供简谱则跳过搜索
2. 简谱转指法
参考 references/fingering-map.md,数字→六孔洞位图(筒音作5)。
核心原则:照搬原简谱所有符号(下划线/附点/小节线/连音线/歌词对应),只把数字替换为洞位指示,不自创、不自动推断任何节奏标记。
3. 生成 HTML 谱面
参考 references/sheet-template.md 中的 HTML 模板结构,生成谱面文件。
数据格式(每个音符对象):
{"d": 5, "t": "low", "holes": "●●●●●●", "u": 1, "dot": false, "l": "黑", "overblow": false}
- d: 简谱数字 1-7(高音区超吹仍标原数字)
- t: low/mid/high/rest/extend(用于判断上/下加点,不做颜色区分)
- holes: 6 个字符,从上到下第 1 孔 → 第 6 孔;●=按住、○=松开
- u: 下划线 0=无 1=单线 2=双线(照搬原简谱)
- dot: 附点 true/false(照搬原简谱)
- l: 歌词(照搬原图对应关系,纯音乐为空)
- overblow: 是否超吹(高音区,谱面标注「超吹」)
谱面要求:
- 排版参考传统简谱出版物:左对齐曲名 + 元数据行(调号 · 拍号 · 简谱来源)、描边式导出按钮、小文字段标;白蓝基调,避免装饰线/胶囊徽章/彩色阴影等花哨装饰
- 段标只写简短段落名(主歌/副歌/引子/间奏),不写整句歌词
- 白底谱面,按小节分组,小节间竖线分隔;小节不拆行(换行只发生在小节之间),段内按小节装箱分行(同段行内小节数一致、乐句上下对齐、行内居中)
- 每个音符下方绘制 6 孔洞洞图(自上而下,实心=按住、空心=松开)
- 数字严格保持同一水平线,使用齐线字体(Segoe UI/Arial,禁用 Georgia 等不齐线字体,否则 3/4/5/7/9 下沉、6/8 上浮);数字上下各预留约 1/3–1/2 数字高度(高音点区/低音点区)
- 网页谱面分段换行:每个段落独立一个 staff 容器(段标在段前),小节为不可分割渲染单元,谱面由模板内置 renderSheet 按 NOTE_JSON 自动渲染
- 洞洞图上方显示简谱数字(含高低音点),下方显示歌词(照搬原简谱对应)
- 下划线、附点、小节线、连音线全部照搬原简谱;下划线紧贴数字正下方(低音点位于下划线之下);延长音 - 逐个分开显示(每个一条独立短线,便于数拍)
- 内含「导出为图片」按钮:纯 JS Canvas 绘制 1920px 宽白底 PNG;导出图只含曲名 + 元数据 + 谱面,不含图例/指法表(图例仅保留在网页上)
- 保存为 哨笛谱_<歌名>.html
4. 交付
保存到工作目录,用 report_final_files 报告。告知用户点击「导出为图片」按钮下载 PNG。
图例说明
- 洞洞图:6 个孔自上而下排列,实心(●)=按住、空心(○)=松开
- 音符颜色统一(不用颜色区分高低音):高音=数字上方加点(超吹),低音=数字下方加点,中音=无点
- 高音区(超吹)与中音6、7:复用低/中音指法,加大气流超吹
- 半音:暂不处理,遇 #/b 时保留原简谱数字并在图例中提示
- 休止符 0 照搬原简谱;延长音 - 逐个分开显示,便于数拍
- 图例与指法表仅显示在网页上,导出 PNG 不包含
注意事项
- 半音(#4、b7 等)暂不映射特殊孔位,保留原简谱数字并提示「暂不处理半音」
- 高音区(超吹)指法与对应中音相同,仅标「超吹」,不改变孔位
- 超出可吹奏范围时八度折叠,标注「已降阶」
- 筒音作5:全按 6 孔 = 低音5(数字下方加点)