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:
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