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 <math.h>
#include "SVFilterPlugin.h" #include "SVFilterPlugin.h"
#include "SVFilterPluginGUI.h" #include "SVFilterPluginGUI.h"
#include <FL/Fl_Button.h>
#include "SpiralIcon.xpm" #include "SpiralIcon.xpm"


#define PI 3.141592654

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


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


PluginInfo &SVFilterPlugin::Initialise(const HostInfo *Host) 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; return Info;
} }


@@ -103,57 +101,60 @@ SpiralGUIType *SVFilterPlugin::CreateGUI()
void SVFilterPlugin::Execute() void SVFilterPlugin::Execute()
{ {
float in; float in;
for (int n=0; n<m_HostInfo->BUFSIZE; n++) for (int n=0; n<m_HostInfo->BUFSIZE; n++)
{ {
if (n%GRANULARITY==0) 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); m_f = 2.0f*sin(PI*fc/fs);
} }
in = GetInput(0,n); in = GetInput(0,n);
float scale=0.5f; float scale=0.5f;
m_l = m_l + m_f*m_b; m_l = m_l + m_f*m_b;
m_h = scale*in - m_l - q*m_b; m_h = scale*in - m_l - q*m_b;
m_b = m_b + m_f*m_h; m_b = m_b + m_f*m_h;
m_n = m_l + m_h; m_n = m_l + m_h;
m_p = 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(1,n,m_b);
SetOutput(2,n,m_h); SetOutput(2,n,m_h);
SetOutput(3,n,m_n); SetOutput(3,n,m_n);
SetOutput(4,n,m_p); SetOutput(4,n,m_p);
} }
} }
void SVFilterPlugin::Randomise() 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() void SVFilterPlugin::Clear()
{ {
m_h=0.0f; m_h=0.0f;
m_b=0.1f;
m_b=0.1f;
m_l=0.0f; m_l=0.0f;
m_p=0.0f; m_p=0.0f;
m_n=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) : SVFilterPluginGUI::SVFilterPluginGUI(int w, int h,SVFilterPlugin *o,ChannelHandler *ch,const HostInfo *Info) :
SpiralPluginGUI(w,h,o,ch) SpiralPluginGUI(w,h,o,ch)
{
{
Cutoff = new Fl_Slider(15, 20, 20, 70, "Cutoff"); Cutoff = new Fl_Slider(15, 20, 20, 70, "Cutoff");
Cutoff->type(4); Cutoff->type(4);
Cutoff->selection_color(GUI_COLOUR); Cutoff->selection_color(GUI_COLOUR);
@@ -53,25 +53,23 @@ SpiralPluginGUI(w,h,o,ch)
void SVFilterPluginGUI::UpdateValues(SpiralPlugin *o) void SVFilterPluginGUI::UpdateValues(SpiralPlugin *o)
{ {
SVFilterPlugin *Plugin = (SVFilterPlugin*)o; SVFilterPlugin *Plugin = (SVFilterPlugin*)o;
// Cutoff->value(100.0f-sqrt(Plugin->GetCutoff()-10.0f));
Cutoff->value (1.0f - Plugin->GetCutoff()); 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) inline void SVFilterPluginGUI::cb_Cutoff_i(Fl_Slider* o, void* v)
{ {
float value=1.0f-o->value(); float value=1.0f-o->value();
cerr << value << " " << o->value() << endl;
// m_Plugin->SetCutoff((value*value)+10.0f);
m_GUICH->Set("Cutoff",value); m_GUICH->Set("Cutoff",value);
} }

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


inline void SVFilterPluginGUI::cb_Resonance_i(Fl_Knob* o, void* v) inline void SVFilterPluginGUI::cb_Resonance_i(Fl_Knob* o, void* v)
{ m_GUICH->Set("Resonance",(float)o->value()); } { 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); } { ((SVFilterPluginGUI*)(o->parent()))->cb_Resonance_i(o,v); }


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


Loading…
Cancel
Save