noisecraft
浏览器端可视化模块化合成器,通过节点连线画出声音,无需安装
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
浏览器端可视化模块化合成器,通过节点连线画出声音,无需安装
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:你坐在电脑前,想要做一段电子音乐,但不想学习任何数字音频工作站(DAW)的复杂操作,也不想下载安装任何软件——打开浏览器,拖几个方块图标,连上线,按下播放键,音箱里就传出了合成音色的声音。这就是 NoiseCraft 正在做的事。
NoiseCraft 由独立开发者 Maxime Cher 创立于 2021年。项目受到 PureData 和 Max/MSP 等经典可视化编程语言的启发,但做了两个关键转变:第一,把运行环境从桌面应用搬到了浏览器;第二,采用极简主义哲学,不引入任何 Web 框架,只用原生 JavaScript、HTML 和 CSS 构建。
这种设计选择背后有务实的考量:Maxime 认为,一个没有外部依赖的声音合成器,才是一个真正意义上开放和自由的项目。用户不应该被锁定在某个特定的软件生态里,只要有一台能打开浏览器的电脑,就能访问和分享自己的音乐创意。
NoiseCraft 的运作方式很像 LEGO 积木:用户在工作区里放置不同功能的节点(Node),用线将节点的输入端口和输出端口连接起来,就构成了一个完整的声音合成链路。
项目定义了超过 40 种节点类型,覆盖了声音合成的主要环节:
振荡器节点:Sine(正弦波)、Saw(锯齿波)、Square(方波)、Triangle(三角波)等基础波形生成器,以及噪声生成器。
效果器节点:ADSR 包络(控制音量的 Attack-Decay-Sustain-Release 曲线)、Mix(混音)、Delay(延迟)、Hold(保持)、CurveShaper(曲线塑形)等。
控制节点:Clock(时钟信号)、Seq(序列发生器)、LFO(低频振荡器,用于调制)、Note(音符输入)等。
接口节点:AudioOut(声音输出)、MIDI Input(外部 MIDI 控制器输入)等。
项目的一个独特设计哲学是:整个系统只有一种数据类型——浮点数,且音频信号和控制信号没有本质区别。这使得连接和处理过程极度统一,用户不需要区分信号类型就能构建复杂的声音网络。
NoiseCraft 的音频引擎不走寻常路。它不使用 Web Audio API 原生的振荡器节点来做合成,而是把整个音频图(Audio Graph)编译成 JavaScript 代码,运行在一个 AudioWorklet 线程中。
这套架构分为四层:
模型层(model.js):定义节点架构(NODE_SCHEMA),管理节点图的状态变更(增加/删除节点、连接端口、设置参数等),支持撤销/重做(最多400步历史)。
编译器层(compiler.js):将节点图转换为可执行的音频代码单元(Compiled Unit)。编译器负责检测环路(detectCycles),并对 Delay 和 Hold 等反馈节点进行拆分——将写操作和读操作拆成两个伪节点,打破反馈环路,避免音频处理死循环。
音频图层(audiograph.js):运行时引擎,维持每个节点的音频处理状态(NODE_CLASSES),根据编译后的单元更新图结构,调用具体的合成函数生成 PCM 音频样本。
视图层(audioview.js):连接模型和音频引擎。当用户在界面上操作时,触发 Play/Stop/SetParam 等动作,AudioView 将这些动作映射为音频引擎的消息和参数更新,实现真正的实时反馈。
这种方式保证了同一段项目文件在任何浏览器和设备上产生的声音完全一致——因为合成逻辑是 JavaScript 代码,不依赖任何浏览器的 Web Audio 实现细节。
NoiseCraft 项目文件使用 .ncft 格式,本质上是易于解析的 JSON。文件记录了所有节点及其参数、端口连接关系等信息。这意味着外部工具可以轻松读取甚至编译 NoiseCraft 项目——比如,将一个 .ncft 文件转换为 VST 插件,在任意 DAW 中使用。这是一个尚未被充分探索但极具想象空间的方向。
目前社区已经分享了大量示例项目,涵盖电子舞曲、实验音乐、教学演示等多种类型。在线的 Browse 页面可以看到创作者们分享的超过500个社区项目。
NoiseCraft 的部署非常简单。官方提供了两种方式:
Docker 部署(推荐):一行命令 docker build . -t noisecraft && docker run -p 7773:7773 -d noisecraft,5分钟完成,端口 7773 即可访问。
手动部署:安装 Node.js >= 16 后,npm install && node server.js 即可启动,默认端口 7773。数据存储使用嵌入式 SQLite 数据库,无需额外部署。
值得注意的是,项目对 Safari 浏览器支持不完善(主要因为 Safari 的 Web Audio 和 Pointer Capture 实现存在问题),推荐使用 Chrome 或 Firefox。
NoiseCraft 目前仍被作者定位为"work in progress",存在几个明显短板:
移动端缺失:目前没有移动端适配,在手机和平板上体验很差。
节点种类有限:相比 Max/MSP 或 PureData,NoiseCraft 的内置节点数量还很少,高级功能(如复杂的效果器链、多声道支持)暂时不具备。
文档不足:帮助文档较为简陋,新用户的学习曲线相对陡峭。
依赖较旧:package.json 中依赖的 sqlite3 版本为 ^5.0.6,且 server.js 使用的是 Express 4.x,存在潜在的安全隐患。
NoiseCraft 代表了一个值得关注的趋势:让音乐创作工具彻底走向浏览器端,降低音乐技术的准入门槛。传统的声音合成往往需要昂贵的硬件(模块合成器)或复杂的软件(Max/MSP 授权费数百美元)。NoiseCraft 证明了用纯前端技术可以实现功能完整的模块化合成器。
对于 AI 开发者而言,这个项目也提供了一个独特的视角:它将"编程"的概念从文本代码扩展到了可视化节点图,是 AI 辅助编程工具(如 GitHub Copilot、Cursor)之外另一种人机交互的可能方向。如果未来将 LLM 能力接入这样的可视化编程环境,AI 可以直接理解和生成节点图结构,那将打开新的创作维度。
GitHub 链接:maximecb/noisecraft
在线体验:noisecraft.app