Browse Source

Fixed SV Filter load / save bug

master
edgeeffect 22 years ago
parent
commit
95c7531055
2 changed files with 38 additions and 39 deletions
  1. +34
    -33
      SpiralSound/Plugins/SVFilterPlugin/SVFilterPlugin.C
  2. +4
    -6
      SpiralSound/Plugins/SVFilterPlugin/SVFilterPluginGUI.C

+ 34
- 33
SpiralSound/Plugins/SVFilterPlugin/SVFilterPlugin.C View File

@@ -18,11 +18,9 @@
#include <math.h>
#include "SVFilterPlugin.h"
#include "SVFilterPluginGUI.h"
#include <FL/Fl_Button.h>
#include "SpiralIcon.xpm"

#define PI 3.141592654

static const double PI = 3.141592654;
static const int GRANULARITY = 10;

extern "C" {
@@ -64,20 +62,20 @@ m_l(0.0f),
m_p(0.0f),
m_n(0.0f)
{
m_PluginInfo.Name="SVF";
m_Version = 2;
m_PluginInfo.Name="SVF";
m_PluginInfo.Width=120;
m_PluginInfo.Height=110;
m_PluginInfo.NumInputs=3;
m_PluginInfo.NumOutputs=5;
m_PluginInfo.PortTips.push_back("Input");
m_PluginInfo.PortTips.push_back("Cutoff CV");
m_PluginInfo.PortTips.push_back("Emphasis CV");
m_PluginInfo.PortTips.push_back("Input");
m_PluginInfo.PortTips.push_back("Cutoff CV");
m_PluginInfo.PortTips.push_back("Emphasis CV");
m_PluginInfo.PortTips.push_back("LowPass output");
m_PluginInfo.PortTips.push_back("BandPass output");
m_PluginInfo.PortTips.push_back("HighPass output");
m_PluginInfo.PortTips.push_back("Notch output");
m_PluginInfo.PortTips.push_back("Peaking output");
m_PluginInfo.PortTips.push_back("Peaking output");
m_AudioCH->Register("Cutoff",&Cutoff);
m_AudioCH->Register("Resonance",&Resonance);
}
@@ -87,9 +85,9 @@ SVFilterPlugin::~SVFilterPlugin()
}

PluginInfo &SVFilterPlugin::Initialise(const HostInfo *Host)
{
PluginInfo& Info = SpiralPlugin::Initialise(Host);
fs = m_HostInfo->SAMPLERATE;
{
PluginInfo& Info = SpiralPlugin::Initialise(Host);
fs = m_HostInfo->SAMPLERATE;
return Info;
}

@@ -103,57 +101,60 @@ SpiralGUIType *SVFilterPlugin::CreateGUI()
void SVFilterPlugin::Execute()
{
float in;
for (int n=0; n<m_HostInfo->BUFSIZE; n++)
{
if (n%GRANULARITY==0)
{
fc = 4000.0f*(Cutoff+GetInput(1,n));
q = 1-Resonance+GetInput(2,n);
fc = 4000.0f*(Cutoff+GetInput(1,n));
q = 1-Resonance+GetInput(2,n);
m_f = 2.0f*sin(PI*fc/fs);
}
in = GetInput(0,n);
float scale=0.5f;
m_l = m_l + m_f*m_b;
m_h = scale*in - m_l - q*m_b;
m_b = m_b + m_f*m_h;
m_n = m_l + m_h;
m_p = m_l - m_h;
SetOutput(0,n,m_l);
SetOutput(0,n,m_l);
SetOutput(1,n,m_b);
SetOutput(2,n,m_h);
SetOutput(3,n,m_n);
SetOutput(4,n,m_p);
}
}
void SVFilterPlugin::Randomise()
{
}

// This should be streaming the GUI parameters to make it easier to do UpdateValues()
void SVFilterPlugin::StreamOut(ostream &s)
{
s<<m_Version<<" "<<fc<<" "<<q<<" ";
void SVFilterPlugin::StreamOut (ostream &s) {
s << m_Version << " " << Cutoff << " " << Resonance << " ";
}

// This should be streaming the GUI parameters to make it easier to do UpdateValues()
void SVFilterPlugin::StreamIn(istream &s)
{
int version;
s>>version;
s>>fc>>q;
void SVFilterPlugin::StreamIn (istream &s) {
int version;
double dummy;
s >> version;
switch (version) {
case 1: // s >> fc >> q;
s >> dummy >> dummy;
break;
case 2: s >> Cutoff >> Resonance;
break;
}
}

void SVFilterPlugin::Clear()
{
m_h=0.0f;
m_b=0.1f;
m_b=0.1f;
m_l=0.0f;
m_p=0.0f;
m_n=0.0f;


+ 4
- 6
SpiralSound/Plugins/SVFilterPlugin/SVFilterPluginGUI.C View File

@@ -28,7 +28,7 @@ static const int GUIBG2_COLOUR = 145;

SVFilterPluginGUI::SVFilterPluginGUI(int w, int h,SVFilterPlugin *o,ChannelHandler *ch,const HostInfo *Info) :
SpiralPluginGUI(w,h,o,ch)
{
{
Cutoff = new Fl_Slider(15, 20, 20, 70, "Cutoff");
Cutoff->type(4);
Cutoff->selection_color(GUI_COLOUR);
@@ -53,25 +53,23 @@ SpiralPluginGUI(w,h,o,ch)
void SVFilterPluginGUI::UpdateValues(SpiralPlugin *o)
{
SVFilterPlugin *Plugin = (SVFilterPlugin*)o;
// Cutoff->value(100.0f-sqrt(Plugin->GetCutoff()-10.0f));
Cutoff->value (1.0f - Plugin->GetCutoff());
Resonance->value(Plugin->GetResonance()-1.0f);
Resonance->value(Plugin->GetResonance());
}

inline void SVFilterPluginGUI::cb_Cutoff_i(Fl_Slider* o, void* v)
{
float value=1.0f-o->value();
cerr << value << " " << o->value() << endl;
// m_Plugin->SetCutoff((value*value)+10.0f);
m_GUICH->Set("Cutoff",value);
}

void SVFilterPluginGUI::cb_Cutoff(Fl_Slider* o, void* v)
{ ((SVFilterPluginGUI*)(o->parent()))->cb_Cutoff_i(o,v); }

inline void SVFilterPluginGUI::cb_Resonance_i(Fl_Knob* o, void* v)
{ m_GUICH->Set("Resonance",(float)o->value()); }

void SVFilterPluginGUI::cb_Resonance(Fl_Knob* o, void* v)
void SVFilterPluginGUI::cb_Resonance(Fl_Knob* o, void* v)
{ ((SVFilterPluginGUI*)(o->parent()))->cb_Resonance_i(o,v); }

const string SVFilterPluginGUI::GetHelpText(const string &loc){


Loading…
Cancel
Save