2
0
Fork 0

Increase max voice count to 32

This code includes the changes needed for compatibility with older patch/bank files, which assume a maximum count of 8. New patches/banks will be saved with an extra XML attribute (voiceCount="32"); if this is not present, then a value of "1.0" for the voice count will be interpreted as 8.
This commit is contained in:
Shane Dunne 2019-09-02 11:13:53 -04:00
parent 1e54c4d37d
commit f01bb6ff68
4 changed files with 19 additions and 29 deletions

View File

@ -48,8 +48,9 @@ public:
bool vibratoEnabled;
float Volume;
const static int MAX_VOICES=8;
float pannings[MAX_VOICES];
const static int MAX_VOICES = 32;
const static int MAX_PANNINGS = 8;
float pannings[MAX_PANNINGS];
ObxdVoice voices[MAX_VOICES];
bool uni;
bool Oversample;
@ -79,7 +80,7 @@ public:
// pannings = new float[MAX_VOICES];
totalvc = MAX_VOICES;
vq = VoiceQueue(MAX_VOICES,voices);
for(int i = 0 ; i < MAX_VOICES;++i)
for(int i = 0 ; i < MAX_PANNINGS;++i)
{
pannings[i]= 0.5;
}
@ -362,11 +363,12 @@ public:
float x1 = processSynthVoice(voices[i],lfovalue,viblfo);
if(Oversample)
{
float x2 = processSynthVoice(voices[i],lfovalue2,viblfo2); vlo+=x2*(1-pannings[i]);
vro+=x2*(pannings[i]);
float x2 = processSynthVoice(voices[i],lfovalue2,viblfo2);
vlo+=x2*(1-pannings[i % MAX_PANNINGS]);
vro+=x2*(pannings[i % MAX_PANNINGS]);
}
vl+=x1*(1-pannings[i]);
vr+=x1*(pannings[i]);
vl+=x1*(1-pannings[i % MAX_PANNINGS]);
vr+=x1*(pannings[i % MAX_PANNINGS]);
}
if(Oversample)
{

View File

@ -166,7 +166,7 @@ public:
}
void setVoiceCount(float param)
{
synth.setVoiceCount(roundToInt((param*7) +1));
synth.setVoiceCount(roundToInt((param*(synth.MAX_VOICES-1)) +1));
}
void procPitchWheelAmount(float param)
{
@ -184,7 +184,7 @@ public:
}
void processPan(float param,int idx)
{
synth.pannings[idx-1] = param;
synth.pannings[(idx-1) % synth.MAX_PANNINGS] = param;
}
void processTune(float param)
{

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@ -287,14 +287,8 @@ 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));
voiceSwitch ->addChoise("1");
voiceSwitch ->addChoise("2");
voiceSwitch ->addChoise("3");
voiceSwitch ->addChoise("4");
voiceSwitch ->addChoise("5");
voiceSwitch ->addChoise("6");
voiceSwitch ->addChoise("7");
voiceSwitch ->addChoise("8");
for (int i=1; i <= 32; i++)
voiceSwitch ->addChoise(String(i));
voiceSwitch ->setValue(ownerFilter->getParameter(VOICE_COUNT),dontSendNotification);
legatoSwitch = addNormalButtonList(25,338,65,ownerFilter,LEGATOMODE,"Legato",ImageCache::getFromMemory(BinaryData::legato_png,BinaryData::legato_pngSize));
@ -400,14 +394,8 @@ 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")));
voiceSwitch ->addChoise("1");
voiceSwitch ->addChoise("2");
voiceSwitch ->addChoise("3");
voiceSwitch ->addChoise("4");
voiceSwitch ->addChoise("5");
voiceSwitch ->addChoise("6");
voiceSwitch ->addChoise("7");
voiceSwitch ->addChoise("8");
for (int i=1; i <= 32; i++)
voiceSwitch->addChoise(String(i));
voiceSwitch ->setValue(ownerFilter->getParameter(VOICE_COUNT),dontSendNotification);
legatoSwitch = addNormalButtonListClassic(65,321,95,ownerFilter,LEGATOMODE,"Legato",ImageCache::getFromFile(skinFolder.getChildFile("legato.png")));
@ -511,7 +499,7 @@ void ObxdAudioProcessorEditor::sliderValueChanged (Slider* c)
handleSParam(lfoAmt1Knob,LFO1AMT)
handleSParam(lfoAmt2Knob,LFO2AMT)
handleSParam(pan1Knob,PAN1)
handleSParam(pan1Knob,PAN1)
handleSParam(pan2Knob,PAN2)
handleSParam(pan3Knob,PAN3)
handleSParam(pan4Knob,PAN4)
@ -671,12 +659,12 @@ void ObxdAudioProcessorEditor::mouseUp(const MouseEvent& e)
int bankStart = 1000;
{
const String currentBank = getFilter()->getCurrentBankFile().getFileName();
const String currentBank = getFilter()->getCurrentBankFile().getFileName();
for (int i = 0; i < banks.size(); ++i)
{
const File bank = banks.getUnchecked(i);
bankMenu.addItem(i + bankStart + 1, bank.getFileNameWithoutExtension(), true, bank.getFileName() == currentBank);
bankMenu.addItem(i + bankStart + 1, bank.getFileName(), true, bank.getFileName() == currentBank);
}
menu.addSubMenu("Banks", bankMenu);