用于音频应用和插件的开源 C++ 库
免费 C++ API,适用于音频应用和插件。了解如何使用我们的关键特性和代码示例指南构建跨平台桌面、移动和音频插件应用。
什么是 JUCE?
现代音频软件,如合成器、数字音频工作站(DAW)和声音处理工具,需要高效的框架来简化复杂的音频编程任务。JUCE 是音频开发行业中最广泛使用的框架之一,它是一个开源的 C++ 库,旨在构建跨平台的音频应用和插件。它为开发者提供了完整的音频处理、插件开发、GUI 创建以及硬件集成工具包。开发者只需编写一次代码,即可在包括 Windows、macOS、Linux、iOS 和 Android 在内的多个平台上部署应用。
JUCE(Jules’ Utility Class Extensions)是一个开源的 C++ 应用框架,用于构建桌面和移动应用,尤其是音频软件和插件。它提供可重用的模块,简化音频处理、MIDI 通信、GUI 创建、插件开发、文件处理和网络等任务。JUCE 被开发者和音频软件公司广泛用于构建 VST、VST3、AU、AUv3、AAX 和 LV2 插件以及独立应用程序。它显著降低了构建音频应用的复杂性。开发者无需为每个操作系统编写特定代码,而是可以使用 JUCE 的统一 API 来构建跨平台软件。
JUCE 入门指南
安装 JUCE 最简单的方法是使用 GitHub。请使用以下命令进行完整安装。
从 NuGet 安装 JUCE
git clone https://github.com/juce-framework/JUCE.git 通过 CMake 安装 JUCE
cd JUCE cmake . -B build cmake --build build 音频处理与 DSP 支持
开源的 JUCE 提供了内置的数字信号处理(DSP)模块,使开发者能够构建音频效果、合成器和声音处理器。该框架包括滤波器、振荡器、FFT 分析和实时音频处理工具。这使得 JUCE 成为创建音乐制作工具和音频效果插件的理想选择。下面是一个针对音频缓冲区的代码处理示例,它会降低每个采样点的幅度。这类操作通常用于实现增益控制或音频效果。
如何通过 C++ API 处理音频缓冲区并降低振幅?
void processBlock(juce::AudioBuffer& buffer) { for (int channel = 0; channel < buffer.getNumChannels(); ++channel) { auto* samples = buffer.getWritePointer(channel);
for (int i = 0; i < buffer.getNumSamples(); ++i) samples[i] *= 0.5f; // 降低音量 } } 通过 C++ API 开发音频插件
JUCE 库简化了专业音频插件的创建。开发者可以使用同一框架构建兼容主要音频标准(如 VST、VST3、AU、AUv3、AAX 和 LV2)的插件。此功能使开发者能够在众多 DAW 中分发插件,而无需重新编写代码。代码展示了一个将信号增益降低 20% 的简单音频插件。在实际项目中,开发者可以添加参数、自动化以及复杂的 DSP 算法。
如何通过 C++ API 创建简单音频插件?
class GainProcessor : public juce::AudioProcessor { public: void processBlock(juce::AudioBuffer& buffer, juce::MidiBuffer&) override { buffer.applyGain(0.8f); } }; 跨平台开发
JUCE 最强大的特性之一是能够使用单一 C++ 代码库构建跨平台应用程序。开发者可以创建在 Windows、macOS、Linux、iOS 和 Android 上运行的软件,而无需重新编写平台特定的代码。这大大缩短了开发时间,并确保在不同操作系统之间行为一致。下面的示例创建了一个显示对话窗口的简单 JUCE 应用程序。由于 JUCE 处理了平台抽象,同一代码可在多个操作系统上运行。
如何通过 C++ 创建跨平台 JUCE 应用?
#include
class HelloWorld : public juce::JUCEApplication { public: const juce::String getApplicationName() override { return "JUCE 示例"; } const juce::String getApplicationVersion() override { return "1.0"; }
void initialise (const juce::String&) override { juce::AlertWindow::showMessageBoxAsync( juce::AlertWindow::InfoIcon, "JUCE 应用", "来自跨平台 JUCE 应用程序的问候!"); }
void shutdown() override {} };
START_JUCE_APPLICATION (HelloWorld)
MIDI 与音频设备集成
JUCE 还提供了与音频设备和 MIDI 控制器交互的 API。开发者可以通过框架直接访问麦克风、扬声器、MIDI 键盘等硬件。这对合成器、DAW 和现场表演软件等应用至关重要。下面的代码监听传入的 MIDI 信息,并在按下 MIDI 键时打印音符编号。
如何通过 C++ API 监听传入的 MIDI 消息?
void handleIncomingMidiMessage(juce::MidiInput*, const juce::MidiMessage& message) { if (message.isNoteOn()) { int note = message.getNoteNumber(); juce::Logger::writeToLog("音符开启: " + juce::String(note)); } }