网络演奏台 · Web 电子琴与鼓机多声部 / 落键瀑布 / 无需安装
两套音源、最多 16 个声部(15 条旋律通道 + 一个固定鼓组):内置合成器用 Web Audio 实时合成 22 种乐器与 16 件打击乐;系统 MIDI 音源可调 GM 128 音色与第 10 通道鼓组。整页不加载任何音频素材。
左右拖动瀑布=平移音域;播放时上下拖动=拖动播放位置;拖下面的横条=改高度(往下拖=变高)
显示与记忆:瀑布样式 / 粒子 / 发光 / 自动保存草稿(改动即时生效,会记住)
用鼠标点按琴键(按住并滑动可连奏);手机可多指按和弦。电脑键盘:Z S X D C V G B H N J M 与 Q 2 W 3 E R 5 T 6 Y 7 U,−/= 移调,空格 延音。琴键颜色跟随当前声部;细键 / 全键盘 一次显示 5 个八度或 88 键,跨八度就不用反复移调了(细键模式下琴键上带小亮条的那一段=电脑键盘正在弹的音域)。
.mid 文件拖进这个面板也能直接读进来。
↑23)。卷帘里滚动鼠标只滚卷帘,滚到头才带动整页;Ctrl+滚轮=缩放网格。
录音数据 / 导入导出(JSON,含声部与乐器,可用于其他脚本调用)
tr 声部序号、n
音高(MIDI 号,60 = 中央 C,打击乐用 36 底鼓 / 38 军鼓 / 42
闭合踩镲…)、t 起始秒、d
时长秒、v
力度。所有数据只存在当前页面内存里,刷新即消失。
本工具的调用接口
演奏台支持用 URL 参数直接载入并播放,便于其他页面或脚本调用。全部在前端完成,不产生任何服务器请求。
GET tools/web-instrument.html?参数
play 示例曲目:xiaoxingxing | huanlesong | shengrikuaile | canon
notes 自定义旋律:音名+八度,冒号后接拍数(默认 1,可小数):
多个音用空格或逗号分隔 · 和弦写 [C4,E4,G4] · 休止符 R
用 | 分段,第 k 段自动属于第 k 个声部(多声部就靠它)
单个音也可用尾部 @N 指定声部 · 打击乐直接写音高号(36 底鼓 / 38 军鼓 / 42 踩镲…)
tracks 声部乐器,逗号分隔:s:piano,s:flute,d 或 gm:73,gm:56,dm
(s: 内置音色 22 种 · gm:0-127 系统 GM 音色 · d 内置鼓组 · dm 系统鼓组通道)
drums 加一段鼓点:basic | funk | rock | waltz,可跟 :小节数,如 drums=funk:4
bpm 速度(默认 120) engine synth | midi octave -3 ~ 3
tools/web-instrument.html?play=canon&bpm=76
tools/web-instrument.html?notes=C4:0.5,D4:0.5,E4:0.5,G4:2&tracks=s:clarinet
tools/web-instrument.html?notes=[C4,E4,G4]:1,[F4,A4,C5]:1&tracks=s:choir,s:bass&drums=funk:2
tools/web-instrument.html?notes=C4:0.5 E4:0.5 G4:0.5|C3:1 G3:1|36:0.5 42:0.5 38:0.5&tracks=s:harp,s:cello,d
浏览器禁止页面未经交互自动发声,带参数打开后会提示点一下播放按钮。多声部写法:用
| 把旋律分段,第 1 段走声部 1、第 2 段走声部
2;单音想临时换声部可写 G4:1@2。
怎么用(30 秒上手)
- 弹奏:点琴键,或用电脑键盘 Z…M / Q…I;−= 移调,空格 延音。
- 打击乐:直接点上面的打击垫;若把某个声部的乐器选成「鼓组」,琴键会变成 16 件打击乐的映射。
- 换乐器:在「声部与乐器」里下拉,内置 22 种(钢琴、单簧管、长笛、小提琴、萨克斯、音乐盒…),接上系统音源后还有 GM 128 种。点「♪ 试听」听一下。
- 多声部:点「+ 添加声部」,最多 16 个(15 条旋律通道 + 一个固定鼓组);每个声部一种乐器、一种颜色,播放时色条会分色落下。读进来的 MIDI 声部超过 16 个时,会按音色把最像的并入同一个声部(提示里写明并了谁),音一个不丢。
- 自动演奏:选曲目 → 「▶ 播放」。想看多声部效果就选《卡农(四声部)》:竖琴 + 小提琴 + 长笛 + 鼓。
-
两种"渐强",别混:
① 音内渐强 ╱ / 音内渐弱 ╲——给音符本身打记号,让它在自己这一段长度里由轻到响(或反过来),
就是乐谱上那条斜线。内置合成器直接改这个音的包络:起音被压得很轻,钢琴那种"敲击音色"就被弱掉了,
听感更接近口琴、口风琴这类气声乐器;接系统音源时跟着发一条 CC11(表达式)曲线, 导出的 .mid
里也写着这条曲线(拖进 DAW
也是对的)。选中若干音符就只作用于它们,没选=当前声部全部。
② 力度渐强 / 力度渐弱——作用于音符之间:把每个音符各自的力度(velocity)排成一条斜坡,
平均值不变,所以整体音量不变、只是"越往后越用力"。MIDI 里没有"渐强事件"这种东西, 所有音序软件的音符间渐强都是这么做出来的(逐个改力度)。
两种都能 Ctrl+Z
撤销;音内渐变可以点「清除音内」去掉。写下来的音内渐变,播放与导出都带着它。
渐变可以走曲线:「音内渐强」按钮旁边的「曲线」选择框有五种 ——
线性(匀速变响)、前慢后快(指数)、前快后慢、S 形(两头慢、中间快),还有 自定义。 点「音内渐强 ╱ / 渐弱
╲」时按它写进音符:音符条里的白线就是这条曲线的形状(鼠标停上去写着是哪条),
瀑布里落下的色条也按它画,导出的 .mid 里同样是这条曲线。
曲线只在"带音内渐变"的音符上才有意义:选中音符里已经有了渐变时,换曲线会立刻改写它们(不用再点一次按钮);
一个都没带时页面会提示点击「音内渐强 /
渐弱」,或直接用曲线窗口里的「套用为…」按钮。
自定义怎么调:选择框右边那个小方格是缩略图,点一下打开一个曲线大窗口(在下拉框里选「自定义」也会自动打开;窗口可以拖标题栏挪位置、✕
或 Esc 关掉),
里面就是这条曲线本身:横轴=这个音的长度(左=音头、右=音尾),纵轴=音量(下=静音、上=满)。
白点=拐点:拖它就改形状(往上=更早变响、往下=更晚变响);双击空白加一个点;
右键点上的点把它删掉(也可以点一下选中,再按
「− 删点」);加点多用
「+ 加点」;「区域消音」打开后横着拖一段,那一段就被压成静音(可以拖好几段)——
音符会在中间留一个空档(内置合成器那一段真的不出声;接系统音源、导出的
.mid 里对应位置的 CC11 会掉到 0)。
改动边拖边生效:立刻写到当前选中的、带音内渐变的音符上(可撤销);选中的音符还没带音内渐变时,
用窗口里的「套用为渐强 ╱ / 套用为渐弱 ╲」一步到位(等价于执行一次卷帘里的按钮操作)。
两端永远钉在"很轻"和"满"(点只能上下左右挪,拖不出格子),所以怎么画都不会把音量拖爆。
内置合成器的每秒音量点由本地计算,曲线想怎么走都行;接系统音源、以及导出的
.mid, MIDI 里没有"曲线事件"这种东西,所以这条曲线会被采样成一串 CC11(表达式)点写进去 (线性 8 个点、曲线 16 个点,越弯的点越密)—— 这也正是 DAW
给单个音画渐强时真正写进文件的东西。
顺便答一下"滑音":MIDI 规范里确实有"滑音开关 / 滑音时间"(CC65 / CC5),但绝大多数音源都不理它; 通行、所有音源都认的做法是用弯音轮(pitch bend)画一条曲线。本工具现在用弯音表达"音分"(每个音一个值), 要做成"从前一个音滑到后一个音"需要另外一套弯音曲线,这一版还没做 —— 先如实说明,不假装有。 想一边弹一边听这个效果:琴键上方那一行的「手弹:音内渐变」选择框就是为这个准备的 —— 注意它只管手弹(电脑键盘 / 鼠标点琴键弹出来的音),跟卷帘里的音符没有关系,所以放在琴键那边; 启用后,手弹的每个音都会套上音内渐变(按 1.1 秒铺开,按多久就保持多久), 挑个钢琴音色弹几下,敲击声会明显变软。注意:音内渐变只对"能延续的音"有意义,鼓点不带它。 - 速度标记与"播放时视图":卷帘上紫色的 ♩=120 小旗子就是速度标记(鼠标停在上面有说明)。 它一直贴在卷帘最上面,上下滚动看别的音域也不会跑掉,横向滚动也跟谱面严格对齐。 改速度有两个框,分工不一样(都在卷帘上方的工具行里): ①「整首速度」=第 0 拍那个标记=整首底速,改它整首从头按这个速度走(示例曲目也用它); 演奏面板里那两个地方显示的都只是读数(点「到卷帘里改 ↗」就跳过来)—— 速度只在这一处改,不用再猜。 ②「播放头处 ♩=」=播放头所在位置即变速位置(Alt+点击网格),这个框显示的就是"这里的速度", 直接改它就从这一拍开始变速(那里没有标记就现场放一个);点「+ 速度标记」也可以先放一个再改。 ③ 双击旗子直接输数字(拖过之后也能双击)。 标记可以拖着走(一次能拖到自己想放的地方,按住 Shift 拖=不吸附到网格),右键删掉。 第 0 拍那个是整首的基准速度:位置锁在 0、也删不掉。 标记滚出视野时,卷帘上方会冒一条小提示「视野外还有 N 个速度标记:← 第 8 拍 ♩=90」, 点一下就直接滚到那儿,不用自己找。 播放、五线谱、卷帘的小节宽度和导出的 .mid 都按这些标记走 —— 也就是说,曲子可以在第 8 拍慢下来,读进 DAW 也一样。 右边的「播放时视图」下拉框决定卷帘怎么跟着播放走:跟随=播放头到右边缘就往前翻一段(默认); 播放线居中=播放线一直钉在屏幕中间;不跟随=视图一动不动,只有播放线自己往前跑。
- 录制:点「开始录制」→ 弹一段 →「回放录音」;也可导出 JSON 给别的脚本用。
关于音色:为什么"内置"这么多,还需要系统 MIDI?
- 内置合成器是算法实时合成(振荡器 + 包络 + 滤波 + 噪声),不加载任何音频文件,所以任何浏览器、任何手机都一定能出声,但音色是"合成味"的。
- 系统 MIDI 音源调用的是本机操作系统里的音源(Windows 过去自带 Microsoft GS Wavetable Synth),音色更接近早年电子琴的记忆,也支持完整的 GM 128 音色与鼓组;缺点是 Safari / iOS 完全不支持 Web MIDI,且需要 HTTPS 与授权弹窗。
- 读 MIDI 时的速度口径:文件里写了几条速度事件就放几个标记;同一条速度重复写两遍的会被合并成一条 (不然卷帘上会多出一个完全一样的 ♩=120,没有任何用)。如果文件的第一条速度事件不在第 0 拍, 本工具会按它从开头走(并在提示里说明)—— 以前这种情况下会补一个假的 120,60 BPM 的曲子开头就被吃掉了。
- MIDI 文件里到底有什么:可读取的标准事件包括 —— 速度变化(tempo,现在会变成卷帘上的速度标记)、 拍号、调号、轨道名、程序号(音色)、每个音的力度与时长、 通道音量 CC7(现在会变成声部音量)、延音踏板 CC64、弯音轮(只统计处数,暂不展开成音分)。 同一条通道上"内容一模一样"的两条轨会被并成一条(有些文件会写两遍,读出来就是两个长得一样、只有音量不同的鼓组; 同一通道上同刻同音高重复按下去本来就只是重触发),并的时候音量取大的那个、音一个不丢,提示里会说明。 谱号不是标准 MIDI 事件 —— MuseScore 那些"高音谱号 / 低音谱号"是它写在自己的私有区块(厂商自定义事件)里的, 别的软件(包括本工具)读不到,所以本工具是自己按音域猜谱号的;音色名、表情记号、谱面排版同样不在 MIDI 里。
-
Windows 10 / 11 上"扫不到 MIDI 输出设备"很常见:微软在新版
Win10 / Win11 里已经移除了自带的 GS Wavetable(32
位残留也时有时无)。想在网页里用系统音源,装一个免费的虚拟音源即可:装
VirtualMIDISynth(coolsoft 官网,免费)→ 再准备一个免费的 GM
音源库(SoundFont,如 FluidR3_GM.sf2 / GeneralUser GS)→ 在
VirtualMIDISynth 里加载它 → 回到本页点「刷新」,下拉框里就会出现
VirtualMIDISynth #1。装完先用「试音」按钮确认端口背后真的有声音。 注意:MuseScore 能正常出声不代表系统音源可用 —— MuseScore 自带 SoundFont(MuseScore_General.sf3)和自己的合成器,它并不调用系统 GM 音源。 - 两台音源可以随时切换:轨道上选了 GM 音色但没接系统音源时,会自动用最接近的内置音色顶上,不会没声音。