
"v5已经不用SuperCollider的scsynth引擎了。我把它整个换成了自己写的移植版,叫SuperSonic。"
这话是Sam Aaron自己敲的,8月7日,在Hacker News上他那条Sonic Pi v5发布帖的评论区里,回一个纠结开源许可证的网友。我抓下评论树的时候,那帖274分、73条评论。
先说这事跟你有什么关系。Sonic Pi是个完全免费、MIT协议的东西,装上之后不会任何乐器的人也能敲几行类似Ruby的代码,让电脑当场出声。它2012年诞生在剑桥大学计算机实验室,Sam Aaron跟树莓派基金会一起做的,从第一天起就是奔着学校的计算机课和音乐课去的——名字里那个Pi就是树莓派的Pi,Sam在HN评论区被人吐槽名字起得容易误会时,自己解释过一遍。所以家里有个坐不住的孩子想碰编程,或者自己一直想玩音乐却连五线谱都认不全,这一版值得花二十分钟。
但Sam那句"整个换掉"听着像地基被撬了。一个跑了十四年的教育项目,说换引擎就换引擎?我想知道这刀到底切了多深,于是干了件笨事:把GitHub上v5.0.0那份发布说明用接口整个拉下来存成文件,按小标题一条一条数。
数完是这样:正文18620个字符、170行、9个内容小节、91条改动记录,外加7个平台的下载包信息。这篇后面讲的所有事,都是从这91条里翻出来的。

91条改动,都堆在哪儿了?
最长的一节是GUI,28条,差不多占了三分之一。往下是13条bugfix、12条标着New的新功能、11条改进。合成器与效果器8条,乐理7条,无障碍6条,破坏性变更4条,翻译2条。
数到这儿我停了一下,回头确认了一遍口径:换音频引擎这件"天大的事",在91条里占几条?
一条。就是New那一节的第一句。
剩下的90条,大部分是些听起来很琐碎的东西。比如代码补全弹窗被重做了,现在选到某个建议时会直接把效果预览到你的代码里,选音高时弹出一个迷你键盘,遇到pan:这种有取值范围的参数还给你一个滑杆。比如每个live_loop旁边会挂一个内联小示波器,它只显示这个循环自己的声音。再比如新增了个叫Quickstart Cards的东西——一叠能直接拖进代码里的卡片,每张卡自带一个迷你波形显示,鼠标悬在插入按钮上就能先听一下。
乐理那7条就一笔带过:多了个lydian_dominant音阶,多了几个和弦别名,把Hendrix那个和弦从只能写7-10改成了也能写7+9。

换掉SuperCollider,到底换掉了什么?
发布说明的开头三段没有小标题,是Sam直接讲的。他说scsynth这东西是给复杂的音频合成研究用的,不是给面向初学者的教育软件用的,所以Sonic Pi这些年一直得在背后做大量隐藏工作才能让它跑顺。大部分时候能糊过去,但有些毛边一直在,"比如在Mac上插个耳机,你得重启一次"。
这就是SuperSonic要解决的事。v5之后,输入设备、输出设备、采样率、缓冲区大小,全都能在界面里直接改,不用重启,正在跑的音乐也不会停。发布说明里那句话写得很Sam:所以插吧,跳到一半插耳机也没关系。
顺带跟着改的还有主混音器:新的限幅器把延迟从20毫秒压到了1.5毫秒。音量和驱动被拆成了两个控件,分别坐在限幅器两边——以前调音量会连音色一起改,现在那是set_drive!的活儿。
SuperSonic官网的演示页我也翻了,那上面讲的是浏览器版:把scsynth的C++代码编成WebAssembly,跑在AudioWorklet的高优先级音频线程上,不用装任何东西。但Sam在HN说得很清楚,塞进Sonic Pi v5的是原生构建版本,独立进程,"没有js,也没有浏览器"。同一份代码,三个方向:原生、WASM、嵌入式。
那HN上为什么有人不高兴?
整条评论树里最长的一支,跟音乐一点关系都没有,吵的是许可证。
起因是有人问Sonic Pi和Strudel哪个能用在自己的项目里。有人接话说Sonic Pi是MIT,但底下的SuperCollider是GPL,等于白搭。Sam这才出来说了那句"我把它整个换成了SuperSonic"。
一个ID叫spacechild1的人当场顶了回去,语气不太客气:SuperSonic的合成核心还是scsynth,这凭什么叫"完全替换"?他还直接点名,说Sam这是在绕GPL。
Sam的回应我读了两遍。他先道歉,说之所以强调区别,是不想让人误以为SuperSonic是SuperCollider官方项目;然后承认得很干脆——SuperSonic本身就是GPL,它确实是衍生作品,共享了大量代码,"我完全拥抱GPL"。他说自己守的只是SuperCollider从第3版就存在的那条网络边界:通过公开的、有文档的协议跨进程通信,通常不算把两个程序合并成一个,数据库领域就是这么用的。
另一边搬出了GNU官方FAQ的原话:管道、套接字、命令行参数通常是两个独立程序之间的通信方式,但如果通信的语义足够"亲密"、交换的是复杂的内部数据结构,那也可能被认定为合并成了一个更大的程序。
这段争论我觉得比更新日志本身更值得读。一个教育项目想往浏览器和嵌入式设备里钻,撞到的第一堵墙不是技术,是二十多年前定下的许可证。Sam的解法是把边界画在进程和网络上,再把面向应用开发者的那层客户端API单独按MIT放出来。这招在数据库世界是常规操作,在音频合成圈里还没被真正检验过。他自己也在评论里追问对方:那SuperCollider官方到底怎么看?没人给得出准话。
一个课堂工具的坑,能藏多少年?
91条里有一条特别扎眼,藏在"改进"那节的第一句,没加粗,也没上发布公告的摘要。
代码缓冲区的容量提到了64KB,大约2500行。而在此之前,Mac上的上限大概是9KB,Linux和Windows大概16KB——关键是后半句:超过之后按Run会静默失败。不报错,不提示,就是不响。
对一个课堂工具来说这是最糟的一类bug。一个十几岁的孩子写长了一点,按运行,没声音,他不会想到是软件的限制,只会觉得自己写错了。
还有条更老的。9+5和m9+5这两个和弦一直缺着三音、升五音和九音,发布说明里写明白了出处:这是"经由Overtone从SuperCollider继承下来的长期bug"。Overtone是Sam早年参与的那个Clojure音乐项目,也就是说这个和弦错了得有十几年,一路错到今天才被揪出来。
整份文档里以"Fixed"开头的条目有14条,点名感谢外部贡献者的地方有5处。tech_saws合成器一直在输出四声道,hoover一直在写六声道,sc808_cymbal干脆绕过主混音器直接怼到硬件输出上——所以它既不进录音,也不进示波器。这些东西不写在更新说明里,外面没人会知道。

这版更新真正为谁而做?
把91条按"谁受益"重新分一遍,答案挺清楚的。
无障碍单独占了6条,加上GUI那节里的焦点管理、高对比度检测、可见焦点环、减少动效开关,实际份量远不止6条。文档面板现在能被屏幕阅读器逐行朗读,标题会出现在转子导航里,旋钮会念出自己的数值;Quickstart Cards整叠卡片可以用左右方向键翻,每翻一张会报出卡名。Sonic Pi官网首页上"对盲人和视障者友好"那行字,不是营销词。
另一半重心在新手身上。文档面板被重写成原生渲染,例子能直接在帮助窗口里播放和停止;合成器与效果器的文档页里塞进了可交互的乐器,带旋钮和屏幕键盘,你转旋钮它就改示例代码。Sam在HN被问最喜欢哪个新功能,他挑了两个:Link Audio和Quickstart Cards。前者是给演出的,后者是给"不想读教程的人"的。
所以我不认为v5是一次面向老玩家的性能更新。它是一次面向"第一次打开这个软件的人"的更新,把地基换掉只是为了让这件事做得成。版本时间线我在GitHub的releases列表里对了一遍:v4.0.0是2022年7月6日,v5.0.0是2026年8月7日,中间隔了四年一个月;上一个版本v4.6.0停在2025年6月26日,到这次隔了十三个多月。这么长的间隔,换来的是91条里只有1条讲引擎、28条讲界面。这个比例本身就是答案。
补一句:这次的源头帖子在Patreon上,我打了两次都是403,没读到,所以这篇里没有任何一句是从那儿来的。文中Sam的话全部出自HN评论区和GitHub发布说明。
那你该从哪一步下手?
手里已经装着v4的,顺序得反过来:先别下载。打开GitHub上v5.0.0那一页,把"Breaking Changes"那4条读完再动手,尤其第一条——set_volume!的取值范围从0到5改成了0到1,你老代码里写set_volume! 2的地方现在得改用set_drive!。主混音器的效果链顺序也变了,旧作品听起来会不一样。好消息是v5的配置文件跟v4分开存,两个版本可以并排装着,v4的设置不会被动,当然也不会自动带过来。
第一次装的,去sonic-pi.net下对应自己系统的包,Mac分arm64和x64两个,苹果芯片的机器选arm64。装完第一件事不是翻教程——打开帮助面板,找到Quickstart Cards那一叠,把第一张卡拖进编辑器,按运行。声音出来那一下,你就知道这软件为什么能在学校里活十四年了。
夜雨聆风