@@ -304,7 +304,7 @@ midi-sequencer.cpp.o: midi-sequencer.cpp midi-base.hpp $(CXXDEPS) | |||
notes.cpp.o: notes.cpp $(CXXDEPS) ../CarlaNativeExtUI.hpp | |||
$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ | |||
vex-%.cpp.o: vex-%.cpp | |||
vex-%.cpp.o: vex-%.cpp vex/* | |||
$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ | |||
zynaddsubfx-%.cpp.o: zynaddsubfx-%.cpp $(CXXDEPS) $(ZYN_UI_FILES_H) | |||
@@ -254,7 +254,7 @@ public: | |||
startTimer(50); | |||
} | |||
~VexEditorComponent() | |||
~VexEditorComponent() override | |||
{ | |||
stopTimer(); | |||
removeAllChildren(); | |||
@@ -474,7 +474,7 @@ protected: | |||
bool params[92]; | |||
fCallback->getChangedParameters(params); | |||
for (int i=0; i < 89; ++i) | |||
for (int i=0; i < kSliderCount; ++i) | |||
{ | |||
if (params[i]) | |||
sliders[i]->setValue(fCallback->getFilterParameterValue(i), dontSendNotification); | |||
@@ -944,74 +944,75 @@ protected: | |||
int snum; | |||
MidiMessage midiMessage(0xf4); | |||
MidiBuffer::Iterator Iterator1(part1Midi); | |||
while (Iterator1.getNextEvent(midiMessage, snum)) | |||
for (MidiBuffer::Iterator Iterator1(part1Midi); Iterator1.getNextEvent(midiMessage, snum);) | |||
{ | |||
if (midiMessage.isNoteOn()) | |||
fSynth.playNote(midiMessage.getNoteNumber(), midiMessage.getVelocity(), snum, 1); | |||
else if (midiMessage.isNoteOff()) | |||
fSynth.releaseNote(midiMessage.getNoteNumber(), snum, 1 ); | |||
fSynth.releaseNote(midiMessage.getNoteNumber(), snum, 1); | |||
else if (midiMessage.isAllSoundOff()) | |||
fSynth.kill(); | |||
else if (midiMessage.isAllNotesOff()) | |||
fSynth.releaseAll(snum); | |||
} | |||
MidiBuffer::Iterator Iterator2(part2Midi); | |||
while (Iterator2.getNextEvent(midiMessage, snum)) | |||
for (MidiBuffer::Iterator Iterator2(part2Midi); Iterator2.getNextEvent(midiMessage, snum);) | |||
{ | |||
if (midiMessage.isNoteOn()) | |||
fSynth.playNote(midiMessage.getNoteNumber(), midiMessage.getVelocity(), snum, 2); | |||
else if (midiMessage.isNoteOff()) | |||
fSynth.releaseNote(midiMessage.getNoteNumber(), snum, 2 ); | |||
fSynth.releaseNote(midiMessage.getNoteNumber(), snum, 2); | |||
} | |||
MidiBuffer::Iterator Iterator3(part3Midi); | |||
while (Iterator3.getNextEvent(midiMessage, snum)) | |||
for (MidiBuffer::Iterator Iterator3(part3Midi); Iterator3.getNextEvent(midiMessage, snum);) | |||
{ | |||
if (midiMessage.isNoteOn()) | |||
fSynth.playNote(midiMessage.getNoteNumber(), midiMessage.getVelocity(), snum, 3); | |||
else if (midiMessage.isNoteOff()) | |||
fSynth.releaseNote(midiMessage.getNoteNumber(), snum, 3 ); | |||
fSynth.releaseNote(midiMessage.getNoteNumber(), snum, 3); | |||
} | |||
fMidiInBuffer.clear(); | |||
if (obf->getNumSamples() < (int)frames) | |||
if (obf.getNumSamples() < (int)frames) | |||
{ | |||
obf->setSize(2, frames, 0, 0, 1); | |||
abf->setSize(2, frames, 0, 0, 1); | |||
dbf1->setSize(2, frames, 0, 0, 1); | |||
dbf2->setSize(2, frames, 0, 0, 1); | |||
dbf3->setSize(2, frames, 0, 0, 1); | |||
obf.setSize(2, frames, false, false, true); | |||
dbf1.setSize(2, frames, false, false, true); | |||
dbf2.setSize(2, frames, false, false, true); | |||
dbf3.setSize(2, frames, false, false, true); | |||
} | |||
obf ->clear(); | |||
dbf1->clear(); | |||
dbf2->clear(); | |||
dbf3->clear(); | |||
obf .clear(); | |||
dbf1.clear(); | |||
dbf2.clear(); | |||
dbf3.clear(); | |||
fSynth.doProcess(*obf, *abf, *dbf1, *dbf2, *dbf3); | |||
fSynth.doProcess(obf, dbf1, dbf2, dbf3); | |||
if (fParameters[75] > 0.001f) fDelay.processBlock(dbf1, bpm); | |||
if (fParameters[78] > 0.001f) fChorus.processBlock(dbf2); | |||
if (fParameters[82] > 0.001f) fReverb.processBlock(dbf3); | |||
if (fParameters[75] > 0.001f) | |||
{ | |||
fDelay.processBlock(dbf1, bpm); | |||
obf.addFrom(0, 0, dbf1, 0, 0, frames, fParameters[75]); | |||
obf.addFrom(1, 0, dbf1, 1, 0, frames, fParameters[75]); | |||
} | |||
AudioSampleBuffer output(outBuffer, 2, 0, frames); | |||
output.clear(); | |||
if (fParameters[78] > 0.001f) | |||
{ | |||
fChorus.processBlock(dbf2); | |||
obf.addFrom(0, 0, dbf2, 0, 0, frames, fParameters[78]); | |||
obf.addFrom(1, 0, dbf2, 1, 0, frames, fParameters[78]); | |||
} | |||
obf->addFrom(0, 0, *dbf1, 0, 0, frames, fParameters[75]); | |||
obf->addFrom(1, 0, *dbf1, 1, 0, frames, fParameters[75]); | |||
obf->addFrom(0, 0, *dbf2, 0, 0, frames, fParameters[78]); | |||
obf->addFrom(1, 0, *dbf2, 1, 0, frames, fParameters[78]); | |||
obf->addFrom(0, 0, *dbf3, 0, 0, frames, fParameters[82]); | |||
obf->addFrom(1, 0, *dbf3, 1, 0, frames, fParameters[82]); | |||
if (fParameters[82] > 0.001f) | |||
{ | |||
fReverb.processBlock(dbf3); | |||
obf.addFrom(0, 0, dbf3, 0, 0, frames, fParameters[82]); | |||
obf.addFrom(1, 0, dbf3, 1, 0, frames, fParameters[82]); | |||
} | |||
output.addFrom(0, 0, *obf, 0, 0, frames, fParameters[0]); | |||
output.addFrom(1, 0, *obf, 1, 0, frames, fParameters[0]); | |||
FloatVectorOperations::copyWithMultiply(outBuffer[0], obf.getReadPointer(0), fParameters[0], frames); | |||
FloatVectorOperations::copyWithMultiply(outBuffer[1], obf.getReadPointer(1), fParameters[0], frames); | |||
} | |||
// ------------------------------------------------------------------- | |||
@@ -1123,11 +1124,11 @@ protected: | |||
void bufferSizeChanged(const uint32_t bufferSize) override | |||
{ | |||
obf = new AudioSampleBuffer(2, bufferSize); | |||
abf = new AudioSampleBuffer(2, bufferSize); | |||
dbf1 = new AudioSampleBuffer(2, bufferSize); | |||
dbf2 = new AudioSampleBuffer(2, bufferSize); | |||
dbf3 = new AudioSampleBuffer(2, bufferSize); | |||
obf.setSize(2, bufferSize); | |||
dbf1.setSize(2, bufferSize); | |||
dbf2.setSize(2, bufferSize); | |||
dbf3.setSize(2, bufferSize); | |||
fSynth.setBufferSize(bufferSize); | |||
} | |||
void sampleRateChanged(const double sampleRate) override | |||
@@ -1196,11 +1197,10 @@ private: | |||
float fParameters[kParamCount]; | |||
bool fParamsChanged[92]; | |||
ScopedPointer<AudioSampleBuffer> obf; | |||
ScopedPointer<AudioSampleBuffer> abf; | |||
ScopedPointer<AudioSampleBuffer> dbf1; // delay | |||
ScopedPointer<AudioSampleBuffer> dbf2; // chorus | |||
ScopedPointer<AudioSampleBuffer> dbf3; // reverb | |||
AudioSampleBuffer obf; | |||
AudioSampleBuffer dbf1; // delay | |||
AudioSampleBuffer dbf2; // chorus | |||
AudioSampleBuffer dbf3; // reverb | |||
VexArpSettings fArpSet1, fArpSet2, fArpSet3; | |||
VexArp fArp1, fArp2, fArp3; | |||
@@ -1223,8 +1223,8 @@ private: | |||
static const NativePluginDescriptor vexsynthDesc = { | |||
/* category */ PLUGIN_CATEGORY_SYNTH, | |||
/* hints */ static_cast<NativePluginHints>(PLUGIN_IS_SYNTH|PLUGIN_HAS_UI|PLUGIN_NEEDS_UI_JUCE|PLUGIN_USES_STATE|PLUGIN_USES_TIME|PLUGIN_USES_PARENT_ID), | |||
/* supports */ static_cast<NativePluginSupports>(0x0), | |||
/* hints */ static_cast<NativePluginHints>(PLUGIN_IS_SYNTH|PLUGIN_HAS_UI|PLUGIN_NEEDS_FIXED_BUFFERS|PLUGIN_NEEDS_UI_JUCE|PLUGIN_USES_STATE|PLUGIN_USES_TIME|PLUGIN_USES_PARENT_ID), | |||
/* supports */ static_cast<NativePluginSupports>(PLUGIN_SUPPORTS_ALL_SOUND_OFF), | |||
/* audioIns */ 0, | |||
/* audioOuts */ 2, | |||
/* midiIns */ 1, | |||
@@ -86,9 +86,9 @@ public: | |||
buffer.clear(); | |||
} | |||
void processBlock(AudioSampleBuffer* const outBuffer) | |||
void processBlock(AudioSampleBuffer& outBuffer) | |||
{ | |||
processBlock(outBuffer->getWritePointer(0), outBuffer->getWritePointer(1), outBuffer->getNumSamples()); | |||
processBlock(outBuffer.getWritePointer(0), outBuffer.getWritePointer(1), outBuffer.getNumSamples()); | |||
} | |||
void processBlock(float* const outBufferL, float* const outBufferR, const int numSamples) | |||
@@ -81,9 +81,9 @@ public: | |||
buffer.clear(); | |||
} | |||
void processBlock(AudioSampleBuffer* const outBuffer, double bpm) | |||
void processBlock(AudioSampleBuffer& outBuffer, double bpm) | |||
{ | |||
processBlock(outBuffer->getWritePointer(0), outBuffer->getWritePointer(1), outBuffer->getNumSamples(), bpm); | |||
processBlock(outBuffer.getWritePointer(0), outBuffer.getWritePointer(1), outBuffer.getNumSamples(), bpm); | |||
} | |||
void processBlock(float* const outBufferL, float* const outBufferR, const int numSamples, double bpm) | |||
@@ -62,9 +62,9 @@ public: | |||
parameters = p; | |||
} | |||
void processBlock(AudioSampleBuffer* const outBuffer) | |||
void processBlock(AudioSampleBuffer& outBuffer) | |||
{ | |||
processBlock(outBuffer->getWritePointer(0), outBuffer->getWritePointer(1), outBuffer->getNumSamples()); | |||
processBlock(outBuffer.getWritePointer(0), outBuffer.getWritePointer(1), outBuffer.getNumSamples()); | |||
} | |||
void processBlock(float* const outBufferL, float* const outBufferR, const int numSamples) | |||
@@ -77,11 +77,13 @@ public: | |||
} | |||
} | |||
void doProcess(AudioSampleBuffer& obf, AudioSampleBuffer& assbf, AudioSampleBuffer& ebf1, AudioSampleBuffer& ebf2, AudioSampleBuffer& ebf3) | |||
void doProcess(AudioSampleBuffer& obf, AudioSampleBuffer& ebf1, AudioSampleBuffer& ebf2, AudioSampleBuffer& ebf3) | |||
{ | |||
const int numSamples = obf.getNumSamples(); | |||
float* const outPtrL = assbf.getWritePointer(0); | |||
float* const outPtrR = assbf.getWritePointer(1); | |||
tmpBuf.clear(); | |||
float* const outPtrL = tmpBuf.getWritePointer(0); | |||
float* const outPtrR = tmpBuf.getWritePointer(1); | |||
if (part1) | |||
{ | |||
@@ -93,14 +95,14 @@ public: | |||
if (vo1[i]->getIsOn()) | |||
{ | |||
vo1[i]->doProcess(outPtrL, outPtrR, numSamples); | |||
obf.addFrom(0, 0, assbf, 0, 0, numSamples, left); | |||
obf.addFrom(1, 0, assbf, 1, 0, numSamples, right); | |||
ebf1.addFrom(0, 0, assbf, 0, 0, numSamples, parameters[22] * left); | |||
ebf1.addFrom(1, 0, assbf, 1, 0, numSamples, parameters[22] * right); | |||
ebf2.addFrom(0, 0, assbf, 0, 0, numSamples, parameters[23] * left); | |||
ebf2.addFrom(1, 0, assbf, 1, 0, numSamples, parameters[23] * right); | |||
ebf3.addFrom(0, 0, assbf, 0, 0, numSamples, parameters[24] * left); | |||
ebf3.addFrom(1, 0, assbf, 1, 0, numSamples, parameters[24] * right); | |||
obf.addFrom(0, 0, tmpBuf, 0, 0, numSamples, left); | |||
obf.addFrom(1, 0, tmpBuf, 1, 0, numSamples, right); | |||
ebf1.addFrom(0, 0, tmpBuf, 0, 0, numSamples, parameters[22] * left); | |||
ebf1.addFrom(1, 0, tmpBuf, 1, 0, numSamples, parameters[22] * right); | |||
ebf2.addFrom(0, 0, tmpBuf, 0, 0, numSamples, parameters[23] * left); | |||
ebf2.addFrom(1, 0, tmpBuf, 1, 0, numSamples, parameters[23] * right); | |||
ebf3.addFrom(0, 0, tmpBuf, 0, 0, numSamples, parameters[24] * left); | |||
ebf3.addFrom(1, 0, tmpBuf, 1, 0, numSamples, parameters[24] * right); | |||
} | |||
} | |||
} | |||
@@ -115,14 +117,14 @@ public: | |||
if (vo2[i]->getIsOn()) | |||
{ | |||
vo2[i]->doProcess(outPtrL, outPtrR, numSamples); | |||
obf.addFrom(0, 0, assbf, 0, 0, numSamples, left); | |||
obf.addFrom(1, 0, assbf, 1, 0, numSamples, right); | |||
ebf1.addFrom(0, 0, assbf, 0, 0, numSamples, parameters[22 + 24] * left); | |||
ebf1.addFrom(1, 0, assbf, 1, 0, numSamples, parameters[22 + 24] * right); | |||
ebf2.addFrom(0, 0, assbf, 0, 0, numSamples, parameters[23 + 24] * left); | |||
ebf2.addFrom(1, 0, assbf, 1, 0, numSamples, parameters[23 + 24] * right); | |||
ebf3.addFrom(0, 0, assbf, 0, 0, numSamples, parameters[24 + 24] * left); | |||
ebf3.addFrom(1, 0, assbf, 1, 0, numSamples, parameters[24 + 24] * right); | |||
obf.addFrom(0, 0, tmpBuf, 0, 0, numSamples, left); | |||
obf.addFrom(1, 0, tmpBuf, 1, 0, numSamples, right); | |||
ebf1.addFrom(0, 0, tmpBuf, 0, 0, numSamples, parameters[22 + 24] * left); | |||
ebf1.addFrom(1, 0, tmpBuf, 1, 0, numSamples, parameters[22 + 24] * right); | |||
ebf2.addFrom(0, 0, tmpBuf, 0, 0, numSamples, parameters[23 + 24] * left); | |||
ebf2.addFrom(1, 0, tmpBuf, 1, 0, numSamples, parameters[23 + 24] * right); | |||
ebf3.addFrom(0, 0, tmpBuf, 0, 0, numSamples, parameters[24 + 24] * left); | |||
ebf3.addFrom(1, 0, tmpBuf, 1, 0, numSamples, parameters[24 + 24] * right); | |||
} | |||
} | |||
} | |||
@@ -137,19 +139,24 @@ public: | |||
if (vo3[i]->getIsOn()) | |||
{ | |||
vo3[i]->doProcess(outPtrL, outPtrR, numSamples); | |||
obf.addFrom(0, 0, assbf, 0, 0, numSamples, left); | |||
obf.addFrom(1, 0, assbf, 1, 0, numSamples, right); | |||
ebf1.addFrom(0, 0, assbf, 0, 0, numSamples, parameters[22 + 48] * left); | |||
ebf1.addFrom(1, 0, assbf, 1, 0, numSamples, parameters[22 + 48] * right); | |||
ebf2.addFrom(0, 0, assbf, 0, 0, numSamples, parameters[23 + 48] * left); | |||
ebf2.addFrom(1, 0, assbf, 1, 0, numSamples, parameters[23 + 48] * right); | |||
ebf3.addFrom(0, 0, assbf, 0, 0, numSamples, parameters[24 + 48] * left); | |||
ebf3.addFrom(1, 0, assbf, 1, 0, numSamples, parameters[24 + 48] * right); | |||
obf.addFrom(0, 0, tmpBuf, 0, 0, numSamples, left); | |||
obf.addFrom(1, 0, tmpBuf, 1, 0, numSamples, right); | |||
ebf1.addFrom(0, 0, tmpBuf, 0, 0, numSamples, parameters[22 + 48] * left); | |||
ebf1.addFrom(1, 0, tmpBuf, 1, 0, numSamples, parameters[22 + 48] * right); | |||
ebf2.addFrom(0, 0, tmpBuf, 0, 0, numSamples, parameters[23 + 48] * left); | |||
ebf2.addFrom(1, 0, tmpBuf, 1, 0, numSamples, parameters[23 + 48] * right); | |||
ebf3.addFrom(0, 0, tmpBuf, 0, 0, numSamples, parameters[24 + 48] * left); | |||
ebf3.addFrom(1, 0, tmpBuf, 1, 0, numSamples, parameters[24 + 48] * right); | |||
} | |||
} | |||
} | |||
} | |||
void setBufferSize(const int size) | |||
{ | |||
tmpBuf.setSize(2, size); | |||
} | |||
void setSampleRate(const double s) | |||
{ | |||
if (sampleRate == s) | |||
@@ -224,7 +231,7 @@ public: | |||
break; | |||
} | |||
if (vo1[i]->getIsReleased()) | |||
if (v[i]->getIsReleased()) | |||
{ | |||
OldestReleased = (v[i]->getOrdinal() < tmpReleased) ? i : OldestReleased; | |||
tmpReleased = v[OldestReleased]->getOrdinal(); | |||
@@ -400,6 +407,8 @@ private: | |||
double sampleRate; | |||
int benchwarmer; | |||
AudioSampleBuffer tmpBuf; | |||
VexVoice* vo1[kNumVoices]; | |||
VexVoice* vo2[kNumVoices]; | |||
VexVoice* vo3[kNumVoices]; | |||
@@ -158,7 +158,7 @@ void VexVoice::start(float f, float v, int n, int preroll, double s, long o) | |||
isOn = true; | |||
isReleased = false; | |||
v = (v * v) - 1.0f; | |||
v = (v * v) - 1.0f; | |||
Avelocity = (v * bipolar(parameters[18 + poff])); | |||
Fvelocity = (1.0f + v) * bipolar(parameters[13 + poff]); | |||
@@ -8,7 +8,7 @@ | |||
#ifndef _denormals_ | |||
#define _denormals_ | |||
#define undenormalise(sample) if(((*(unsigned int*)&sample)&0x7f800000)==0) sample=0.0f | |||
#define undenormalise(sample) { float* const _tmp_s(&sample); if (((*(unsigned int*)_tmp_s)&0x7f800000)==0) sample=0.0f; } | |||
#endif//_denormals_ | |||