簧声:十孔口琴的简谱与指法工具
原创 · 约 15 分钟阅读 · 阅读 --

簧声:十孔口琴的简谱与指法工具

作者: Alex Xiang


本文完全由 WorkBuddy 独立收集资料、调试代码并完成文章写作。

扫码注册 WorkBuddy 即可获取 2000 积分

我是 Alex Xiang,前百度/微博工程师,现在专注于 AI 工程与工具产品。更多文章欢迎关注微信公众号「字与码」。

十孔口琴是个很奇怪的乐器:它只有十个孔,却能吹出三个八度;它便宜到几十块就能买一支,但第一周就能把大部分人劝退。

劝退的原因通常不是不懂乐理,而是谱子不告诉你孔在哪。

簧声主界面:左侧曲库,右侧谱面

门槛不在乐理,在找孔

会看简谱的人不少。简谱告诉你唱名:这个是 5,那个是 1,这个是八分音符。但口琴不按这个组织。

C 调口琴四孔吹是 C5,吸是 D5;同一孔的两个音之间还夹着半音,要靠压音(bend)吹出来。所以乐谱上的一个 5,落到手上是三个问题:第几孔、吹还是吸、要不要压、压几个半音。

初学最常见的动作因此变成:看一个音,低头数孔,抬头对位,再低头。一首四句的小曲吹得断断续续,不是因为不会,是因为一直在找。

簧声做的事很窄:把这两层信息叠在一张纸上,让你在读谱的同一秒知道手该放哪。

一张纸上有两行

上行是数字简谱,音级、八度点、时值都按简谱惯例写。下行是这十个孔上的指法:箭头表示吹(↑)或吸(↓),后面跟孔号,撇号表示压几个半音。两行逐音对齐,读到哪个数字,正下方就是它的孔位。

《送别》的谱面:上行简谱,下行孔位,逐音对齐

以《送别》开头为例:

5 3 5 后面那个带点的高音 1,指法是 ↑4,即四孔吹。接着的 7 6 5,6 标着 ↓3″:三孔吸,往下压两个半音。这一处是整首曲子里最难的,谱面下的注释专门点了出来。

纸上的记号都照简谱的规矩来:数字下面的横线是减时线,一条八分音符、两条十六分音符;数字后面的横线是增时线,每条延长一拍;数字右边的小圆点是附点,延长一半;两个音之间的弧线是延音线,而且只连同音高的音。

窗口底部有一行图例,十三个记号逐个写清楚:吹孔、吸孔、压音、超吹、增时线、附点、八度点、前倚音、波音、延音线、自由延长、重音与保持音、小节号。看不懂哪个符号,往下扫一眼就行,不用去查教程。

曲库按「能不能练」来分

内置 20 首,分两组各 10 首。入门组挑的是短曲、自然音为主、拍号常见的那一类;传统组是完整旋律,节奏和音域都更宽一些。

搜索能混着用:曲名、原名、作者、标签一起匹配。筛选有难度、标签、技巧四栏,其中技巧栏里直接给了「无需压音」这一项——先用一晚上吹熟三五首不用压音的曲子,压音再单独当技巧练,比一上手就啃《送别》的第 6 小节舒服得多。

收藏存在本地,刷新之后还在,开几个标签页也是同步的。

它会算,也会承认自己算不准

每首曲子下面有分析面板:音域、音符数、小节数、压音几处、超吹几处,以及具体的提示。

《送别》是 C4 到 C5、24 个音、8 小节、压音 3 处、超吹 0 处。

把位这一项我特意做成两档。曲谱里声明了主音(比如写了「A 小调」),就报「第四把位」;只写了 1=C,就报「第 1 把位(推定)」,并说明主音是推出来的。《送别》属于后者——1=C 只说明调号,不说明调式,硬报一个确定把位是不负责的。

分析面板:音域、把位、压音统计与校验结果

面板里还有一句我不打算删的话:「有可用孔位只表示指法存在,不代表初学者能轻松演奏」。程序能算「这个音在哪个孔」,算不出「你按不按得住」。

自己做张谱:写文本,不拖鼠标

没有可视化编辑器。要做新谱,写一段文本贴进来:

@id: my-first-song
@title: 我的第一首
@key: C
@octave: 5
@harp: C
@time: 4/4
@tempo: 88 4
@difficulty: 1
@source.name: 自己记的谱
---
| 1 2 3 4 | 5 4 3 2 | 1 - - - |

--- 之前是元信息,之后是谱面。谱面里 | 分小节,数字是音级,- 是增时线,' 提高八度、, 降低八度,数字后面跟 :8 就是八分音符。上面这段我贴进编辑器跑过:3 小节、9 个音、0 个不可奏音,把位第 1(推定)。

点「预检」,通过的会报小节数和音符数;不通过会指到具体字段,或者第几小节的第几个音。错误定位不到位置,改谱就变成了猜。

导入面板:贴文本、预检、保存到个人曲库

也支持直接导入 JSON——完整字段在仓库的 docs/data-format.md 里,包括来源、版本、核对日期、移调和逐小节的反复与段落信息。导入前会校验字段类型、数值范围和不认识的记号:不认识的记号是拦下的,不会静默丢掉一半旋律再告诉你「导入成功」。

曲谱错了就改,改完写下来

内置曲谱是照公有领域旋律自己记的,不是抄印刷谱。既然是手记,就一定会错。

《铃儿响叮当》副歌里那句「jingle all the way」,记成简谱是 3 5 1 2 3。最早这版把 1 和 2 标成了高八度,整句于是往上跳一个八度,听着完全不对。核对 ABC 谱(Jingle Bells,G 调,BB B2 | BB B2 | Bd G>A | B4)之后确认:1 和 2 比 3 低,是主音八度里的 do、re,不带高八度点。

《铃儿响叮当》:副歌的 3 5 1 2 全部落在本调八度内

顺着这条线索把 20 首的八度标记都查了一遍,又找出两首同类问题。《平安夜》把连住的长音拆成了两个重复音,还把 D D B 写成了 B B;《绿袖子》标了 do=C5,同一句里却混着低音的 7,,形成 C6 到 B4 的断裂。三首都改了,改了什么、依据什么,写在每首的「核对」字段里,而不是悄悄覆盖。

剩下 17 首只做了八度自洽和可奏性检查,没有逐音对照权威谱。这句话我写在来源台账里,也印在每张谱面的页脚:未经第二人音乐审校,也未做实体口琴试奏。

一个自己记谱的工具,不该假装自己有审校团队。

导出:图、矢量、PDF

格式得到什么用来做什么
JSON完整曲谱数据与来源信息备份、改稿后重新导入
SVG独立可打开的矢量文件放进文章、放大不失真
PNG整谱高清位图,2 倍渲染发到群里、打印前预览
打印 / PDF按 A4 分页夹进谱夹

四种导出和网页共用同一个排版引擎,所以屏幕上看到的换行、延音弧、图例,导出后是同一套。差别只在宽度:屏幕按窗口宽度重排,导出固定 760,打印按 A4 版心 688。

PNG 不是截屏,是把整首谱按 2 倍渲染成一张图,长谱也不会被截断——只是整谱特别高的时候会自动降一档倍数,保证整张图能落进画布。

数据只在你自己的浏览器里

没有账号,没有服务器。收藏、个人曲谱、界面设置都写在浏览器的 localStorage 里,不写 Cookie,不加载统计脚本。

代价也很实在:换设备要自己导备份。「备份与恢复」里能导出 JSON,恢复时分合并和替换两种,替换前会先让你下一份旧数据;清了浏览器数据,曲库就没了。

关于页:版权、隐私说明与公众号入口

点左上角「簧声」能打开关于页,版权、隐私、免责都在那儿。还有公众号「字与码」,一键复制名称,微信里搜一下就能关注。

现在就能打开

打开会先看到这张海报,点「进入曲库」才进主界面。左上角那个「簧声」就是回看它的入口。

簧声启动海报:暗色背景上的十孔口琴,琴身泛铜色光

线上地址:https://myharpscore.app.workbuddy.host/?sharecode=TZNUA7CRAK

手机也能用:曲库收进抽屉,谱面按屏幕宽度重新排版成每行一到两个小节,不是把桌面版整张缩到看不清。

手机端的谱面:两小节一行,可一直滚到末尾

限制先说清楚,省得你试了才发现:

没有音频播放,没有节拍器。启动海报上印着「节拍 · 跟练」,那还是下一步,现在的版本里没有。也不支持三连音、颤音、滑音和和弦;口琴调性只覆盖 12 个常用调,Low / High 这类特殊调性会明确提示不支持,而不是给你一个错的孔位。

指法的默认选择是启发式规则:先不压音、不超吹,再优先靠近中音区的孔,同分取孔号小的。同一个音常有别的走法,面板里给了备选,你可以不同意它。

工程上它是一堆静态文件,零依赖,双击 index.html 就能跑;49 条自动测试和 43 项浏览器实测(Edge,1440 / 390 / 320 三档)都过了,但只在 Windows 的 Edge 上跑过,Safari 和 Firefox 没测。

最后说句实在的:这个工具不会让你吹得更好,它只是让你少花点时间在找孔上。剩下的还是那句话——压音得自己练。

参考资料

打开原图 ↗