diff --git a/.gitignore b/.gitignore
index fbffd30..af48007 100644
--- a/.gitignore
+++ b/.gitignore
@@ -318,3 +318,4 @@ __pycache__/
*.odx.cs
*.xsd.cs
*.exe
+Source/Images/appIcon.png
diff --git a/OB-Xd.jucer b/OB-Xd.jucer
index ea27bba..6d4ba21 100644
--- a/OB-Xd.jucer
+++ b/OB-Xd.jucer
@@ -136,8 +136,7 @@
-
+
@@ -159,6 +158,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -178,5 +199,6 @@
+
diff --git a/Source/PluginEditor.cpp b/Source/PluginEditor.cpp
index 8615fba..577e01d 100755
--- a/Source/PluginEditor.cpp
+++ b/Source/PluginEditor.cpp
@@ -645,7 +645,7 @@ void ObxdAudioProcessorEditor::mouseUp(const MouseEvent& e)
DirectoryIterator it(getFilter()->getSkinFolder(), false, "*", File::findDirectories);
while (it.next())
{
- skins.addUsingDefaultSort(it.getFile());r
+ skins.addUsingDefaultSort(it.getFile());
}
for (int i = 0; i < skins.size(); ++i)
diff --git a/Source/PluginProcessor.cpp b/Source/PluginProcessor.cpp
index b22f670..8467903 100755
--- a/Source/PluginProcessor.cpp
+++ b/Source/PluginProcessor.cpp
@@ -734,6 +734,7 @@ void ObxdAudioProcessor::getStateInformation (MemoryBlock& destData)
{
XmlElement* xpr = new XmlElement("program");
xpr->setAttribute(S("programName"), programs.programs[i].name);
+ xpr->setAttribute(S("voiceCount"), Motherboard::MAX_VOICES);
for (int k = 0; k < PARAM_COUNT; ++k)
{
@@ -752,10 +753,25 @@ void ObxdAudioProcessor::getStateInformation (MemoryBlock& destData)
copyXmlToBinary(xmlState,destData);
}
-/*
+
+void ObxdAudioProcessor::getCurrentProgramStateInformation(MemoryBlock& destData)
+{
+ XmlElement xmlState = XmlElement("Datsounds");
+
+ for (int k = 0; k < PARAM_COUNT; ++k)
+ {
+ xmlState.setAttribute(String(k), programs.currentProgramPtr->values[k]);
+ }
+
+ xmlState.setAttribute(S("voiceCount"), Motherboard::MAX_VOICES);
+ xmlState.setAttribute(S("programName"), programs.currentProgramPtr->name);
+
+ copyXmlToBinary(xmlState, destData);
+}
+
void ObxdAudioProcessor::setStateInformation (const void* data, int sizeInBytes)
{
- if (XmlElement* const xmlState = getXmlFromBinary(data,sizeInBytes))
+ if (std::unique_ptr xmlState = getXmlFromBinary(data,sizeInBytes))
{
XmlElement* xprogs = xmlState->getFirstChildElement();
if (xprogs->hasTagName(S("programs")))
@@ -763,11 +779,14 @@ void ObxdAudioProcessor::setStateInformation (const void* data, int sizeInBytes)
int i = 0;
forEachXmlChildElement(*xprogs, e)
{
+ bool newFormat = e->hasAttribute("voiceCount");
programs.programs[i].setDefaultValues();
for (int k = 0; k < PARAM_COUNT; ++k)
{
- programs.programs[i].values[k] = e->getDoubleAttribute(String(k), programs.programs[i].values[k]);
+ float value = float(e->getDoubleAttribute(String(k), programs.programs[i].values[k]));
+ if (!newFormat && k == VOICE_COUNT) value *= 0.25f;
+ programs.programs[i].values[k] = value;
}
programs.programs[i].name = e->getStringAttribute(S("programName"), S("Default"));
@@ -787,13 +806,16 @@ void ObxdAudioProcessor::setStateInformation (const void* data, int sizeInBytes)
void ObxdAudioProcessor::setCurrentProgramStateInformation(const void* data,int sizeInBytes)
{
- if (XmlElement* const e = getXmlFromBinary(data, sizeInBytes))
+ if (std::unique_ptr e = getXmlFromBinary(data, sizeInBytes))
{
programs.currentProgramPtr->setDefaultValues();
+ bool newFormat = e->hasAttribute("voiceCount");
for (int k = 0; k < PARAM_COUNT; ++k)
{
- programs.currentProgramPtr->values[k] = e->getDoubleAttribute(String(k), programs.currentProgramPtr->values[k]);
+ float value = float(e->getDoubleAttribute(String(k), programs.currentProgramPtr->values[k]));
+ if (!newFormat && k == VOICE_COUNT) value *= 0.25f;
+ programs.currentProgramPtr->values[k] = value;
}
programs.currentProgramPtr->name = e->getStringAttribute(S("programName"), S("Default"));
@@ -801,20 +823,6 @@ void ObxdAudioProcessor::setCurrentProgramStateInformation(const void* data,int
setCurrentProgram(programs.currentProgram);
}
}
-*/
-void ObxdAudioProcessor::getCurrentProgramStateInformation(MemoryBlock& destData)
-{
- XmlElement xmlState = XmlElement("Datsounds");
-
- for (int k = 0; k < PARAM_COUNT; ++k)
- {
- xmlState.setAttribute(String(k), programs.currentProgramPtr->values[k]);
- }
-
- xmlState.setAttribute(S("programName"), programs.currentProgramPtr->name);
-
- copyXmlToBinary(xmlState, destData);
-}
//==============================================================================
bool ObxdAudioProcessor::loadFromFXBFile(const File& fxbFile)