最全面JUCE入门指南:从安装到第一个音频插件开发实战
【免费下载链接】JUCE 项目地址: https://gitcode.com/gh_mirrors/juce/JUCE
JUCE是一个开源跨平台C++应用框架,用于创建桌面和移动应用,包括VST、VST3、AU、AUv3、AAX和LV2音频插件及插件宿主。它可以通过CMake轻松集成到现有项目中,也可以通过Projucer作为项目生成工具使用,支持导出Xcode、Visual Studio、Android Studio和Linux Makefiles项目。
环境准备与安装
系统要求
- C++标准:17
- CMake:3.22或更高版本
- 编译器:
- macOS/iOS:Xcode 12.4+
- Windows:Visual Studio 2019+
- Linux:g++ 7.0+ 或 Clang 6.0+(依赖详情见Linux Dependencies.md)
获取JUCE源码
git clone https://gitcode.com/gh_mirrors/juce/JUCE.git
cd JUCE
安装方式
1. CMake安装(推荐)
# 创建安装目录
cmake -B cmake-build-install -DCMAKE_INSTALL_PREFIX=/path/to/JUCE/install
# 执行安装
cmake --build cmake-build-install --target install
在项目中使用:
find_package(JUCE CONFIG REQUIRED)
2. 子目录方式
在现有CMake项目中添加:
add_subdirectory(JUCE)
项目构建基础
CMake配置示例
创建CMakeLists.txt:
cmake_minimum_required(VERSION 3.22)
project(MyFirstPlugin VERSION 0.0.1)
# 添加JUCE子目录
add_subdirectory(JUCE)
# 创建插件目标
juce_add_plugin(MyFirstPlugin
FORMATS VST3 AU # 支持的插件格式
PLUGIN_NAME "My First Plugin" # 插件名称
PLUGIN_MANUFACTURER_CODE Juce # 制造商代码
PLUGIN_CODE Dem0 # 插件唯一代码
DESCRIPTION "A simple gain plugin" # 描述
IS_SYNTH FALSE # 是否为合成器
NEEDS_MIDI_IN FALSE # 是否需要MIDI输入
NEEDS_MIDI_OUT FALSE # 是否需要MIDI输出
EDITOR_WANTS_KEYBOARD_FOCUS FALSE) # 是否需要键盘焦点
# 添加源文件
target_sources(MyFirstPlugin PRIVATE
Source/PluginProcessor.cpp
Source/PluginEditor.cpp)
# 链接JUCE模块
target_link_libraries(MyFirstPlugin PRIVATE
juce::juce_audio_processors
juce::juce_gui_basics
juce::juce_recommended_config_flags)
构建命令
# 配置构建
cmake -B build -DCMAKE_BUILD_TYPE=Release
# 编译项目
cmake --build build --config Release
第一个音频插件开发实战
插件结构
JUCE音频插件主要包含两个核心类:
AudioProcessor:处理音频信号和MIDI事件AudioProcessorEditor:提供用户界面
简单增益插件实现
1. 处理器类(PluginProcessor.h)
#pragma once
#include <JuceHeader.h>
class GainPluginProcessor : public juce::AudioProcessor
{
public:
GainPluginProcessor()
: AudioProcessor(BusesProperties()
.withInput("Input", juce::AudioChannelSet::stereo(), true)
.withOutput("Output", juce::AudioChannelSet::stereo(), true))
{
addParameter(gainParam = new juce::AudioParameterFloat(
"gain", "Gain", 0.0f, 1.0f, 0.5f));
}
void prepareToPlay(double sampleRate, int samplesPerBlock) override {}
void processBlock(juce::AudioBuffer<float>& buffer,
juce::MidiBuffer& midiMessages) override
{
auto gain = *gainParam;
buffer.applyGain(gain);
}
juce::AudioProcessorEditor* createEditor() override
{
return new juce::GenericAudioProcessorEditor(*this);
}
bool hasEditor() const override { return true; }
const juce::String getName() const override { return "Gain Plugin"; }
// 其他必要的纯虚函数实现...
private:
juce::AudioParameterFloat* gainParam;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(GainPluginProcessor)
};
2. 编辑器类(可选自定义界面)
class GainPluginEditor : public juce::AudioProcessorEditor
{
public:
GainPluginEditor(GainPluginProcessor& p)
: AudioProcessorEditor(&p), processor(p)
{
addAndMakeVisible(slider);
sliderAttachment.reset(new SliderAttachment(processor.state, "gain", slider));
setSize(200, 100);
}
void paint(juce::Graphics& g) override { g.fillAll(getLookAndFeel().findColour(juce::ResizableWindow::backgroundColourId)); }
void resized() override { slider.setBounds(10, 10, getWidth()-20, getHeight()-20); }
private:
GainPluginProcessor& processor;
juce::Slider slider;
std::unique_ptr<juce::AudioProcessorValueTreeState::SliderAttachment> sliderAttachment;
};
参考示例代码
JUCE提供了丰富的示例,可参考:
- AudioPluginDemo.h:完整的合成器插件示例
- GainPluginDemo.h:简单增益插件
调试与测试
运行示例程序
# 构建示例
cmake . -B cmake-build -DJUCE_BUILD_EXAMPLES=ON
cmake --build cmake-build --target DemoRunner
# 运行演示程序
./cmake-build/examples/DemoRunner/DemoRunner
DemoRunner包含各种模块的示例,可直接运行查看效果: 
插件测试工具
- AudioPluginHost:JUCE自带的插件宿主测试工具(extras/AudioPluginHost)
- VSTTestHost:第三方VST插件测试工具
- Reaper:数字音频工作站,可加载和测试插件
高级应用与资源
常用模块介绍
- juce_audio_processors:核心音频处理模块(modules/juce_audio_processors)
- juce_dsp:数字信号处理模块,包含滤波器、振荡器等(modules/juce_dsp)
- juce_gui_basics:基础GUI组件(modules/juce_gui_basics)
学习资源
总结与后续学习路径
通过本文学习,你已经掌握了JUCE的基本安装、项目构建和简单音频插件开发。建议后续学习:
- JUCE DSP模块:实现更复杂的音频效果
- 自定义GUI:创建专业的插件界面
- 多格式支持:构建VST3、AU等跨平台格式
- 性能优化:针对实时音频处理优化代码
JUCE社区活跃,文档丰富,是音频插件开发的理想选择。开始你的创作之旅吧!
本文项目路径:gh_mirrors/juce/JUCE
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



