diff --git a/Source/Engine/Motherboard.h b/Source/Engine/Motherboard.h index 21d9201..12477f0 100755 --- a/Source/Engine/Motherboard.h +++ b/Source/Engine/Motherboard.h @@ -48,9 +48,8 @@ public: bool vibratoEnabled; float Volume; - const static int MAX_VOICES = 32; - const static int MAX_PANNINGS = 8; - float pannings[MAX_PANNINGS]; + const static int MAX_VOICES=8; + float pannings[MAX_VOICES]; ObxdVoice voices[MAX_VOICES]; bool uni; bool Oversample; @@ -80,7 +79,7 @@ public: // pannings = new float[MAX_VOICES]; totalvc = MAX_VOICES; vq = VoiceQueue(MAX_VOICES,voices); - for(int i = 0 ; i < MAX_PANNINGS;++i) + for(int i = 0 ; i < MAX_VOICES;++i) { pannings[i]= 0.5; } @@ -363,12 +362,11 @@ public: float x1 = processSynthVoice(voices[i],lfovalue,viblfo); if(Oversample) { - float x2 = processSynthVoice(voices[i],lfovalue2,viblfo2); - vlo+=x2*(1-pannings[i % MAX_PANNINGS]); - vro+=x2*(pannings[i % MAX_PANNINGS]); + float x2 = processSynthVoice(voices[i],lfovalue2,viblfo2); vlo+=x2*(1-pannings[i]); + vro+=x2*(pannings[i]); } - vl+=x1*(1-pannings[i % MAX_PANNINGS]); - vr+=x1*(pannings[i % MAX_PANNINGS]); + vl+=x1*(1-pannings[i]); + vr+=x1*(pannings[i]); } if(Oversample) { diff --git a/Source/Engine/SynthEngine.h b/Source/Engine/SynthEngine.h index c916590..7e74550 100755 --- a/Source/Engine/SynthEngine.h +++ b/Source/Engine/SynthEngine.h @@ -166,7 +166,7 @@ public: } void setVoiceCount(float param) { - synth.setVoiceCount(roundToInt((param*(synth.MAX_VOICES-1)) +1)); + synth.setVoiceCount(roundToInt((param*7) +1)); } void procPitchWheelAmount(float param) { @@ -184,7 +184,7 @@ public: } void processPan(float param,int idx) { - synth.pannings[(idx-1) % synth.MAX_PANNINGS] = param; + synth.pannings[idx-1] = param; } void processTune(float param) { diff --git a/Source/Images/voices.png b/Source/Images/voices.png old mode 100644 new mode 100755 index fdaa2a3..c8af407 Binary files a/Source/Images/voices.png and b/Source/Images/voices.png differ diff --git a/Source/PluginEditor.cpp b/Source/PluginEditor.cpp index d20331b..c50300f 100755 --- a/Source/PluginEditor.cpp +++ b/Source/PluginEditor.cpp @@ -287,8 +287,14 @@ void ObxdAudioProcessorEditor::rebuildComponents() envelopeDetuneKnob = addTinyKnob(1353,300,ownerFilter,ENVDER,"Env",0.2); voiceSwitch = addNormalButtonList(124,338,17,ownerFilter,VOICE_COUNT,"VoiceCount",ImageCache::getFromMemory(BinaryData::voices_png,BinaryData::voices_pngSize)); - for (int i=1; i <= 32; i++) - voiceSwitch ->addChoise(String(i)); + voiceSwitch ->addChoise("1"); + voiceSwitch ->addChoise("2"); + voiceSwitch ->addChoise("3"); + voiceSwitch ->addChoise("4"); + voiceSwitch ->addChoise("5"); + voiceSwitch ->addChoise("6"); + voiceSwitch ->addChoise("7"); + voiceSwitch ->addChoise("8"); voiceSwitch ->setValue(ownerFilter->getParameter(VOICE_COUNT),dontSendNotification); legatoSwitch = addNormalButtonList(25,338,65,ownerFilter,LEGATOMODE,"Legato",ImageCache::getFromMemory(BinaryData::legato_png,BinaryData::legato_pngSize)); @@ -394,8 +400,14 @@ void ObxdAudioProcessorEditor::rebuildComponents() bendLfoRateKnob = addNormalKnobClassic(364,345,ownerFilter,BENDLFORATE,"ModRate",0.4); voiceSwitch = addNormalButtonListClassic(172,321,38,ownerFilter,VOICE_COUNT,"VoiceCount",ImageCache::getFromFile(skinFolder.getChildFile("voices.png"))); - for (int i=1; i <= 32; i++) - voiceSwitch->addChoise(String(i)); + voiceSwitch ->addChoise("1"); + voiceSwitch ->addChoise("2"); + voiceSwitch ->addChoise("3"); + voiceSwitch ->addChoise("4"); + voiceSwitch ->addChoise("5"); + voiceSwitch ->addChoise("6"); + voiceSwitch ->addChoise("7"); + voiceSwitch ->addChoise("8"); voiceSwitch ->setValue(ownerFilter->getParameter(VOICE_COUNT),dontSendNotification); legatoSwitch = addNormalButtonListClassic(65,321,95,ownerFilter,LEGATOMODE,"Legato",ImageCache::getFromFile(skinFolder.getChildFile("legato.png"))); diff --git a/Source/PluginProcessor.cpp b/Source/PluginProcessor.cpp index 8b81371..cba424f 100755 --- a/Source/PluginProcessor.cpp +++ b/Source/PluginProcessor.cpp @@ -734,7 +734,6 @@ 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) { @@ -754,25 +753,9 @@ 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 (std::unique_ptr xmlState = getXmlFromBinary(data,sizeInBytes)) + if (XmlElement* const xmlState = getXmlFromBinary(data,sizeInBytes)) { XmlElement* xprogs = xmlState->getFirstChildElement(); if (xprogs->hasTagName(S("programs"))) @@ -780,14 +763,11 @@ 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) { - 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].values[k] = e->getDoubleAttribute(String(k), programs.programs[i].values[k]); } programs.programs[i].name = e->getStringAttribute(S("programName"), S("Default")); @@ -809,16 +789,13 @@ void ObxdAudioProcessor::setStateInformation (const void* data, int sizeInBytes) void ObxdAudioProcessor::setCurrentProgramStateInformation(const void* data,int sizeInBytes) { - if (std::unique_ptr e = getXmlFromBinary(data, sizeInBytes)) + if (XmlElement* const e = getXmlFromBinary(data, sizeInBytes)) { programs.currentProgramPtr->setDefaultValues(); - bool newFormat = e->hasAttribute("voiceCount"); for (int k = 0; k < PARAM_COUNT; ++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->values[k] = e->getDoubleAttribute(String(k), programs.currentProgramPtr->values[k]); } programs.currentProgramPtr->name = e->getStringAttribute(S("programName"), S("Default")); @@ -843,7 +820,6 @@ void ObxdAudioProcessor::getCurrentProgramStateInformation(MemoryBlock& destData copyXmlToBinary(xmlState, destData); } - //============================================================================== bool ObxdAudioProcessor::loadFromFXBFile(const File& fxbFile) {