写代码、写东西的时候需要一点背景声,歌单的问题在于会腻——第三遍循环同一首歌,注意力就开始跟着歌词走了。我做了一台即兴钢琴:打开网页就开始弹,每一段都不重复。它是现场生成的,不是播放。

它是什么

浏览器里的一架钢琴。每个小节,一个决策模型在九个候选和弦里挑一个,同时回答八个小问题——左手织体、节奏型、强度、呼吸、这一句要不要承袭上一句的动机——然后由确定性代码渲染成音符。你可以把它的决策面板打开:每个音都能溯源到「它当时在两个选项之间犹豫过」。它弹得不完美,但每一次的形状都不一样,这正是背景声需要的性质。

两个设计保住了体验:其一,模型想太久也不会断——决策有预算,超了由同构的本地决策器顶替这一小节并如实标记,下一小节照常重试;其二,琴键的亮灭跟着声音的真实起止走,长音不会提前灭掉。

你也可以上手

这不只是个播放器:

  • 电脑键盘就是琴键。A 到 L 一排,按下即响,你弹的音会在下落区里亮出来。
  • 跟弹回声。你随手弹个乐句,它会把它接过去、发展成下一句——像和一个反应很快的琴友合奏。
  • 和弦键亮起。不知道手该往哪放时,当前和声的键位会亮。
  • 弹得满意可以导出 MIDI,拿去别的工具里继续。

边界

它做的是氛围与即兴,不是作品集:没有整曲的宏大结构,强度有起伏但没有「乐章」级别的布局。想听完整的曲子,它不如流媒体;想有个不重复的、能搭手的钢琴声,它就是为此造的。

上手

打开 https://jevpiano.logicc.top,点播放就行。部署默认走 Cloudflare Workers AI,无需任何 key;想换更强的模型通道,可以在设置里填自己的 key(可选,不填也能一直听)。

它为什么能不断、接口形状怎么毁掉又修好音乐性、73 轮调音里都改了什么,写成了一篇复盘:《一架钢琴的七十三次调音》。仓库在 https://github.com/tripodxu/jev-piano。