Browse Source

Added an option to Viewport::setViewedComponent. Fixed a decibel conversion bug. Made linux windows open in a parent window. Added String::toWideCharPointer method. Got the jucer to emit linker option flags in VS2010 projects.

tags/2021-05-28
Julian Storer 14 years ago
parent
commit
e14f56562a
1 changed files with 68 additions and 31 deletions
  1. +68
    -31
      extras/audio plugins/demo/Source/PluginProcessor.cpp

+ 68
- 31
extras/audio plugins/demo/Source/PluginProcessor.cpp View File

@@ -135,11 +135,21 @@ private:
JuceDemoPluginAudioProcessor::JuceDemoPluginAudioProcessor()
: delayBuffer (2, 12000)
{
// Set up some default values..
gain = 1.0f;
delay = 0.5f;
// Set up parameters and default values..
AudioProcessorParameter* gainParam = new AudioProcessorParameter ("gain");
gainParam->resetWithDefault (1.0);
parameters.add (gainParam);
lastUIWidth = 400;
AudioProcessorParameter* delayParam = new AudioProcessorParameter ("delay");
delayParam->resetWithDefault (0.5);
parameters.add (delayParam);
AudioProcessorParameter* cutOffParam = new AudioProcessorParameter ("cutoff", AudioProcessorParameter::hertz);
cutOffParam->setRange (Range<double> (20.0, 20000.0));
cutOffParam->resetWithDefault (10000.0);
parameters.add (cutOffParam);
lastUIWidth = 600;
lastUIHeight = 200;
lastPosInfo.resetToDefault();
@@ -150,6 +160,8 @@ JuceDemoPluginAudioProcessor::JuceDemoPluginAudioProcessor()
synth.addVoice (new SineWaveVoice()); // These voices will play our custom sine-wave sounds..
synth.addSound (new SineWaveSound());
zeromem (lastSample, sizeof (lastSample));
}
JuceDemoPluginAudioProcessor::~JuceDemoPluginAudioProcessor()
@@ -159,7 +171,7 @@ JuceDemoPluginAudioProcessor::~JuceDemoPluginAudioProcessor()
//==============================================================================
int JuceDemoPluginAudioProcessor::getNumParameters()
{
return totalNumParams;
return parameters.size();
}
float JuceDemoPluginAudioProcessor::getParameter (int index)
@@ -167,12 +179,8 @@ float JuceDemoPluginAudioProcessor::getParameter (int index)
// This method will be called by the host, probably on the audio thread, so
// it's absolutely time-critical. Don't use critical sections or anything
// UI-related, or anything at all that may block in any way!
switch (index)
{
case gainParam: return gain;
case delayParam: return delay;
default: return 0.0f;
}
jassert (parameters [index] != 0);
parameters.getUnchecked (index)->getValue();
}
void JuceDemoPluginAudioProcessor::setParameter (int index, float newValue)
@@ -180,24 +188,14 @@ void JuceDemoPluginAudioProcessor::setParameter (int index, float newValue)
// This method will be called by the host, probably on the audio thread, so
// it's absolutely time-critical. Don't use critical sections or anything
// UI-related, or anything at all that may block in any way!
switch (index)
{
case gainParam: gain = newValue; break;
case delayParam: delay = newValue; break;
default: break;
}
jassert (parameters [index] != 0);
parameters.getUnchecked (index)->setValue (newValue);
}
const String JuceDemoPluginAudioProcessor::getParameterName (int index)
{
switch (index)
{
case gainParam: return "gain";
case delayParam: return "delay";
default: break;
}
return String::empty;
jassert (parameters [index] != 0);
return parameters.getUnchecked (index)->getName();
}
const String JuceDemoPluginAudioProcessor::getParameterText (int index)
@@ -205,6 +203,26 @@ const String JuceDemoPluginAudioProcessor::getParameterText (int index)
return String (getParameter (index), 2);
}
int JuceDemoPluginAudioProcessor::indexOfParameter (const String& parameterName) const
{
for (int i = parameters.size(); --i >= 0;)
if (parameters.getUnchecked(i)->getName() == name)
return i;
return -1;
}
AudioProcessorParameter* JuceDemoPluginAudioProcessor::getParameterObject (int index) const
{
return parameters [index];
}
AudioProcessorParameter* JuceDemoPluginAudioProcessor::getParameterWithName (const String& parameterName) const
{
return parameters [indexOfParameter (parameterName)];
}
//==============================================================================
void JuceDemoPluginAudioProcessor::prepareToPlay (double sampleRate, int /*samplesPerBlock*/)
{
@@ -233,6 +251,12 @@ void JuceDemoPluginAudioProcessor::processBlock (AudioSampleBuffer& buffer, Midi
{
const int numSamples = buffer.getNumSamples();
int channel, dp = 0;
float gain = getParameter (0);
float delay = getParameter (1);
float cutOff = getParameter (2);
// Get one-pole filter coefficient
const float filterCoeff = (float_Pi * cutOff / getSampleRate());
// Go through the incoming data, and apply our gain to it...
for (channel = 0; channel < getNumInputChannels(); ++channel)
@@ -255,7 +279,12 @@ void JuceDemoPluginAudioProcessor::processBlock (AudioSampleBuffer& buffer, Midi
for (int i = 0; i < numSamples; ++i)
{
const float in = channelData[i];
channelData[i] += delayData[dp];
// filter delay data
lastSample [channel] += filterCoeff * (delayData[dp] - lastSample [channel]);
// add to output buffers
channelData[i] += lastSample [channel];
delayData[dp] = (delayData[dp] + in) * delay;
if (++dp > delayBuffer.getNumSamples())
dp = 0;
@@ -303,8 +332,12 @@ void JuceDemoPluginAudioProcessor::getStateInformation (MemoryBlock& destData)
// add some attributes to it..
xml.setAttribute ("uiWidth", lastUIWidth);
xml.setAttribute ("uiHeight", lastUIHeight);
xml.setAttribute ("gain", gain);
xml.setAttribute ("delay", delay);
for (int i = 0; i < parameters.size(); ++i)
{
const AudioProcessorParameter* const p = parameters.getUnchecked(i);
xml.setAttribute (p->getName(), p->getValue());
}
// then use this helper function to stuff it into the binary blob and return it..
copyXmlToBinary (xml, destData);
@@ -323,12 +356,16 @@ void JuceDemoPluginAudioProcessor::setStateInformation (const void* data, int si
// make sure that it's actually our type of XML object..
if (xmlState->hasTagName ("MYPLUGINSETTINGS"))
{
// ok, now pull out our parameters..
// ok, now pull out our plugin-specific attributes..
lastUIWidth = xmlState->getIntAttribute ("uiWidth", lastUIWidth);
lastUIHeight = xmlState->getIntAttribute ("uiHeight", lastUIHeight);
gain = (float) xmlState->getDoubleAttribute ("gain", gain);
delay = (float) xmlState->getDoubleAttribute ("delay", delay);
// and all the parameters.
for (int i = 0; i < parameters.size(); ++i)
{
const AudioProcessorParameter* const p = parameters.getUnchecked(i);
p->setValue (xmlState->getDoubleAttribute (p->getName(), p->getDefault()));
}
}
}
}


Loading…
Cancel
Save