Guides design and implementation of JUCE audio plugins (VST3, AU, Standalone)—CMake setup, AudioProcessor/Editor, APVTS, real-time DSP, MIDI, and host quirks. Use when building, refactoring, or debugging JUCE plugins, VST3, synths/effects, or when the user mentions JUCE (often misspelled "Juice").
Framework name: JUCE (not "Juice"). Assume C++ unless the user specifies otherwise.
CMakeLists.txt; JUCE via FetchContent (juce_add_plugin, juce_generate_juce_header).*AudioProcessor in Source/PluginProcessor.*, UI in Source/PluginEditor.*; feature code under Source/.juce::AudioProcessorValueTreeState (APVTS) with AudioProcessorValueTreeState::ParameterLayout; wire UI with AudioProcessorValueTreeState::SliderAttachment / ButtonAttachment / ComboBoxAttachment as appropriate.getStateInformation / setStateInformation (often delegating to APVTS XML); keep serialization backward-compatible when changing parameter IDs.In processBlock and anything called from it:
new, std::vector::push_back, string ops, etc.).getRawParameterValue, smoothed values, or cached atomic copies updated from the message thread).On the message / GUI thread: UI updates, preset browser, file dialogs, heavy work.
juce_add_plugin with explicit FORMATS (e.g. VST3 AU Standalone), PLUGIN_MANUFACTURER_CODE, PLUGIN_CODE, COMPANY_NAME, PRODUCT_NAME.target_link_libraries on the plugin target; use target_sources for Source/*.cpp you add.IS_SYNTH TRUE, MIDI input as needed.IS_SYNTH FALSE; set bus layout in processor constructor / isBusesLayoutSupported.IS_MIDI_EFFECT TRUE when applicable.AudioBuffer, MidiBuffer, dsp:: where it fits) and patterns already used in Source/.