From dc4291c1a7685be21a260cc6287eac13a4f09229 Mon Sep 17 00:00:00 2001 From: Persson-dev Date: Sun, 26 Feb 2023 19:39:16 +0100 Subject: [PATCH] first commit --- .gitignore | 3 + CustomDrums.jucer | 56 ++++++++++++++ Source/PluginEditor.cpp | 40 ++++++++++ Source/PluginEditor.h | 33 ++++++++ Source/PluginProcessor.cpp | 154 +++++++++++++++++++++++++++++++++++++ Source/PluginProcessor.h | 57 ++++++++++++++ 6 files changed, 343 insertions(+) create mode 100644 .gitignore create mode 100644 CustomDrums.jucer create mode 100644 Source/PluginEditor.cpp create mode 100644 Source/PluginEditor.h create mode 100644 Source/PluginProcessor.cpp create mode 100644 Source/PluginProcessor.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1fd213f --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +Builds + +JuceLibraryCode \ No newline at end of file diff --git a/CustomDrums.jucer b/CustomDrums.jucer new file mode 100644 index 0000000..c97146c --- /dev/null +++ b/CustomDrums.jucer @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/PluginEditor.cpp b/Source/PluginEditor.cpp new file mode 100644 index 0000000..55e30fe --- /dev/null +++ b/Source/PluginEditor.cpp @@ -0,0 +1,40 @@ +/* + ============================================================================== + + This file contains the basic framework code for a JUCE plugin editor. + + ============================================================================== +*/ + +#include "PluginProcessor.h" +#include "PluginEditor.h" + +//============================================================================== +CustomDrumsAudioProcessorEditor::CustomDrumsAudioProcessorEditor (CustomDrumsAudioProcessor& p) + : AudioProcessorEditor (&p), audioProcessor (p) +{ + // Make sure that before the constructor has finished, you've set the + // editor's size to whatever you need it to be. + setSize (400, 300); +} + +CustomDrumsAudioProcessorEditor::~CustomDrumsAudioProcessorEditor() +{ +} + +//============================================================================== +void CustomDrumsAudioProcessorEditor::paint (juce::Graphics& g) +{ + // (Our component is opaque, so we must completely fill the background with a solid colour) + g.fillAll (getLookAndFeel().findColour (juce::ResizableWindow::backgroundColourId)); + + g.setColour (juce::Colours::white); + g.setFont (15.0f); + g.drawFittedText ("Hello World!", getLocalBounds(), juce::Justification::centred, 1); +} + +void CustomDrumsAudioProcessorEditor::resized() +{ + // This is generally where you'll want to lay out the positions of any + // subcomponents in your editor.. +} diff --git a/Source/PluginEditor.h b/Source/PluginEditor.h new file mode 100644 index 0000000..4c2877f --- /dev/null +++ b/Source/PluginEditor.h @@ -0,0 +1,33 @@ +/* + ============================================================================== + + This file contains the basic framework code for a JUCE plugin editor. + + ============================================================================== +*/ + +#pragma once + +#include +#include "PluginProcessor.h" + +//============================================================================== +/** +*/ +class CustomDrumsAudioProcessorEditor : public juce::AudioProcessorEditor +{ +public: + CustomDrumsAudioProcessorEditor (CustomDrumsAudioProcessor&); + ~CustomDrumsAudioProcessorEditor() override; + + //============================================================================== + void paint (juce::Graphics&) override; + void resized() override; + +private: + // This reference is provided as a quick way for your editor to + // access the processor object that created it. + CustomDrumsAudioProcessor& audioProcessor; + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CustomDrumsAudioProcessorEditor) +}; diff --git a/Source/PluginProcessor.cpp b/Source/PluginProcessor.cpp new file mode 100644 index 0000000..83a8978 --- /dev/null +++ b/Source/PluginProcessor.cpp @@ -0,0 +1,154 @@ +/* + ============================================================================== + + This file contains the basic framework code for a JUCE plugin processor. + + ============================================================================== +*/ + +#include "PluginProcessor.h" +#include "PluginEditor.h" + +#include + +//============================================================================== +CustomDrumsAudioProcessor::CustomDrumsAudioProcessor() + : AudioProcessor(BusesProperties() + .withOutput("Output", juce::AudioChannelSet::stereo(), true) + ) +{ +} + +CustomDrumsAudioProcessor::~CustomDrumsAudioProcessor() +{ +} + +//============================================================================== +const juce::String CustomDrumsAudioProcessor::getName() const +{ + return JucePlugin_Name; +} + +bool CustomDrumsAudioProcessor::acceptsMidi() const +{ + return true; +} + +bool CustomDrumsAudioProcessor::producesMidi() const +{ + return true; +} + +bool CustomDrumsAudioProcessor::isMidiEffect() const +{ + return true; +} + +double CustomDrumsAudioProcessor::getTailLengthSeconds() const +{ + return 0.0; +} + +int CustomDrumsAudioProcessor::getNumPrograms() +{ + return 1; // NB: some hosts don't cope very well if you tell them there are 0 programs, + // so this should be at least 1, even if you're not really implementing programs. +} + +int CustomDrumsAudioProcessor::getCurrentProgram() +{ + return 0; +} + +void CustomDrumsAudioProcessor::setCurrentProgram(int index) +{ +} + +const juce::String CustomDrumsAudioProcessor::getProgramName(int index) +{ + return {}; +} + +void CustomDrumsAudioProcessor::changeProgramName(int index, const juce::String& newName) +{ +} + +//============================================================================== +void CustomDrumsAudioProcessor::prepareToPlay(double sampleRate, int samplesPerBlock) +{ + // Use this method as the place to do any pre-playback + // initialisation that you need.. +} + +void CustomDrumsAudioProcessor::releaseResources() +{ + // When playback stops, you can use this as an opportunity to free up any + // spare memory, etc. +} + +bool CustomDrumsAudioProcessor::isBusesLayoutSupported(const BusesLayout& layouts) const +{ + juce::ignoreUnused(layouts); + return true; +} + +void CustomDrumsAudioProcessor::processBlock(juce::AudioBuffer& buffer, juce::MidiBuffer& midiMessages) +{ + juce::ScopedNoDenormals noDenormals; + auto totalNumInputChannels = getTotalNumInputChannels(); + auto totalNumOutputChannels = getTotalNumOutputChannels(); + + buffer.clear(); + + juce::MidiBuffer processedMidi; + + for (const auto metadata : midiMessages) + { + auto message = metadata.getMessage(); + const auto time = metadata.samplePosition; + + if (message.isNoteOn()) + { + + const int firstNote = 24; + + std::cout << "Processed Input ! " << message.getChannel() << " " << abs(message.getNoteNumber() - 24) << std::endl; + } + + processedMidi.addEvent(message, time); + } + + midiMessages.swapWith(processedMidi); +} + +//============================================================================== +bool CustomDrumsAudioProcessor::hasEditor() const +{ + return true; // (change this to false if you choose to not supply an editor) +} + +juce::AudioProcessorEditor* CustomDrumsAudioProcessor::createEditor() +{ + return new CustomDrumsAudioProcessorEditor(*this); +} + +//============================================================================== +void CustomDrumsAudioProcessor::getStateInformation(juce::MemoryBlock& destData) +{ + // You should use this method to store your parameters in the memory block. + // You could do that either as raw data, or use the XML or ValueTree classes + // as intermediaries to make it easy to save and load complex data. +} + +void CustomDrumsAudioProcessor::setStateInformation(const void* data, int sizeInBytes) +{ + // You should use this method to restore your parameters from this memory block, + // whose contents will have been created by the getStateInformation() call. +} + +//============================================================================== +// This creates new instances of the plugin.. +juce::AudioProcessor* JUCE_CALLTYPE createPluginFilter() +{ + return new CustomDrumsAudioProcessor(); +} diff --git a/Source/PluginProcessor.h b/Source/PluginProcessor.h new file mode 100644 index 0000000..7c4f73c --- /dev/null +++ b/Source/PluginProcessor.h @@ -0,0 +1,57 @@ +/* + ============================================================================== + + This file contains the basic framework code for a JUCE plugin processor. + + ============================================================================== +*/ + +#pragma once + +#include + +//============================================================================== +/** +*/ +class CustomDrumsAudioProcessor : public juce::AudioProcessor +{ +public: + //============================================================================== + CustomDrumsAudioProcessor(); + ~CustomDrumsAudioProcessor() override; + + //============================================================================== + void prepareToPlay (double sampleRate, int samplesPerBlock) override; + void releaseResources() override; + + bool isBusesLayoutSupported (const BusesLayout& layouts) const override; + + void processBlock (juce::AudioBuffer&, juce::MidiBuffer&) override; + + //============================================================================== + juce::AudioProcessorEditor* createEditor() override; + bool hasEditor() const override; + + //============================================================================== + const juce::String getName() const override; + + bool acceptsMidi() const override; + bool producesMidi() const override; + bool isMidiEffect() const override; + double getTailLengthSeconds() const override; + + //============================================================================== + int getNumPrograms() override; + int getCurrentProgram() override; + void setCurrentProgram (int index) override; + const juce::String getProgramName (int index) override; + void changeProgramName (int index, const juce::String& newName) override; + + //============================================================================== + void getStateInformation (juce::MemoryBlock& destData) override; + void setStateInformation (const void* data, int sizeInBytes) override; + +private: + //============================================================================== + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CustomDrumsAudioProcessor) +};