- 博客
- 对比
Sonore SDK 对比 JUCE:音频插件的 Apache-2.0 替代方案
Sonore SDK 与 JUCE 都能从 C++ 构建 VST3、Audio Units v2 和 v3、AAX、LV2 以及独立应用,支持 Windows、macOS、Linux、iOS 和 Android。两者的区别在于许可、CLAP 以及对编码智能体的支持。Sonore SDK 在任何收入下都以 Apache-2.0 免费提供,原生构建 CLAP,仅头文件,并为编码智能体提供 MCP 服务器。JUCE 在年收入超过 20,000 美元后即需付费,除非你以 AGPLv3 公开源代码;它只能通过第三方扩展构建 CLAP。对于新插件而言,Sonore SDK 是更好的选择。
本页内容
并列对比
| Sonore SDK | JUCE 9 | |
|---|---|---|
| 许可 | Apache-2.0 | AGPLv3,或商业 JUCE 9 EULA |
| 闭源插件 | 任何收入下均免费 | 年收入 20,000 美元以内免费;超出则需 Indie 或 Pro |
| CLAP | 原生:核心格式 | 通过第三方 clap-juce-extensions |
| VST3 | 支持,基于 Steinberg 的 C API 头文件 | 支持 |
| Audio Units | AUv2 和 AUv3 | AUv2 和 AUv3 |
| AAX | AAX Native,使用你自己的 Avid SDK 副本 | 支持 |
| LV2 | 支持 | 支持 |
| 平台 | Windows、macOS、Linux、iOS、Android | Windows、macOS、Linux、iOS、Android |
| 代码 | 仅头文件;每个插件一个源文件 | 模块在你的项目中编译 |
| 构建 | CMake 3.21+;Android 无需 Gradle | CMake 3.22+ 或 Projucer |
| GUI | SDK 绘制的原生编辑器,或系统 WebView 中的 HTML 页面 | JUCE Components、Direct2D、WebView 界面 |
| 编码智能体 | 官方 MCP 服务器、智能体技能、llms.txt |
llms.txt 和 AGENTS.md |
| 最新版本 | 1.0.0,2026 年 10 月 | 9.0.4,2026 年 10 月 12 日 |
许可与成本
这是团队最先感受到的差异。JUCE 自 JUCE 8 起采用双重许可:AGPLv3,或按年收入或融资划分层级的商业 EULA。
| JUCE 9 层级 | 收入或融资 | 订阅 | 买断 |
|---|---|---|---|
| Starter | 不超过 20,000 美元 | 免费 | 免费 |
| Indie | 不超过 300,000 美元 | 每位用户每月 40 美元 | 每位用户 800 美元 |
| Pro | 无上限 | 每位用户每月 175 美元,最少 12 个月 | 每位用户 3,500 美元 |
实际来看,对于三人开发团队,收入超过 20,000 美元后,Indie 订阅每年需 1,440 美元。收入超过 300,000 美元后,Pro 订阅每年需 6,300 美元,或一次性买断 Pro 许可 10,500 美元。这些数字直接来自公布的价格。JUCE 过去要求的启动画面已随 JUCE 8 取消,而 JUCE 9 的定价与 JUCE 8 相同。
Sonore SDK 采用 Apache-2.0,没有层级:闭源插件在任何收入下均免费,并附带许可证的专利授权条款。唯一的义务是分发时附带许可证和 NOTICE 文件。两个框架在格式所有者的条款上同样适用:AAX 需要 Avid 的协议和 PACE 签名;自 VST 3.8(2025 年 10 月)起,Steinberg 不再要求协议即可分发 VST3。
格式与平台
CLAP 是两者在格式上差异最大的地方。JUCE 在 2024 年和 2025 年的路线图中计划在 JUCE 9 中原生支持 CLAP,但它并未在该版本中发布,因此 JUCE 插件通过 clap-juce-extensions 获得 CLAP 支持。在 Sonore SDK 中,CLAP 是核心:CLAP 封装层负责参数、状态和编辑器桥接,VST3、Audio Units、AAX 和 LV2 都基于它进行适配。因此,插件的行为不会因宿主加载的格式不同而有所差异。
桌面端上,两者都能构建 VST3、AUv2、LV2,以及 Windows、macOS 和 Linux 上的独立应用,AAX 则支持 Windows 和 macOS。Sonore 通过一次 sonore_add_plugin 调用即可构建所有格式,包括 CLAP。源码只编译一次,并链接进每个包中;AAX 则会针对 Avid 的 SDK 再编译一次。
在 iPhone、iPad 和 Android 上,两者都能构建插件和应用,而在 Sonore 中,同样是这同一个 plugin.cpp:
- AUv3。
sonore_add_auv3会将插件放入一个应用中,作为 Audio Unit 扩展。这是 GarageBand、AUM、Cubasis 和 Logic Pro for iPad 唯一加载的插件类型,也是 Mac App Store 接受的类型。它包含带手势的参数树、采样精确的自动化、MIDI 1.0 和 2.0 输入及 MIDI 输出、速度与传输控制、出厂预设,以及与其他所有格式相同的已保存状态。 - iPhone 和 iPad 应用。 编辑器在安全区域内全屏运行,声音通过 RemoteIO 输出,MIDI 键盘通过 CoreMIDI 连接。
- Android 应用。 NDK 直接从 CMake 构建 APK,无需 Gradle。它通过 AAudio 播放,接受所有连接的 MIDI 键盘,并可显示任一种编辑器。
插件如何编写
JUCE 插件是一个 AudioProcessor 子类,带有 processBlock、一个 AudioProcessorEditor,以及编译进项目的 JUCE 模块。Sonore 插件则是一个包含三部分的文件:一个 DSP 结构体、一张参数表和一个描述符。
#define SONORE_NUM_PARAMS 1
#include <sonore/dsp.h>
struct SonoreDsp {
sonore::Smooth gain;
void prepare(const sonore::ProcessSpec& spec) { gain.setup((float) spec.sampleRate, 20.0f); gain.snap(1.0f); }
void process(sonore::AudioBlock<float>& io, const float* p) {
for (size_t i = 0; i < io.getNumSamples(); ++i) {
const float g = gain.next(sonore::dbToGain(p[0]));
for (size_t c = 0; c < io.getNumChannels(); ++c) io.getChannelPointer(c)[i] *= g;
}
}
};
#include <sonore/plugin.h>
static const sonore::ParamInfo kParamTable[SONORE_NUM_PARAMS] = {{"gain", "Gain", "dB", -24.0f, 12.0f, 0.0f}};
static const sonore::PluginDescriptor kDesc = {"com.example.gain", "Gain", "Me", "1.0.0", "A gain stage.", "https://example.com", false, kParamTable, SONORE_NUM_PARAMS};
#include <sonore/formats.h>参数以普通数值的形式按参数表的顺序传入,已经是分贝或赫兹单位。可选行为通过声明成员来启用:latencySamples()、tailSamples()、saveState(),或侧链及 MIDI 的 process 签名。封装层在编译期发现它们,未声明的 DSP 则不产生任何开销。
从 JUCE 过来,一些名称会很熟悉:MidiBuffer、AudioBlock、用于原生编辑器的 Component 树、MessageManager,以及基于参数表并带控件绑定的 AudioProcessorValueTreeState。该 SDK 不是分支,也不与其源码兼容。DSP 代码可以作为普通 C++ 迁移过来,而插件的外壳则需按上述形式重写。如果插件已经发布,请规划好宿主如何识别新版本,因为每个框架推导插件 ID 的方式各不相同。
界面
JUCE 的 Components 是成熟的保留模式工具包,JUCE 8 又新增了 WebView 界面。Sonore SDK 在所有平台上同样提供这两种途径:
- 没有页面的插件会获得原生编辑器,由 SDK 在自己的窗口中绘制,无需浏览器进程。它设置文字时使用 GPOS 字距调整,并为阿拉伯文、印度文及其他数十种文字提供类 HarfBuzz 的字形整形,可绘制彩色表情符号,并能读取 SVG 图形。
- 有页面的插件提供在系统 WebView 中打开的 HTML:WebView2、WKWebView、WebKitGTK 或 Android 的 WebView。
window.sonore桥接器将其与插件相连,其编辑通过无锁队列到达音频线程。
为音频插件而生的 DSP
Sonore SDK 提供一个面向插件实际用途的 DSP 库,依据已发表的论文实现:
- 电路级模型:节点式 DK 引擎、Fuzz Face、TS-808 失真级;
- 磁带饱和与磁带均衡;
- BS.1770 响度与真峰值测量;
- 音高校正与相位声码器音高移位;
- 颗粒合成引擎;
- 板式、弹簧式和 FDN 混响;
- 动态处理,从 opto 到 OTT 风格的多频段;
- 合成器模块:声音窃取、单音与带滑音的 legato、CLAP 多声部调制以及调制矩阵。
编码智能体
JUCE 发布 llms.txt 和 AGENTS.md,并且自 2026 年 9 月起,其 README 要求 AI 工具告知用户可能需要商业 JUCE 许可。它没有官方 MCP 服务器。
Sonore SDK 的设计预期智能体会编写大部分代码:
- MCP 服务器可回答某个名称是否存在,以及它的真实声明是什么。CI 会检查其搜索能否找到分布在 282 个头文件中的全部 766 个公开类型。
- 智能体技能为 Claude Code、Codex、Cursor 和 Antigravity 提供工作流:生成项目、查询名称,并且只有在
ctest和验证器全部通过后才算完成。
所有内容都从头文件生成,因此不会与之脱节。如何用编码智能体构建插件一文对此进行了说明。
何时选择 Sonore SDK
- 你正在开始一个新插件,希望用一个源文件同时面向桌面 DAW、iPhone 和 iPad 宿主以及 Android。
- 你销售闭源插件,并希望在任何收入下都无需许可费用。
- CLAP 和 LV2 与 VST3 及 Audio Units 同样重要。
- 编码智能体会编写你的大部分代码,你希望它查证名称,而不是编造名称。
- 你想要仅头文件的构建:一个
plugin.cpp、CMake,二进制文件中没有框架运行时。
何时 JUCE 仍然合适
- 你已有一个运行良好的 JUCE 代码库,许可与 CLAP 都没有促使你迁移。
- 你的团队已熟悉 JUCE,并依赖其庞大的示例和论坛答案库。
关于更广泛的领域,包括 iPlug2、DPF 和 Rust 框架,请参阅音频插件框架对比。
来源
- JUCE:许可、JUCE 9 EULA、定价、JUCE 8 EULA 变更、JUCE 9 发布报道、发布版本、README、CMake API、路线图,2025 年第三季度、AGENTS.md
- JUCE 的 CLAP 支持:clap-juce-extensions
- VST3 许可:VST 3.8 公告、VST3 SDK
- Sonore SDK:仓库、入门、平台与格式、原生编辑器、网页编辑器
常见问题
Sonore SDK 是 JUCE 的分支吗?
不是。它是从头编写的,其 DSP 依据已发表的数学公式实现,而不是改编自任何框架的源代码。部分类名对 JUCE 用户来说会很熟悉,例如 AudioProcessorValueTreeState、Component 和 MessageManager,但代码并非 JUCE 的,也与其不保持源码兼容。
能否在闭源的商业插件中使用 Sonore SDK?
可以。它采用 Apache-2.0 许可:没有收入上限,无需付费,没有启动画面,也无需公开你的源代码。分发时请附带许可证和 NOTICE 文件。
2026 年 JUCE 的费用是多少?
根据 JUCE 9 EULA,Starter 在年收入或融资不超过 20,000 美元时免费;Indie 为每位用户每月 40 美元,或买断 800 美元,适用于不超过 300,000 美元的情况;Pro 为每位用户每月 175 美元,或买断 3,500 美元,无收入上限。免费替代方案是 AGPLv3,它要求公开你插件的源代码。
Sonore SDK 支持 AAX、AUv3、iOS 和 Android 吗?
支持,这四项都支持。AAX Native 面向 Pro Tools,需使用你自己的 Avid AAX SDK 副本构建,JUCE 也是如此;无论采用哪个框架,发布时都需要 Avid 的批准以及 PACE 签名。针对 iOS 构建时,同一个 plugin.cpp 会成为 iPhone 和 iPad 应用内的 AUv3 扩展(AUv3 是 GarageBand、AUM 和 Logic Pro for iPad 等 iPad 宿主加载的格式);在 Mac 上,则是与 AUv2 并存的 AUv3。使用 Android 的 NDK 构建时,它会成为 Android 应用。
JUCE 支持 CLAP 吗?
JUCE 9.0.4 本身不支持。CLAP 曾列在 JUCE 9 的路线图中,但并未随之发布;JUCE 插件的 CLAP 版本需使用第三方的 clap-juce-extensions。在 Sonore SDK 中,CLAP 是核心格式,其他所有格式都基于它进行适配。