v1.7
Preset name now displays in Load button. Active folder and preset is displayed with a tick on the Load drop down menu. Relocated - + preset navigation buttons.
This commit is contained in:
parent
521eeeb4c6
commit
7aff1e75ed
7 changed files with 4874 additions and 35 deletions
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
<JUCERPROJECT id="wUKQiT" name="OPL" projectType="audioplug" version="1.6.0"
|
<JUCERPROJECT id="wUKQiT" name="OPL" projectType="audioplug" version="1.7.0"
|
||||||
bundleIdentifier="com.discodsp.OPL" pluginName="OPL" pluginDesc="Digital sound synthesis chip developed by Yamaha in the mid 1980s"
|
bundleIdentifier="com.discodsp.OPL" pluginName="OPL" pluginDesc="Digital sound synthesis chip developed by Yamaha in the mid 1980s"
|
||||||
pluginManufacturer="discoDSP" pluginManufacturerCode="DDSP" pluginCode="OPL1"
|
pluginManufacturer="discoDSP" pluginManufacturerCode="DDSP" pluginCode="OPL1"
|
||||||
pluginChannelConfigs="{0, 2}" pluginIsSynth="1" pluginWantsMidiIn="1"
|
pluginChannelConfigs="{0, 2}" pluginIsSynth="1" pluginWantsMidiIn="1"
|
||||||
|
|
|
@ -62,6 +62,8 @@ private:
|
||||||
|
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
std::unique_ptr<PluginGui> comp;
|
std::unique_ptr<PluginGui> comp;
|
||||||
|
|
||||||
|
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PluginEditor)
|
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PluginEditor)
|
||||||
};
|
};
|
||||||
|
|
|
@ -143,6 +143,10 @@ void PluginGui::updateFromParameters()
|
||||||
tooltipWindow.setColour(tooltipWindow.backgroundColourId, Colour(0x0));
|
tooltipWindow.setColour(tooltipWindow.backgroundColourId, Colour(0x0));
|
||||||
tooltipWindow.setColour(tooltipWindow.textColourId, Colour(COLOUR_MID));
|
tooltipWindow.setColour(tooltipWindow.textColourId, Colour(COLOUR_MID));
|
||||||
|
|
||||||
|
if (processor->lastLoadFile.length() > 0) {
|
||||||
|
File file(processor->lastLoadFile);
|
||||||
|
loadButton->setButtonText(file.getFileNameWithoutExtension());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PluginGui::setRecordButtonState(bool recording) {
|
void PluginGui::setRecordButtonState(bool recording) {
|
||||||
|
@ -1157,9 +1161,9 @@ PluginGui::PluginGui (AdlibBlasterAudioProcessor* ownerFilter)
|
||||||
exportButton->addListener (this);
|
exportButton->addListener (this);
|
||||||
exportButton->setColour (TextButton::buttonColourId, Colour (0xff007f00));
|
exportButton->setColour (TextButton::buttonColourId, Colour (0xff007f00));
|
||||||
exportButton->setColour (TextButton::buttonOnColourId, Colours::lime);
|
exportButton->setColour (TextButton::buttonOnColourId, Colours::lime);
|
||||||
#if!JUCE_IOS
|
|
||||||
exportButton->setBounds (728, 512, 96, 24);
|
exportButton->setBounds (728, 512, 48, 24);
|
||||||
#endif
|
|
||||||
loadButton.reset (new TextButton ("load button"));
|
loadButton.reset (new TextButton ("load button"));
|
||||||
addAndMakeVisible (loadButton.get());
|
addAndMakeVisible (loadButton.get());
|
||||||
loadButton->setButtonText (TRANS("Load"));
|
loadButton->setButtonText (TRANS("Load"));
|
||||||
|
@ -1168,7 +1172,7 @@ PluginGui::PluginGui (AdlibBlasterAudioProcessor* ownerFilter)
|
||||||
loadButton->setColour (TextButton::buttonColourId, Colour (0xff007f00));
|
loadButton->setColour (TextButton::buttonColourId, Colour (0xff007f00));
|
||||||
loadButton->setColour (TextButton::buttonOnColourId, Colours::lime);
|
loadButton->setColour (TextButton::buttonOnColourId, Colours::lime);
|
||||||
|
|
||||||
loadButton->setBounds (728, 472, 48, 24);
|
loadButton->setBounds (728, 472, 96, 24);
|
||||||
|
|
||||||
versionLabel.reset (new Label ("version label",
|
versionLabel.reset (new Label ("version label",
|
||||||
String()));
|
String()));
|
||||||
|
@ -2032,7 +2036,7 @@ PluginGui::PluginGui (AdlibBlasterAudioProcessor* ownerFilter)
|
||||||
previousButton->setColour (TextButton::buttonColourId, Colour (0xff007f00));
|
previousButton->setColour (TextButton::buttonColourId, Colour (0xff007f00));
|
||||||
previousButton->setColour (TextButton::buttonOnColourId, Colours::lime);
|
previousButton->setColour (TextButton::buttonOnColourId, Colours::lime);
|
||||||
|
|
||||||
previousButton->setBounds (776, 472, 24, 24);
|
previousButton->setBounds (776, 512, 24, 24);
|
||||||
|
|
||||||
nextButton.reset (new TextButton ("next button"));
|
nextButton.reset (new TextButton ("next button"));
|
||||||
addAndMakeVisible (nextButton.get());
|
addAndMakeVisible (nextButton.get());
|
||||||
|
@ -2042,7 +2046,7 @@ PluginGui::PluginGui (AdlibBlasterAudioProcessor* ownerFilter)
|
||||||
nextButton->setColour (TextButton::buttonColourId, Colour (0xff007f00));
|
nextButton->setColour (TextButton::buttonColourId, Colour (0xff007f00));
|
||||||
nextButton->setColour (TextButton::buttonOnColourId, Colours::lime);
|
nextButton->setColour (TextButton::buttonOnColourId, Colours::lime);
|
||||||
|
|
||||||
nextButton->setBounds (800, 472, 24, 24);
|
nextButton->setBounds (800, 512, 24, 24);
|
||||||
|
|
||||||
drawable1 = Drawable::createFromImageData (gui_svg, gui_svgSize);
|
drawable1 = Drawable::createFromImageData (gui_svg, gui_svgSize);
|
||||||
|
|
||||||
|
@ -2210,6 +2214,11 @@ PluginGui::PluginGui (AdlibBlasterAudioProcessor* ownerFilter)
|
||||||
//[Constructor] You can add your own custom stuff here..
|
//[Constructor] You can add your own custom stuff here..
|
||||||
processor = ownerFilter;
|
processor = ownerFilter;
|
||||||
startTimer(1000/30);
|
startTimer(1000/30);
|
||||||
|
// Update GUI Only
|
||||||
|
if (processor->lastLoadFile.length() > 0) {
|
||||||
|
File file(processor->lastLoadFile);
|
||||||
|
loadButton->setButtonText(file.getFileNameWithoutExtension());
|
||||||
|
}
|
||||||
//[/Constructor]
|
//[/Constructor]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3001,7 +3010,7 @@ void PluginGui::buttonClicked (Button* buttonThatWasClicked)
|
||||||
void PluginGui::filesDropped (const StringArray& files, int x, int y)
|
void PluginGui::filesDropped (const StringArray& files, int x, int y)
|
||||||
{
|
{
|
||||||
if (isInterestedInFileDrag(files)) {
|
if (isInterestedInFileDrag(files)) {
|
||||||
processor->loadInstrumentFromFile(files[0]);
|
this->loadandUpdateInstrument(files[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3013,20 +3022,20 @@ void PluginGui::buttonClicked (Button* buttonThatWasClicked)
|
||||||
}
|
}
|
||||||
void PluginGui::loadPreNextFile(bool pre){
|
void PluginGui::loadPreNextFile(bool pre){
|
||||||
if (pre){
|
if (pre){
|
||||||
selectedIdxFile -=1;
|
processor->selectedIdxFile -=1;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
selectedIdxFile +=1;
|
processor->selectedIdxFile +=1;
|
||||||
}
|
}
|
||||||
if (allSbiFiles.size() > 0){
|
if (allSbiFiles.size() > 0){
|
||||||
if (selectedIdxFile > allSbiFiles.size() -1 ){
|
if (processor->selectedIdxFile > allSbiFiles.size() -1 ){
|
||||||
selectedIdxFile = 0;
|
processor->selectedIdxFile = 0;
|
||||||
}
|
}
|
||||||
if (selectedIdxFile <0 ){
|
if (processor->selectedIdxFile <0 ){
|
||||||
selectedIdxFile = allSbiFiles.size() - 1;
|
processor->selectedIdxFile = allSbiFiles.size() - 1;
|
||||||
}
|
}
|
||||||
if (allSbiFiles[selectedIdxFile].existsAsFile()){
|
if (allSbiFiles[processor->selectedIdxFile].existsAsFile()){
|
||||||
processor->loadInstrumentFromFile(allSbiFiles[selectedIdxFile].getFullPathName());
|
this->loadandUpdateInstrument(allSbiFiles[processor->selectedIdxFile].getFullPathName());
|
||||||
} else {
|
} else {
|
||||||
loadBrowserFile();
|
loadBrowserFile();
|
||||||
}
|
}
|
||||||
|
@ -3047,15 +3056,15 @@ void PluginGui::buttonClicked (Button* buttonThatWasClicked)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (selectedIdxFile > allSbiFiles.size() - 1){
|
if (processor->selectedIdxFile > allSbiFiles.size() - 1){
|
||||||
selectedIdxFile = 0;
|
processor->selectedIdxFile = 0;
|
||||||
}
|
}
|
||||||
if (selectedIdxFile <0 ){
|
if (processor->selectedIdxFile <0 ){
|
||||||
selectedIdxFile = allSbiFiles.size() - 1;
|
processor->selectedIdxFile = allSbiFiles.size() - 1;
|
||||||
}
|
}
|
||||||
if(hasFile){
|
if(hasFile){
|
||||||
if (allSbiFiles[selectedIdxFile].existsAsFile()){
|
if (allSbiFiles[processor->selectedIdxFile].existsAsFile()){
|
||||||
processor->loadInstrumentFromFile(allSbiFiles[selectedIdxFile].getFullPathName());
|
this->loadandUpdateInstrument(allSbiFiles[processor->selectedIdxFile].getFullPathName());
|
||||||
} else {
|
} else {
|
||||||
loadBrowserFile();
|
loadBrowserFile();
|
||||||
}
|
}
|
||||||
|
@ -3080,7 +3089,7 @@ void PluginGui::buttonClicked (Button* buttonThatWasClicked)
|
||||||
if (browser.browseForFileToOpen()){
|
if (browser.browseForFileToOpen()){
|
||||||
File selectedFile = browser.getResult();
|
File selectedFile = browser.getResult();
|
||||||
instrumentLoadDirectory = selectedFile.getParentDirectory();
|
instrumentLoadDirectory = selectedFile.getParentDirectory();
|
||||||
processor->loadInstrumentFromFile(selectedFile.getFullPathName());
|
this->loadandUpdateInstrument(selectedFile.getFullPathName());
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -3098,22 +3107,34 @@ void PluginGui::buttonClicked (Button* buttonThatWasClicked)
|
||||||
dir.findChildFiles (files, File::findFiles, false, "*.sbi");
|
dir.findChildFiles (files, File::findFiles, false, "*.sbi");
|
||||||
files.sort();
|
files.sort();
|
||||||
if (files.size() > 0){
|
if (files.size() > 0){
|
||||||
|
bool selectedSub = false;
|
||||||
PopupMenu subMenu;
|
PopupMenu subMenu;
|
||||||
for (auto file : files){
|
for (auto file : files){
|
||||||
allSbiFiles.add(file);
|
allSbiFiles.add(file);
|
||||||
hasFile = true;
|
hasFile = true;
|
||||||
subMenu.addItem(allSbiFiles.size(), file.getFileNameWithoutExtension());
|
if (processor->lastLoadFile == file.getFullPathName()){
|
||||||
|
selectedSub = true;
|
||||||
|
subMenu.addItem(allSbiFiles.size(), file.getFileNameWithoutExtension(), true, true);
|
||||||
|
} else {
|
||||||
|
subMenu.addItem(allSbiFiles.size(), file.getFileNameWithoutExtension());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
menuLoad.addSubMenu(dir.getFileName(), subMenu);
|
if(selectedSub){
|
||||||
|
menuLoad.addSubMenu (std::move (dir.getFileName()), std::move (subMenu), true, nullptr, true, 0);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
menuLoad.addSubMenu(dir.getFileName(), subMenu);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(hasFile){
|
if(hasFile){
|
||||||
//int id = menuLoad.show();
|
//int id = menuLoad.show();
|
||||||
menuLoad.showMenuAsync (PopupMenu::Options().withParentComponent (this->getTopLevelComponent()), [this](int id){
|
menuLoad.showMenuAsync (PopupMenu::Options().withParentComponent (this->getTopLevelComponent()), [this](int id){
|
||||||
if (id > 0) {
|
if (id > 0) {
|
||||||
this->selectedIdxFile = id -1;
|
processor->selectedIdxFile = id -1;
|
||||||
if (this->allSbiFiles[selectedIdxFile].existsAsFile()){
|
if (this->allSbiFiles[processor->selectedIdxFile].existsAsFile()){
|
||||||
this->processor->loadInstrumentFromFile(allSbiFiles[selectedIdxFile].getFullPathName());
|
this->loadandUpdateInstrument(allSbiFiles[processor->selectedIdxFile].getFullPathName());
|
||||||
} else {
|
} else {
|
||||||
this->loadBrowserFile();
|
this->loadBrowserFile();
|
||||||
}
|
}
|
||||||
|
@ -3128,6 +3149,14 @@ void PluginGui::buttonClicked (Button* buttonThatWasClicked)
|
||||||
}
|
}
|
||||||
return hasFile;
|
return hasFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PluginGui::loadandUpdateInstrument(String path) {
|
||||||
|
|
||||||
|
processor->loadInstrumentFromFile(path);
|
||||||
|
|
||||||
|
File file(path);
|
||||||
|
loadButton->setButtonText(file.getFileNameWithoutExtension());
|
||||||
|
}
|
||||||
//[/MiscUserCode]
|
//[/MiscUserCode]
|
||||||
|
|
||||||
|
|
||||||
|
@ -3584,11 +3613,11 @@ BEGIN_JUCER_METADATA
|
||||||
txtcol="ff007f00" buttonText="Record to DRO (not working yet)"
|
txtcol="ff007f00" buttonText="Record to DRO (not working yet)"
|
||||||
connectedEdges="0" needsCallback="1" radioGroupId="0" state="0"/>
|
connectedEdges="0" needsCallback="1" radioGroupId="0" state="0"/>
|
||||||
<TEXTBUTTON name="export button" id="88c84ed1e2b284d3" memberName="exportButton"
|
<TEXTBUTTON name="export button" id="88c84ed1e2b284d3" memberName="exportButton"
|
||||||
virtualName="" explicitFocusOrder="0" pos="728 512 96 24" bgColOff="ff007f00"
|
virtualName="" explicitFocusOrder="0" pos="728 512 48 24" bgColOff="ff007f00"
|
||||||
bgColOn="ff00ff00" buttonText="Export" connectedEdges="3" needsCallback="1"
|
bgColOn="ff00ff00" buttonText="Export" connectedEdges="3" needsCallback="1"
|
||||||
radioGroupId="0"/>
|
radioGroupId="0"/>
|
||||||
<TEXTBUTTON name="load button" id="a42176161523f448" memberName="loadButton"
|
<TEXTBUTTON name="load button" id="a42176161523f448" memberName="loadButton"
|
||||||
virtualName="" explicitFocusOrder="0" pos="728 472 48 24" bgColOff="ff007f00"
|
virtualName="" explicitFocusOrder="0" pos="728 472 96 24" bgColOff="ff007f00"
|
||||||
bgColOn="ff00ff00" buttonText="Load" connectedEdges="3" needsCallback="1"
|
bgColOn="ff00ff00" buttonText="Load" connectedEdges="3" needsCallback="1"
|
||||||
radioGroupId="0"/>
|
radioGroupId="0"/>
|
||||||
<LABEL name="version label" id="cd68ca110847cc18" memberName="versionLabel"
|
<LABEL name="version label" id="cd68ca110847cc18" memberName="versionLabel"
|
||||||
|
@ -4017,11 +4046,11 @@ BEGIN_JUCER_METADATA
|
||||||
fontname="Default font" fontsize="15.0" kerning="0.0" bold="0"
|
fontname="Default font" fontsize="15.0" kerning="0.0" bold="0"
|
||||||
italic="0" justification="36"/>
|
italic="0" justification="36"/>
|
||||||
<TEXTBUTTON name="previous button" id="984b463c7d35a177" memberName="previousButton"
|
<TEXTBUTTON name="previous button" id="984b463c7d35a177" memberName="previousButton"
|
||||||
virtualName="" explicitFocusOrder="0" pos="776 472 24 24" bgColOff="ff007f00"
|
virtualName="" explicitFocusOrder="0" pos="776 512 24 24" bgColOff="ff007f00"
|
||||||
bgColOn="ff00ff00" buttonText="-" connectedEdges="3" needsCallback="1"
|
bgColOn="ff00ff00" buttonText="-" connectedEdges="3" needsCallback="1"
|
||||||
radioGroupId="0"/>
|
radioGroupId="0"/>
|
||||||
<TEXTBUTTON name="next button" id="d6684ea8f9f9ded7" memberName="nextButton"
|
<TEXTBUTTON name="next button" id="d6684ea8f9f9ded7" memberName="nextButton"
|
||||||
virtualName="" explicitFocusOrder="0" pos="800 472 24 24" bgColOff="ff007f00"
|
virtualName="" explicitFocusOrder="0" pos="800 512 24 24" bgColOff="ff007f00"
|
||||||
bgColOn="ff00ff00" buttonText="+" connectedEdges="3" needsCallback="1"
|
bgColOn="ff00ff00" buttonText="+" connectedEdges="3" needsCallback="1"
|
||||||
radioGroupId="0"/>
|
radioGroupId="0"/>
|
||||||
</JUCER_COMPONENT>
|
</JUCER_COMPONENT>
|
||||||
|
|
|
@ -130,6 +130,7 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
//[UserVariables] -- You can add your own custom variables in this section.
|
//[UserVariables] -- You can add your own custom variables in this section.
|
||||||
|
void loadandUpdateInstrument(String path);
|
||||||
class OPLComboBoxLookAndFeelMethods:
|
class OPLComboBoxLookAndFeelMethods:
|
||||||
public OPLLookAndFeel
|
public OPLLookAndFeel
|
||||||
{
|
{
|
||||||
|
@ -145,9 +146,9 @@ class OPLComboBoxLookAndFeelMethods:
|
||||||
return options;
|
return options;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
std::unique_ptr<OPLComboBoxLookAndFeelMethods> oplComboBoxLookAndFeel;
|
std::unique_ptr<OPLComboBoxLookAndFeelMethods> oplComboBoxLookAndFeel;
|
||||||
|
|
||||||
static const uint32 COLOUR_MID = 0xff007f00;
|
static const uint32 COLOUR_MID = 0xff007f00;
|
||||||
static const uint32 COLOUR_RECORDING = 0xffff0000;
|
static const uint32 COLOUR_RECORDING = 0xffff0000;
|
||||||
AdlibBlasterAudioProcessor* processor;
|
AdlibBlasterAudioProcessor* processor;
|
||||||
|
@ -155,7 +156,7 @@ return options;
|
||||||
TooltipWindow tooltipWindow;
|
TooltipWindow tooltipWindow;
|
||||||
PopupMenu menuLoad;
|
PopupMenu menuLoad;
|
||||||
Array<File> allSbiFiles;
|
Array<File> allSbiFiles;
|
||||||
int selectedIdxFile = 0;
|
|
||||||
#if!JUCE_IOS
|
#if!JUCE_IOS
|
||||||
File instrumentLoadDirectory = File::getSpecialLocation(File::userDocumentsDirectory).getChildFile("discoDSP").getChildFile("OPL"); // File();
|
File instrumentLoadDirectory = File::getSpecialLocation(File::userDocumentsDirectory).getChildFile("discoDSP").getChildFile("OPL"); // File();
|
||||||
File instrumentSaveDirectory = File::getSpecialLocation(File::userDocumentsDirectory).getChildFile("discoDSP").getChildFile("OPL"); // File();
|
File instrumentSaveDirectory = File::getSpecialLocation(File::userDocumentsDirectory).getChildFile("discoDSP").getChildFile("OPL"); // File();
|
||||||
|
|
4790
Source/PluginGuiiOS.cpp
Normal file
4790
Source/PluginGuiiOS.cpp
Normal file
File diff suppressed because it is too large
Load diff
|
@ -534,6 +534,7 @@ void AdlibBlasterAudioProcessor::setParameter (int index, float newValue)
|
||||||
|
|
||||||
void AdlibBlasterAudioProcessor::loadInstrumentFromFile(String filename)
|
void AdlibBlasterAudioProcessor::loadInstrumentFromFile(String filename)
|
||||||
{
|
{
|
||||||
|
lastLoadFile = filename;
|
||||||
FILE* f = fopen(filename.toUTF8(), "rb");
|
FILE* f = fopen(filename.toUTF8(), "rb");
|
||||||
unsigned char buf[MAX_INSTRUMENT_FILE_SIZE_BYTES];
|
unsigned char buf[MAX_INSTRUMENT_FILE_SIZE_BYTES];
|
||||||
int n = (int)fread(buf, 1, MAX_INSTRUMENT_FILE_SIZE_BYTES, f);
|
int n = (int)fread(buf, 1, MAX_INSTRUMENT_FILE_SIZE_BYTES, f);
|
||||||
|
@ -858,6 +859,9 @@ void AdlibBlasterAudioProcessor::getStateInformation(MemoryBlock& destData)
|
||||||
|
|
||||||
v->setProperty(stringToIdentifier(getParameterName(i)), p);
|
v->setProperty(stringToIdentifier(getParameterName(i)), p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
v->setProperty("lastLoadFile", lastLoadFile);
|
||||||
|
v->setProperty("selectedIdxFile", selectedIdxFile);
|
||||||
|
|
||||||
String s = JSON::toString(v.get());
|
String s = JSON::toString(v.get());
|
||||||
|
|
||||||
|
@ -896,6 +900,16 @@ void AdlibBlasterAudioProcessor::setStateInformation (const void* data, int size
|
||||||
setParameter(i, param);
|
setParameter(i, param);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var file = v["lastLoadFile"];
|
||||||
|
if (file.isString()){
|
||||||
|
lastLoadFile = file;
|
||||||
|
}
|
||||||
|
|
||||||
|
var idx = v["selectedIdxFile"];
|
||||||
|
if (idx.isInt()){
|
||||||
|
selectedIdxFile = idx;
|
||||||
|
}
|
||||||
|
|
||||||
updateGuiIfPresent();
|
updateGuiIfPresent();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -87,6 +87,9 @@ public:
|
||||||
void getStateInformation (MemoryBlock& destData);
|
void getStateInformation (MemoryBlock& destData);
|
||||||
void setStateInformation (const void* data, int sizeInBytes);
|
void setStateInformation (const void* data, int sizeInBytes);
|
||||||
|
|
||||||
|
public:
|
||||||
|
String lastLoadFile;
|
||||||
|
int selectedIdxFile = -1;
|
||||||
private:
|
private:
|
||||||
Hiopl *Opl;
|
Hiopl *Opl;
|
||||||
std::vector<FloatParameter*> params;
|
std::vector<FloatParameter*> params;
|
||||||
|
|
Loading…
Reference in a new issue