1. 博客
  2. 对比

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 结构体、一张参数表和一个描述符。

C++
#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 框架,请参阅音频插件框架对比。

来源

常见问题

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 是核心格式,其他所有格式都基于它进行适配。