# Sonore SDK 对比 JUCE：音频插件的 Apache-2.0 替代方案

作者：Sonorie。发布于 2026-10-27，最后修改于 2026-10-27。 https://sonore.dev/zh/blog/sonore-sdk-vs-juce/

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](https://github.com/free-audio/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 结构体、一张参数表和一个描述符。

```cpp
#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` 和验证器全部通过后才算完成。

所有内容都从头文件生成，因此不会与之脱节。[如何用编码智能体构建插件](/zh/blog/build-audio-plugin-with-ai-coding-agent/)一文对此进行了说明。

## 何时选择 Sonore SDK

- 你正在开始一个新插件，希望用一个源文件同时面向桌面 DAW、iPhone 和 iPad 宿主以及 Android。
- 你销售闭源插件，并希望在任何收入下都无需许可费用。
- CLAP 和 LV2 与 VST3 及 Audio Units 同样重要。
- 编码智能体会编写你的大部分代码，你希望它查证名称，而不是编造名称。
- 你想要仅头文件的构建：一个 `plugin.cpp`、CMake，二进制文件中没有框架运行时。

## 何时 JUCE 仍然合适

- 你已有一个运行良好的 JUCE 代码库，许可与 CLAP 都没有促使你迁移。
- 你的团队已熟悉 JUCE，并依赖其庞大的示例和论坛答案库。

关于更广泛的领域，包括 iPlug2、DPF 和 Rust 框架，请参阅[音频插件框架对比](/zh/blog/audio-plugin-frameworks-compared/)。

## 来源

- JUCE：[许可](https://github.com/juce-framework/JUCE/blob/master/LICENSE.md)、[JUCE 9 EULA](https://juce.com/legal/juce-9-licence/)、[定价](https://juce.com/get-juce/)、[JUCE 8 EULA 变更](https://forum.juce.com/t/amendments-to-the-juce-end-user-licence-agreement-for-juce-8/61265)、[JUCE 9 发布报道](https://www.kvraudio.com/news/juce-9-now-available-67802)、[发布版本](https://github.com/juce-framework/JUCE/releases)、[README](https://github.com/juce-framework/JUCE/blob/master/README.md)、[CMake API](https://github.com/juce-framework/JUCE/blob/master/docs/CMake%20API.md)、[路线图，2025 年第三季度](https://juce.com/blog/juce-roadmap-update-q3-2025/)、[AGENTS.md](https://github.com/juce-framework/JUCE/blob/master/AGENTS.md)
- JUCE 的 CLAP 支持：[clap-juce-extensions](https://github.com/free-audio/clap-juce-extensions)
- VST3 许可：[VST 3.8 公告](https://forums.steinberg.net/t/vst-3-8-0-sdk-released/1011988)、[VST3 SDK](https://github.com/steinbergmedia/vst3sdk)
- Sonore SDK：[仓库](https://github.com/SonorieAI/sonore-sdk)、[入门](/docs/getting-started/)、[平台与格式](/docs/platforms-and-formats/)、[原生编辑器](/docs/native-editor/)、[网页编辑器](/docs/web-editor/)

## 常见问题

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