/* ==================================== JUCER_BINARY_RESOURCE ====================================

   This is an auto-generated file: Any edits you make may be overwritten!

*/

#include <cstring>

namespace BinaryData
{

//================== jucer_AudioPluginFilterTemplate.cpp ==================
static const unsigned char temp_binary_data_30[] =
"/*\r\n"
"  ==============================================================================\r\n"
"\r\n"
"    This file contains the basic framework code for a JUCE plugin processor.\r\n"
"\r\n"
"  ==============================================================================\r\n"
"*/\r\n"
"\r\n"
"%%filter_headers%%\r\n"
"\r\n"
"//==============================================================================\r\n"
"%%filter_class_name%%::%%filter_class_name%%()\r\n"
"#ifndef JucePlugin_PreferredChannelConfigurations\r\n"
"     : AudioProcessor (BusesProperties()\r\n"
"                     #if ! JucePlugin_IsMidiEffect\r\n"
"                      #if ! JucePlugin_IsSynth\r\n"
"                       .withInput  (\"Input\",  juce::AudioChannelSet::stereo(), true)\r\n"
"                      #endif\r\n"
"                       .withOutput (\"Output\", juce::AudioChannelSet::stereo(), true)\r\n"
"                     #endif\r\n"
"                       )\r\n"
"#endif\r\n"
"{\r\n"
"}\r\n"
"\r\n"
"%%filter_class_name%%::~%%filter_class_name%%()\r\n"
"{\r\n"
"}\r\n"
"\r\n"
"//==============================================================================\r\n"
"const juce::String %%filter_class_name%%::getName() const\r\n"
"{\r\n"
"    return JucePlugin_Name;\r\n"
"}\r\n"
"\r\n"
"bool %%filter_class_name%%::acceptsMidi() const\r\n"
"{\r\n"
"   #if JucePlugin_WantsMidiInput\r\n"
"    return true;\r\n"
"   #else\r\n"
"    return false;\r\n"
"   #endif\r\n"
"}\r\n"
"\r\n"
"bool %%filter_class_name%%::producesMidi() const\r\n"
"{\r\n"
"   #if JucePlugin_ProducesMidiOutput\r\n"
"    return true;\r\n"
"   #else\r\n"
"    return false;\r\n"
"   #endif\r\n"
"}\r\n"
"\r\n"
"bool %%filter_class_name%%::isMidiEffect() const\r\n"
"{\r\n"
"   #if JucePlugin_IsMidiEffect\r\n"
"    return true;\r\n"
"   #else\r\n"
"    return false;\r\n"
"   #endif\r\n"
"}\r\n"
"\r\n"
"double %%filter_class_name%%::getTailLengthSeconds() const\r\n"
"{\r\n"
"    return 0.0;\r\n"
"}\r\n"
"\r\n"
"int %%filter_class_name%%::getNumPrograms()\r\n"
"{\r\n"
"    return 1;   // NB: some hosts don't cope very well if you tell them there are 0 programs,\r\n"
"                // so this should be at least 1, even if you're not really implementing programs.\r\n"
"}\r\n"
"\r\n"
"int %%filter_class_name%%::getCurrentProgram()\r\n"
"{\r\n"
"    return 0;\r\n"
"}\r\n"
"\r\n"
"void %%filter_class_name%%::setCurrentProgram (int index)\r\n"
"{\r\n"
"}\r\n"
"\r\n"
"const juce::String %%filter_class_name%%::getProgramName (int index)\r\n"
"{\r\n"
"    return {};\r\n"
"}\r\n"
"\r\n"
"void %%filter_class_name%%::changeProgramName (int index, const juce::String& newName)\r\n"
"{\r\n"
"}\r\n"
"\r\n"
"//==============================================================================\r\n"
"void %%filter_class_name%%::prepareToPlay (double sampleRate, int samplesPerBlock)\r\n"
"{\r\n"
"    // Use this method as the place to do any pre-playback\r\n"
"    // initialisation that you need..\r\n"
"}\r\n"
"\r\n"
"void %%filter_class_name%%::releaseResources()\r\n"
"{\r\n"
"    // When playback stops, you can use this as an opportunity to free up any\r\n"
"    // spare memory, etc.\r\n"
"}\r\n"
"\r\n"
"#ifndef JucePlugin_PreferredChannelConfigurations\r\n"
"bool %%filter_class_name%%::isBusesLayoutSupported (const BusesLayout& layouts) const\r\n"
"{\r\n"
"  #if JucePlugin_IsMidiEffect\r\n"
"    juce::ignoreUnused (layouts);\r\n"
"    return true;\r\n"
"  #else\r\n"
"    // This is the place where you check if the layout is supported.\r\n"
"    // In this template code we only support mono or stereo.\r\n"
"    // Some plugin hosts, such as certain GarageBand versions, will only\r\n"
"    // load plugins that support stereo bus layouts.\r\n"
"    if (layouts.getMainOutputChannelSet() != juce::AudioChannelSet::mono()\r\n"
"     && layouts.getMainOutputChannelSet() != juce::AudioChannelSet::stereo())\r\n"
"        return false;\r\n"
"\r\n"
"    // This checks if the input layout matches the output layout\r\n"
"   #if ! JucePlugin_IsSynth\r\n"
"    if (layouts.getMainOutputChannelSet() != layouts.getMainInputChannelSet())\r\n"
"        return false;\r\n"
"   #endif\r\n"
"\r\n"
"    return true;\r\n"
"  #endif\r\n"
"}\r\n"
"#endif\r\n"
"\r\n"
"void %%filter_class_name%%::processBlock (juce::AudioBuffer<float>& buffer, juce::MidiBuffer& midiMessages)\r\n"
"{\r\n"
"    juce::ScopedNoDenormals noDenormals;\r\n"
"    auto totalNumInputChannels  = getTotalNumInputChannels();\r\n"
"    auto totalNumOutputChannels = getTotalNumOutputChannels();\r\n"
"\r\n"
"    // In case we have more outputs than inputs, this code clears any output\r\n"
"    // channels that didn't contain input data, (because these aren't\r\n"
"    // guaranteed to be empty - they may contain garbage).\r\n"
"    // This is here to avoid people getting screaming feedback\r\n"
"    // when they first compile a plugin, but obviously you don't need to keep\r\n"
"    // this code if your algorithm always overwrites all the output channels.\r\n"
"    for (auto i = totalNumInputChannels; i < totalNumOutputChannels; ++i)\r\n"
"        buffer.clear (i, 0, buffer.getNumSamples());\r\n"
"\r\n"
"    // This is the place where you'd normally do the guts of your plugin's\r\n"
"    // audio processing...\r\n"
"    // Make sure to reset the state if your inner loop is processing\r\n"
"    // the samples and the outer loop is handling the channels.\r\n"
"    // Alternatively, you can process the samples with the channels\r\n"
"    // interleaved by keeping the same state.\r\n"
"    for (int channel = 0; channel < totalNumInputChannels; ++channel)\r\n"
"    {\r\n"
"        auto* channelData = buffer.getWritePointer (channel);\r\n"
"\r\n"
"        // ..do something to the data...\r\n"
"    }\r\n"
"}\r\n"
"\r\n"
"//==============================================================================\r\n"
"bool %%filter_class_name%%::hasEditor() const\r\n"
"{\r\n"
"    return true; // (change this to false if you choose to not supply an editor)\r\n"
"}\r\n"
"\r\n"
"juce::AudioProcessorEditor* %%filter_class_name%%::createEditor()\r\n"
"{\r\n"
"    return new %%editor_class_name%% (*this);\r\n"
"}\r\n"
"\r\n"
"//==============================================================================\r\n"
"void %%filter_class_name%%::getStateInformation (juce::MemoryBlock& destData)\r\n"
"{\r\n"
"    // You should use this method to store your parameters in the memory block.\r\n"
"    // You could do that either as raw data, or use the XML or ValueTree classes\r\n"
"    // as intermediaries to make it easy to save and load complex data.\r\n"
"}\r\n"
"\r\n"
"void %%filter_class_name%%::setStateInformation (const void* data, int sizeInBytes)\r\n"
"{\r\n"
"    // You should use this method to restore your parameters from this memory block,\r\n"
"    // whose contents will have been created by the getStateInformation() call.\r\n"
"}\r\n"
"\r\n"
"//==============================================================================\r\n"
"// This creates new instances of the plugin..\r\n"
"juce::AudioProcessor* JUCE_CALLTYPE createPluginFilter()\r\n"
"{\r\n"
"    return new %%filter_class_name%%();\r\n"
"}\r\n";

const char* jucer_AudioPluginFilterTemplate_cpp = (const char*) temp_binary_data_30;
}
