|
@ -1,4 +1,4 @@
|
||||||
OB-Xd 2.0 default MIDI CC controller table.
|
OB-Xd default MIDI CC controller table.
|
||||||
Modify by clicking LEARN button, moving a GUI element and then sending MIDI CC data.
|
Modify by clicking LEARN button, moving a GUI element and then sending MIDI CC data.
|
||||||
All values can be reset using CLEAN button.
|
All values can be reset using CLEAN button.
|
||||||
|
|
||||||
|
@ -45,13 +45,13 @@ CC# CONTROL
|
||||||
104 MULTIMODE
|
104 MULTIMODE
|
||||||
102 NOISEMIX
|
102 NOISEMIX
|
||||||
17 OCTAVE
|
17 OCTAVE
|
||||||
100 OSC1MIX
|
77 OSC1MIX
|
||||||
54 OSC1P
|
54 OSC1P
|
||||||
58 OSC1Pul
|
58 OSC1Pul
|
||||||
57 OSC1Saw
|
57 OSC1Saw
|
||||||
43 OSC2_DET
|
43 OSC2_DET
|
||||||
52 OSC2HS
|
52 OSC2HS
|
||||||
101 OSC2MIX
|
78 OSC2MIX
|
||||||
55 OSC2P
|
55 OSC2P
|
||||||
60 OSC2Pul
|
60 OSC2Pul
|
||||||
59 OSC2Saw
|
59 OSC2Saw
|
||||||
|
|
Before Width: | Height: | Size: 159 KiB After Width: | Height: | Size: 242 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 115 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 9.2 KiB |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 9 KiB |
|
@ -25,7 +25,7 @@
|
||||||
#include "ObxdVoice.h"
|
#include "ObxdVoice.h"
|
||||||
enum ObxdParameters
|
enum ObxdParameters
|
||||||
{
|
{
|
||||||
UNDEFINED = 0,
|
UNDEFINED,
|
||||||
MIDILEARN,
|
MIDILEARN,
|
||||||
VOLUME,
|
VOLUME,
|
||||||
VOICE_COUNT,
|
VOICE_COUNT,
|
||||||
|
|
|
@ -159,10 +159,10 @@ public:
|
||||||
midicc = 63;
|
midicc = 63;
|
||||||
controllers[midicc] = controllers_default[midicc] = ENVPITCH;
|
controllers[midicc] = controllers_default[midicc] = ENVPITCH;
|
||||||
|
|
||||||
midicc = 100;
|
midicc = 77;
|
||||||
controllers[midicc] = controllers_default[midicc] = OSC1MIX;
|
controllers[midicc] = controllers_default[midicc] = OSC1MIX;
|
||||||
|
|
||||||
midicc = 101;
|
midicc = 78;
|
||||||
controllers[midicc] = controllers_default[midicc] = OSC2MIX;
|
controllers[midicc] = controllers_default[midicc] = OSC2MIX;
|
||||||
|
|
||||||
midicc = 102;
|
midicc = 102;
|
||||||
|
@ -304,5 +304,16 @@ public:
|
||||||
|
|
||||||
controllers[i] = tmp;
|
controllers[i] = tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Backward keys
|
||||||
|
if (controllers[100] > 0) {
|
||||||
|
controllers[77] = controllers_default[77];
|
||||||
|
controllers[100] = 0;
|
||||||
|
}
|
||||||
|
if ( controllers[101] > 0) {
|
||||||
|
controllers[78] = controllers_default[78];
|
||||||
|
controllers[101] = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -68,7 +68,7 @@ public:
|
||||||
float val = parameter->getValue();
|
float val = parameter->getValue();
|
||||||
//sliderToControl->setValue(parameter->convertFrom0to1(val0to1));
|
//sliderToControl->setValue(parameter->convertFrom0to1(val0to1));
|
||||||
sliderToControl->setValue(val, NotificationType::dontSendNotification);
|
sliderToControl->setValue(val, NotificationType::dontSendNotification);
|
||||||
DBG(" Slider: " << sliderToControl->getName() << " " << sliderToControl->getValue() << " Parameter: "<< " " << parameter->getValue());
|
DBG(" Slider: " << parameter->name << " " << sliderToControl->getValue() << " Parameter: "<< " " << parameter->getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ~KnobAttachment() = default;
|
virtual ~KnobAttachment() = default;
|
||||||
|
|
|
@ -31,7 +31,7 @@ public:
|
||||||
{
|
{
|
||||||
//this->setImages
|
//this->setImages
|
||||||
kni = k;
|
kni = k;
|
||||||
toogled = false;
|
//toogled = false;
|
||||||
width = kni.getWidth();
|
width = kni.getWidth();
|
||||||
height = kni.getHeight();
|
height = kni.getHeight();
|
||||||
w2 = width;
|
w2 = width;
|
||||||
|
@ -53,7 +53,7 @@ public:
|
||||||
TooglableButton& buttonToControl) : AudioProcessorValueTreeState::ButtonAttachment (stateToControl, parameterID, buttonToControl), buttonToControl(&buttonToControl)
|
TooglableButton& buttonToControl) : AudioProcessorValueTreeState::ButtonAttachment (stateToControl, parameterID, buttonToControl), buttonToControl(&buttonToControl)
|
||||||
{
|
{
|
||||||
parameter = stateToControl.getParameter (parameterID);
|
parameter = stateToControl.getParameter (parameterID);
|
||||||
buttonToControl.setParameter (parameter);
|
//buttonToControl.setParameter (parameter);
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
ToggleAttachment (juce::AudioProcessorValueTreeState& stateToControl,
|
ToggleAttachment (juce::AudioProcessorValueTreeState& stateToControl,
|
||||||
|
@ -64,11 +64,12 @@ public:
|
||||||
void updateToSlider(){
|
void updateToSlider(){
|
||||||
float val = parameter->getValue();
|
float val = parameter->getValue();
|
||||||
//buttonToControl->setValue(parameter->convertFrom0to1(val0to1), NotificationType::dontSendNotification);
|
//buttonToControl->setValue(parameter->convertFrom0to1(val0to1), NotificationType::dontSendNotification);
|
||||||
buttonToControl->setValue(val, NotificationType::dontSendNotification);
|
DBG("Toggle Parameter: " << parameter->name << " Val: " << val);
|
||||||
|
buttonToControl->setToggleState(val, NotificationType::dontSendNotification);
|
||||||
}
|
}
|
||||||
virtual ~ToggleAttachment() = default;
|
virtual ~ToggleAttachment() = default;
|
||||||
};
|
};
|
||||||
|
/*
|
||||||
void setParameter (const AudioProcessorParameter* p)
|
void setParameter (const AudioProcessorParameter* p)
|
||||||
{
|
{
|
||||||
if (parameter == p)
|
if (parameter == p)
|
||||||
|
@ -76,8 +77,8 @@ public:
|
||||||
|
|
||||||
parameter = p;
|
parameter = p;
|
||||||
repaint();
|
repaint();
|
||||||
}
|
}*/
|
||||||
|
/*
|
||||||
void clicked() override
|
void clicked() override
|
||||||
{
|
{
|
||||||
toogled = ! toogled;
|
toogled = ! toogled;
|
||||||
|
@ -89,20 +90,21 @@ public:
|
||||||
//this->setColour(DrawableButton::ColourIds::backgroundColourId,Colours::lightpink);
|
//this->setColour(DrawableButton::ColourIds::backgroundColourId,Colours::lightpink);
|
||||||
Button::clicked();
|
Button::clicked();
|
||||||
|
|
||||||
};
|
};*/
|
||||||
|
|
||||||
void paintButton (Graphics& g, bool isMouseOverButton, bool isButtonDown) override
|
void paintButton (Graphics& g, bool isMouseOverButton, bool isButtonDown) override
|
||||||
{
|
{
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
|
|
||||||
if (toogled)
|
//if (toogled)
|
||||||
|
if (getToggleState())
|
||||||
{
|
{
|
||||||
offset = 1;
|
offset = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
g.drawImage(kni, 0, 0, getWidth(), getHeight(), 0, offset * h2, w2, h2);
|
g.drawImage(kni, 0, 0, getWidth(), getHeight(), 0, offset * h2, w2, h2);
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
void setValue (float state, int notify)
|
void setValue (float state, int notify)
|
||||||
{
|
{
|
||||||
if (state > 0.5)
|
if (state > 0.5)
|
||||||
|
@ -110,23 +112,23 @@ public:
|
||||||
else toogled = false;
|
else toogled = false;
|
||||||
|
|
||||||
repaint();
|
repaint();
|
||||||
}
|
}*/
|
||||||
|
|
||||||
float getValue()
|
/*float getValue()
|
||||||
{
|
{
|
||||||
if (toogled)
|
if (toogled)
|
||||||
return 1;
|
return 1;
|
||||||
else return 0;
|
else return 0;
|
||||||
}
|
}*/
|
||||||
//void paint(Graphics& g)
|
//void paint(Graphics& g)
|
||||||
//{
|
//{
|
||||||
// g.drawImageTransformed(kni,AffineTransform::rotation(((getValue() - getMinimum())/(getMaximum() - getMinimum()))*float_Pi - float_Pi*2));
|
// g.drawImageTransformed(kni,AffineTransform::rotation(((getValue() - getMinimum())/(getMaximum() - getMinimum()))*float_Pi - float_Pi*2));
|
||||||
//}
|
//}
|
||||||
|
|
||||||
bool toogled;
|
//bool toogled;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Image kni;
|
Image kni;
|
||||||
int width, height, w2, h2;
|
int width, height, w2, h2;
|
||||||
const AudioProcessorParameter* parameter {nullptr};
|
//const AudioProcessorParameter* parameter;
|
||||||
};
|
};
|
||||||
|
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 27 KiB |
|
@ -25,6 +25,8 @@ ObxdAudioProcessorEditor::ObxdAudioProcessorEditor (ObxdAudioProcessor& ownerFil
|
||||||
// skinFolder = ownerFilter.getCurrentSkinFolder(); // initialized above
|
// skinFolder = ownerFilter.getCurrentSkinFolder(); // initialized above
|
||||||
loadSkin (processor);
|
loadSkin (processor);
|
||||||
repaint();
|
repaint();
|
||||||
|
|
||||||
|
updateFromHost();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ObxdAudioProcessorEditor::loadSkin (ObxdAudioProcessor& ownerFilter)
|
void ObxdAudioProcessorEditor::loadSkin (ObxdAudioProcessor& ownerFilter)
|
||||||
|
@ -155,7 +157,7 @@ void ObxdAudioProcessorEditor::loadSkin (ObxdAudioProcessor& ownerFilter)
|
||||||
|
|
||||||
if (name == "voiceSwitch"){
|
if (name == "voiceSwitch"){
|
||||||
//if (voiceSwitch) voiceSwitch->setVisible(false);
|
//if (voiceSwitch) voiceSwitch->setVisible(false);
|
||||||
#if JUCE_WIN || JUCE_LINUX
|
#if JUCE_WINDOWS || JUCE_LINUX
|
||||||
voiceSwitch = addList (x, y, w, h, ownerFilter, VOICE_COUNT, "VoiceCount", ImageCache::getFromFile(skinFolder.getChildFile("voices.png"))); }
|
voiceSwitch = addList (x, y, w, h, ownerFilter, VOICE_COUNT, "VoiceCount", ImageCache::getFromFile(skinFolder.getChildFile("voices.png"))); }
|
||||||
#else
|
#else
|
||||||
voiceSwitch = addList (x, y, w, h, ownerFilter, VOICE_COUNT, "VoiceCount", ImageCache::getFromFile(skinFolder.getChildFile("voices@2x.png"))); }
|
voiceSwitch = addList (x, y, w, h, ownerFilter, VOICE_COUNT, "VoiceCount", ImageCache::getFromFile(skinFolder.getChildFile("voices@2x.png"))); }
|
||||||
|
@ -163,7 +165,7 @@ void ObxdAudioProcessorEditor::loadSkin (ObxdAudioProcessor& ownerFilter)
|
||||||
|
|
||||||
if (name == "legatoSwitch"){
|
if (name == "legatoSwitch"){
|
||||||
//if (legatoSwitch) legatoSwitch->setVisible(false);
|
//if (legatoSwitch) legatoSwitch->setVisible(false);
|
||||||
#if JUCE_WIN || JUCE_LINUX
|
#if JUCE_WINDOWS || JUCE_LINUX
|
||||||
legatoSwitch = addList (x, y, w, h, ownerFilter, LEGATOMODE, "Legato", ImageCache::getFromFile(skinFolder.getChildFile("legato.png"))); }
|
legatoSwitch = addList (x, y, w, h, ownerFilter, LEGATOMODE, "Legato", ImageCache::getFromFile(skinFolder.getChildFile("legato.png"))); }
|
||||||
#else
|
#else
|
||||||
legatoSwitch = addList (x, y, w, h, ownerFilter, LEGATOMODE, "Legato", ImageCache::getFromFile(skinFolder.getChildFile("legato@2x.png"))); }
|
legatoSwitch = addList (x, y, w, h, ownerFilter, LEGATOMODE, "Legato", ImageCache::getFromFile(skinFolder.getChildFile("legato@2x.png"))); }
|
||||||
|
@ -173,7 +175,11 @@ void ObxdAudioProcessorEditor::loadSkin (ObxdAudioProcessor& ownerFilter)
|
||||||
if (name == "menu")
|
if (name == "menu")
|
||||||
{
|
{
|
||||||
addMenuButton (x, y, d,
|
addMenuButton (x, y, d,
|
||||||
|
#if JUCE_WINDOWS || JUCE_LINUX
|
||||||
ImageCache::getFromFile (skinFolder.getChildFile ("menu.png")));
|
ImageCache::getFromFile (skinFolder.getChildFile ("menu.png")));
|
||||||
|
#else
|
||||||
|
ImageCache::getFromFile (skinFolder.getChildFile ("menu@2x.png")));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//DBG(" Name: " << name << " X: " <<x <<" Y: "<<y);
|
//DBG(" Name: " << name << " X: " <<x <<" Y: "<<y);
|
||||||
|
@ -226,7 +232,12 @@ void ObxdAudioProcessorEditor::placeLabel (int x, int y, String text)
|
||||||
|
|
||||||
ButtonList* ObxdAudioProcessorEditor::addList (int x, int y, int width, int height, ObxdAudioProcessor& filter, int parameter, String /*name*/, Image img)
|
ButtonList* ObxdAudioProcessorEditor::addList (int x, int y, int width, int height, ObxdAudioProcessor& filter, int parameter, String /*name*/, Image img)
|
||||||
{
|
{
|
||||||
ButtonList *bl = new ButtonList (img, height*2);
|
#if JUCE_WINDOWS || JUCE_LINUX
|
||||||
|
ButtonList *bl = new ButtonList (img, height);
|
||||||
|
#else
|
||||||
|
ButtonList *bl = new ButtonList (img, height*2);
|
||||||
|
#endif
|
||||||
|
|
||||||
buttonListAttachments.add (new ButtonList::ButtonListAttachment (filter.getPluginState(),
|
buttonListAttachments.add (new ButtonList::ButtonListAttachment (filter.getPluginState(),
|
||||||
filter.getEngineParameterId (parameter),
|
filter.getEngineParameterId (parameter),
|
||||||
*bl));
|
*bl));
|
||||||
|
@ -240,7 +251,7 @@ ButtonList* ObxdAudioProcessorEditor::addList (int x, int y, int width, int heig
|
||||||
|
|
||||||
Knob* ObxdAudioProcessorEditor::addKnob (int x, int y, int d, ObxdAudioProcessor& filter, int parameter, String /*name*/, float defval)
|
Knob* ObxdAudioProcessorEditor::addKnob (int x, int y, int d, ObxdAudioProcessor& filter, int parameter, String /*name*/, float defval)
|
||||||
{
|
{
|
||||||
#if JUCE_WIN || JUCE_LINUX
|
#if JUCE_WINDOWS || JUCE_LINUX
|
||||||
Knob* knob = new Knob (ImageCache::getFromFile(skinFolder.getChildFile("knob.png")), 48);
|
Knob* knob = new Knob (ImageCache::getFromFile(skinFolder.getChildFile("knob.png")), 48);
|
||||||
#else
|
#else
|
||||||
Knob* knob = new Knob (ImageCache::getFromFile(skinFolder.getChildFile("knob@2x.png")), 96);
|
Knob* knob = new Knob (ImageCache::getFromFile(skinFolder.getChildFile("knob@2x.png")), 96);
|
||||||
|
@ -270,21 +281,23 @@ void ObxdAudioProcessorEditor::clean()
|
||||||
|
|
||||||
TooglableButton* ObxdAudioProcessorEditor::addButton (int x, int y, int w, int h, ObxdAudioProcessor& filter, int parameter, String name)
|
TooglableButton* ObxdAudioProcessorEditor::addButton (int x, int y, int w, int h, ObxdAudioProcessor& filter, int parameter, String name)
|
||||||
{
|
{
|
||||||
#if JUCE_WIN || JUCE_LINUX
|
#if JUCE_WINDOWS || JUCE_LINUX
|
||||||
TooglableButton* button = new TooglableButton (ImageCache::getFromFile(skinFolder.getChildFile("button.png")));
|
TooglableButton* button = new TooglableButton (ImageCache::getFromFile(skinFolder.getChildFile("button.png")));
|
||||||
#else
|
#else
|
||||||
TooglableButton* button = new TooglableButton (ImageCache::getFromFile(skinFolder.getChildFile("button@2x.png")));
|
TooglableButton* button = new TooglableButton (ImageCache::getFromFile(skinFolder.getChildFile("button@2x.png")));
|
||||||
#endif
|
#endif
|
||||||
|
if (parameter != UNLEARN){
|
||||||
toggleAttachments.add (new TooglableButton::ToggleAttachment (filter.getPluginState(),
|
toggleAttachments.add (new AudioProcessorValueTreeState::ButtonAttachment (filter.getPluginState(),
|
||||||
filter.getEngineParameterId (parameter),
|
filter.getEngineParameterId (parameter),
|
||||||
*button));
|
*button));
|
||||||
|
} else {
|
||||||
|
button->addListener(this);
|
||||||
|
}
|
||||||
button->setBounds (x, y, w, h);
|
button->setBounds (x, y, w, h);
|
||||||
button->setButtonText (name);
|
button->setButtonText (name);
|
||||||
button->setValue (filter.getPluginState().getParameter (filter.getEngineParameterId (parameter))->getValue(),
|
button->setToggleState(filter.getPluginState().getParameter (filter.getEngineParameterId (parameter))->getValue(),
|
||||||
dontSendNotification);
|
dontSendNotification);
|
||||||
button->addListener(this);
|
|
||||||
addAndMakeVisible (button);
|
addAndMakeVisible (button);
|
||||||
|
|
||||||
return button;
|
return button;
|
||||||
|
@ -442,7 +455,7 @@ void ObxdAudioProcessorEditor::buttonClicked (Button* b)
|
||||||
|
|
||||||
auto toggleButton = dynamic_cast<TooglableButton*> (b);
|
auto toggleButton = dynamic_cast<TooglableButton*> (b);
|
||||||
if (toggleButton == midiUnlearnButton){
|
if (toggleButton == midiUnlearnButton){
|
||||||
if (midiUnlearnButton->toogled){
|
if (midiUnlearnButton->getToggleState()){
|
||||||
processor.getMidiMap().reset();
|
processor.getMidiMap().reset();
|
||||||
processor.getMidiMap().set_default();
|
processor.getMidiMap().set_default();
|
||||||
processor.sendChangeMessage();
|
processor.sendChangeMessage();
|
||||||
|
@ -452,18 +465,17 @@ void ObxdAudioProcessorEditor::buttonClicked (Button* b)
|
||||||
}
|
}
|
||||||
|
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
void ObxdAudioProcessorEditor::changeListenerCallback (ChangeBroadcaster* source)
|
|
||||||
{
|
|
||||||
|
|
||||||
|
void ObxdAudioProcessorEditor::updateFromHost() {
|
||||||
for (int i = 0; i < knobAttachments.size(); ++i)
|
for (int i = 0; i < knobAttachments.size(); ++i)
|
||||||
{
|
{
|
||||||
knobAttachments[i]->updateToSlider();
|
knobAttachments[i]->updateToSlider();
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
for (int i = 0; i < toggleAttachments.size(); ++i)
|
for (int i = 0; i < toggleAttachments.size(); ++i)
|
||||||
{
|
{
|
||||||
toggleAttachments[i]->updateToSlider();
|
toggleAttachments[i]->updateToSlider();
|
||||||
}
|
}*/
|
||||||
|
|
||||||
for (int i = 0; i < buttonListAttachments.size(); ++i)
|
for (int i = 0; i < buttonListAttachments.size(); ++i)
|
||||||
{
|
{
|
||||||
|
@ -471,10 +483,16 @@ void ObxdAudioProcessorEditor::changeListenerCallback (ChangeBroadcaster* source
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set to unlearn to false
|
// Set to unlearn to false
|
||||||
midiUnlearnButton->setValue(0.0, false);
|
if ( midiUnlearnButton->getToggleState()) {
|
||||||
|
midiUnlearnButton->setToggleState(false, NotificationType:: sendNotification);
|
||||||
|
}
|
||||||
|
|
||||||
repaint();
|
repaint();
|
||||||
}
|
}
|
||||||
|
void ObxdAudioProcessorEditor::changeListenerCallback (ChangeBroadcaster* source)
|
||||||
|
{
|
||||||
|
updateFromHost();
|
||||||
|
}
|
||||||
|
|
||||||
void ObxdAudioProcessorEditor::mouseUp (const MouseEvent& e)
|
void ObxdAudioProcessorEditor::mouseUp (const MouseEvent& e)
|
||||||
{
|
{
|
||||||
|
@ -487,7 +505,7 @@ void ObxdAudioProcessorEditor::mouseUp (const MouseEvent& e)
|
||||||
void ObxdAudioProcessorEditor::paint(Graphics& g)
|
void ObxdAudioProcessorEditor::paint(Graphics& g)
|
||||||
{
|
{
|
||||||
g.fillAll (Colours::black);
|
g.fillAll (Colours::black);
|
||||||
#if JUCE_WIN || JUCE_LINUX
|
#if JUCE_WINDOWS || JUCE_LINUX
|
||||||
const File mainFile(skinFolder.getChildFile("main.png"));
|
const File mainFile(skinFolder.getChildFile("main.png"));
|
||||||
#else
|
#else
|
||||||
const File mainFile(skinFolder.getChildFile("main@2x.png"));
|
const File mainFile(skinFolder.getChildFile("main@2x.png"));
|
||||||
|
@ -498,7 +516,7 @@ void ObxdAudioProcessorEditor::paint(Graphics& g)
|
||||||
|
|
||||||
const Image image = ImageCache::getFromFile(mainFile);
|
const Image image = ImageCache::getFromFile(mainFile);
|
||||||
|
|
||||||
#if JUCE_WIN || JUCE_LINUX
|
#if JUCE_WINDOWS || JUCE_LINUX
|
||||||
g.drawImage (image,
|
g.drawImage (image,
|
||||||
0, 0, image.getWidth(), image.getHeight(),
|
0, 0, image.getWidth(), image.getHeight(),
|
||||||
0, 0, image.getWidth(), image.getHeight());
|
0, 0, image.getWidth(), image.getHeight());
|
||||||
|
|
|
@ -37,6 +37,8 @@ public:
|
||||||
void mouseUp (const MouseEvent& e) override;
|
void mouseUp (const MouseEvent& e) override;
|
||||||
void paint (Graphics& g) override;
|
void paint (Graphics& g) override;
|
||||||
|
|
||||||
|
void updateFromHost();
|
||||||
|
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
void changeListenerCallback (ChangeBroadcaster* source) override;
|
void changeListenerCallback (ChangeBroadcaster* source) override;
|
||||||
void buttonClicked (Button *) override;
|
void buttonClicked (Button *) override;
|
||||||
|
@ -134,7 +136,7 @@ private:
|
||||||
|
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
OwnedArray<Knob::KnobAttachment> knobAttachments;
|
OwnedArray<Knob::KnobAttachment> knobAttachments;
|
||||||
OwnedArray<TooglableButton::ToggleAttachment> toggleAttachments;
|
OwnedArray<AudioProcessorValueTreeState::ButtonAttachment> toggleAttachments;
|
||||||
OwnedArray<ButtonList::ButtonListAttachment> buttonListAttachments;
|
OwnedArray<ButtonList::ButtonListAttachment> buttonListAttachments;
|
||||||
|
|
||||||
OwnedArray<ImageButton> imageButtons;
|
OwnedArray<ImageButton> imageButtons;
|
||||||
|
|
|
@ -69,10 +69,10 @@ ObxdAudioProcessor::ObxdAudioProcessor()
|
||||||
options.storageFormat = PropertiesFile::storeAsXML;
|
options.storageFormat = PropertiesFile::storeAsXML;
|
||||||
options.millisecondsBeforeSaving = 2500;
|
options.millisecondsBeforeSaving = 2500;
|
||||||
options.processLock = &configLock;
|
options.processLock = &configLock;
|
||||||
config = std::unique_ptr<PropertiesFile> (new PropertiesFile (getDocumentFolder().getChildFile ("Settings.xml"), options));
|
config = std::unique_ptr<PropertiesFile> (new PropertiesFile (getDocumentFolder().getChildFile ("Skin.xml"), options));
|
||||||
|
|
||||||
currentSkin = config->containsKey("skin") ? config->getValue("skin") : "discoDSP Blue";
|
currentSkin = config->containsKey("skin") ? config->getValue("skin") : "Ilkka Rosma Dark";
|
||||||
currentBank = "Init";
|
currentBank = "000 - FMR OB-Xa Patch Book";
|
||||||
|
|
||||||
scanAndUpdateBanks();
|
scanAndUpdateBanks();
|
||||||
scanAndUpdateSkins();
|
scanAndUpdateSkins();
|
||||||
|
@ -102,7 +102,7 @@ void ObxdAudioProcessor::initAllParams()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < PARAM_COUNT; ++i)
|
for (int i = 0; i < PARAM_COUNT; ++i)
|
||||||
{
|
{
|
||||||
setEngineParameterValue (i, programs.currentProgramPtr->values[i]);
|
setEngineParameterValue (i, programs.currentProgramPtr->values[i], true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -173,7 +173,7 @@ void ObxdAudioProcessor::setCurrentProgram (int index)
|
||||||
isHostAutomatedChange = false;
|
isHostAutomatedChange = false;
|
||||||
|
|
||||||
for (int i = 0; i < PARAM_COUNT; ++i)
|
for (int i = 0; i < PARAM_COUNT; ++i)
|
||||||
setEngineParameterValue (i, programs.currentProgramPtr->values[i]);
|
setEngineParameterValue (i, programs.currentProgramPtr->values[i], true);
|
||||||
|
|
||||||
isHostAutomatedChange = true;
|
isHostAutomatedChange = true;
|
||||||
sendChangeMessage();
|
sendChangeMessage();
|
||||||
|
@ -242,9 +242,9 @@ inline void ObxdAudioProcessor::processMidiPerSample (MidiBuffer::Iterator* iter
|
||||||
{
|
{
|
||||||
midiControlledParamSet = true;
|
midiControlledParamSet = true;
|
||||||
setEngineParameterValue (bindings[lastMovedController],
|
setEngineParameterValue (bindings[lastMovedController],
|
||||||
midiMsg->getControllerValue() / 127.0f);
|
midiMsg->getControllerValue() / 127.0f, true);
|
||||||
|
|
||||||
setEngineParameterValue (MIDILEARN, 0);
|
setEngineParameterValue (MIDILEARN, 0, true);
|
||||||
lastMovedController = 0;
|
lastMovedController = 0;
|
||||||
lastUsedParameter = 0;
|
lastUsedParameter = 0;
|
||||||
|
|
||||||
|
|