gearmulator

Emulation of classic VA synths of the late 90s/2000s that are based on Motorola 56300 family DSPs
Log | Files | Refs | Submodules | README | LICENSE

commit daeab22eb26f1fc3d82c54f582f2590d8f8353fa
parent e8d79d02c29ef8284b55dc41bb9cdbca31dd8c12
Author: Tal Aviram <me@talaviram.com>
Date:   Fri, 23 Jul 2021 13:32:56 +0300

controller - created controller for the virus. empty

Diffstat:
Msource/jucePlugin/CMakeLists.txt | 2++
Msource/jucePlugin/PluginProcessor.cpp | 28+++++++++++++++++-----------
Msource/jucePlugin/PluginProcessor.h | 7+++++--
Asource/jucePlugin/VirusController.cpp | 18++++++++++++++++++
Asource/jucePlugin/VirusController.h | 22++++++++++++++++++++++
5 files changed, 64 insertions(+), 13 deletions(-)

diff --git a/source/jucePlugin/CMakeLists.txt b/source/jucePlugin/CMakeLists.txt @@ -31,8 +31,10 @@ target_sources(jucePlugin PRIVATE PluginEditor.cpp PluginProcessor.cpp + VirusController.cpp PluginEditor.h PluginProcessor.h + VirusController.h version.h ) diff --git a/source/jucePlugin/PluginProcessor.cpp b/source/jucePlugin/PluginProcessor.cpp @@ -4,13 +4,11 @@ #include "../synthLib/os.h" //============================================================================== -AudioPluginAudioProcessor::AudioPluginAudioProcessor() - : AudioProcessor (BusesProperties() - .withInput ("Input", juce::AudioChannelSet::stereo(), true) - .withOutput ("Output", juce::AudioChannelSet::stereo(), true) - ) - , m_device(synthLib::findROM()) - , m_plugin(&m_device) +AudioPluginAudioProcessor::AudioPluginAudioProcessor() : + AudioProcessor(BusesProperties() + .withInput("Input", juce::AudioChannelSet::stereo(), true) + .withOutput("Output", juce::AudioChannelSet::stereo(), true)), + m_device(synthLib::findROM()), m_plugin(&m_device) { } @@ -88,6 +86,12 @@ void AudioPluginAudioProcessor::prepareToPlay (double sampleRate, int samplesPer { // Use this method as the place to do any pre-playback // initialisation that you need.. + if (m_controller == nullptr) + { + // initialize controller if not exists. + // assures PluginProcessor is fully constructed! + m_controller = std::make_unique<Virus::Controller>(*this); + } m_plugin.setSamplerate(static_cast<float>(sampleRate)); m_plugin.setBlockSize(samplesPerBlock); @@ -201,10 +205,12 @@ void AudioPluginAudioProcessor::processBlock (juce::AudioBuffer<float>& buffer, m_midiOut.clear(); m_plugin.getMidiOut(m_midiOut); + if (m_midiOut.size() > 0) + m_controller->dispatchVirusOut(m_midiOut); - for(size_t i=0; i<m_midiOut.size(); ++i) - { - const auto& e = m_midiOut[i]; + for (size_t i = 0; i < m_midiOut.size(); ++i) + { + const auto& e = m_midiOut[i]; if(e.sysex.empty()) { midiMessages.addEvent(juce::MidiMessage (e.a, e.b, e.c, 0.0), 0); @@ -213,7 +219,7 @@ void AudioPluginAudioProcessor::processBlock (juce::AudioBuffer<float>& buffer, { midiMessages.addEvent(juce::MidiMessage (&e.sysex[0], static_cast<int>(e.sysex.size()), 0.0), 0); } - } + } } //============================================================================== diff --git a/source/jucePlugin/PluginProcessor.h b/source/jucePlugin/PluginProcessor.h @@ -4,6 +4,7 @@ #include "../synthLib/plugin.h" #include "../virusLib/device.h" +#include "VirusController.h" //============================================================================== class AudioPluginAudioProcessor : public juce::AudioProcessor @@ -57,8 +58,10 @@ public: // _____________ // private: - void setState(const void* _data, size_t _sizeInBytes); - + std::unique_ptr<Virus::Controller> m_controller; + + void setState(const void *_data, size_t _sizeInBytes); + //============================================================================== JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AudioPluginAudioProcessor) diff --git a/source/jucePlugin/VirusController.cpp b/source/jucePlugin/VirusController.cpp @@ -0,0 +1,18 @@ +#include "VirusController.h" +#include "PluginProcessor.h" + +namespace Virus +{ + Controller::Controller(AudioPluginAudioProcessor &p, unsigned char deviceId) : m_processor(p), m_deviceId(deviceId) + { + } + + void Controller::dispatchVirusOut(const std::vector<synthLib::SMidiEvent> &newData) + { + m_virusOut = newData; + for (auto msg : m_virusOut) + { + // parse here + } + } +}; // namespace Virus diff --git a/source/jucePlugin/VirusController.h b/source/jucePlugin/VirusController.h @@ -0,0 +1,22 @@ +#pragma once + +#include "../synthLib/plugin.h" + +class AudioPluginAudioProcessor; + +namespace Virus +{ + class Controller + { + public: + Controller(AudioPluginAudioProcessor &, unsigned char deviceId = 0x00); + + // this is called by the plug-in on audio thread! + void dispatchVirusOut(const std::vector<synthLib::SMidiEvent> &); + + private: + AudioPluginAudioProcessor &m_processor; + std::vector<synthLib::SMidiEvent> m_virusOut; + unsigned char m_deviceId; + }; +}; // namespace Virus