kopia lustrzana https://github.com/jameshball/osci-render
Allow Lua effects to access frequency, step, phase, sampleRate variables
rodzic
d553e94c6f
commit
6802455301
|
@ -617,6 +617,13 @@ void OscirenderAudioProcessor::processBlock(juce::AudioBuffer<float>& buffer, ju
|
||||||
juce::SpinLock::ScopedLockType lock1(parsersLock);
|
juce::SpinLock::ScopedLockType lock1(parsersLock);
|
||||||
juce::SpinLock::ScopedLockType lock2(effectsLock);
|
juce::SpinLock::ScopedLockType lock2(effectsLock);
|
||||||
synth.renderNextBlock(outputBuffer3d, midiMessages, 0, buffer.getNumSamples());
|
synth.renderNextBlock(outputBuffer3d, midiMessages, 0, buffer.getNumSamples());
|
||||||
|
for (int i = 0; i < synth.getNumVoices(); i++) {
|
||||||
|
auto voice = dynamic_cast<ShapeVoice*>(synth.getVoice(i));
|
||||||
|
if (voice->isVoiceActive()) {
|
||||||
|
customEffect->frequency = voice->getFrequency();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
midiMessages.clear();
|
midiMessages.clear();
|
||||||
|
|
|
@ -24,17 +24,23 @@ Point CustomEffect::apply(int index, Point input, const std::vector<double>& val
|
||||||
parser->setVariable("y", y);
|
parser->setVariable("y", y);
|
||||||
parser->setVariable("z", z);
|
parser->setVariable("z", z);
|
||||||
|
|
||||||
auto result = parser->run(L, LuaVariables{sampleRate, 0}, step, phase);
|
auto result = parser->run(L, LuaVariables{sampleRate, frequency}, step, phase);
|
||||||
if (result.size() >= 3) {
|
if (result.size() >= 2) {
|
||||||
x = result[0];
|
x = result[0];
|
||||||
y = result[1];
|
y = result[1];
|
||||||
z = result[2];
|
if (result.size() >= 3) {
|
||||||
|
z = result[2];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
parser->resetErrors();
|
parser->resetErrors();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
step++;
|
||||||
|
phase += 2 * std::numbers::pi * frequency / sampleRate;
|
||||||
|
phase = MathUtil::wrapAngle(phase);
|
||||||
|
|
||||||
return Point(
|
return Point(
|
||||||
(1 - effectScale) * input.x + effectScale * x,
|
(1 - effectScale) * input.x + effectScale * x,
|
||||||
(1 - effectScale) * input.y + effectScale * y,
|
(1 - effectScale) * input.y + effectScale * y,
|
||||||
|
|
|
@ -18,6 +18,8 @@ public:
|
||||||
|
|
||||||
juce::String getCode();
|
juce::String getCode();
|
||||||
|
|
||||||
|
double frequency = 0;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const juce::String DEFAULT_SCRIPT = "return { x, y, z }";
|
const juce::String DEFAULT_SCRIPT = "return { x, y, z }";
|
||||||
juce::String code = DEFAULT_SCRIPT;
|
juce::String code = DEFAULT_SCRIPT;
|
||||||
|
|
|
@ -63,6 +63,10 @@ void ShapeVoice::incrementShapeDrawing() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double ShapeVoice::getFrequency() {
|
||||||
|
return actualFrequency;
|
||||||
|
}
|
||||||
|
|
||||||
// should be called if the current file is changed so that we interrupt
|
// should be called if the current file is changed so that we interrupt
|
||||||
// any currently playing sounds / voices
|
// any currently playing sounds / voices
|
||||||
void ShapeVoice::updateSound(juce::SynthesiserSound* sound) {
|
void ShapeVoice::updateSound(juce::SynthesiserSound* sound) {
|
||||||
|
@ -76,9 +80,9 @@ void ShapeVoice::renderNextBlock(juce::AudioSampleBuffer& outputBuffer, int star
|
||||||
|
|
||||||
int numChannels = outputBuffer.getNumChannels();
|
int numChannels = outputBuffer.getNumChannels();
|
||||||
|
|
||||||
float actualFrequency = frequency * pitchWheelAdjustment;
|
if (audioProcessor.midiEnabled->getBoolValue()) {
|
||||||
|
actualFrequency = frequency * pitchWheelAdjustment;
|
||||||
if (!audioProcessor.midiEnabled->getBoolValue()) {
|
} else {
|
||||||
actualFrequency = audioProcessor.frequency;
|
actualFrequency = audioProcessor.frequency;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@ public:
|
||||||
|
|
||||||
|
|
||||||
void incrementShapeDrawing();
|
void incrementShapeDrawing();
|
||||||
|
double getFrequency();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const double MIN_TRACE = 0.005;
|
const double MIN_TRACE = 0.005;
|
||||||
|
@ -37,6 +38,7 @@ private:
|
||||||
|
|
||||||
bool currentlyPlaying = false;
|
bool currentlyPlaying = false;
|
||||||
double frequency = 1.0;
|
double frequency = 1.0;
|
||||||
|
std::atomic<double> actualFrequency = 1.0;
|
||||||
double velocity = 1.0;
|
double velocity = 1.0;
|
||||||
double pitchWheelAdjustment = 1.0;
|
double pitchWheelAdjustment = 1.0;
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue