diff --git a/SpiralSound/Plugins/SVFilterPlugin/SVFilterPlugin.C b/SpiralSound/Plugins/SVFilterPlugin/SVFilterPlugin.C index 21f32c9..e8b14f5 100644 --- a/SpiralSound/Plugins/SVFilterPlugin/SVFilterPlugin.C +++ b/SpiralSound/Plugins/SVFilterPlugin/SVFilterPlugin.C @@ -18,11 +18,9 @@ #include #include "SVFilterPlugin.h" #include "SVFilterPluginGUI.h" -#include #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; nBUFSIZE; 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<>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; diff --git a/SpiralSound/Plugins/SVFilterPlugin/SVFilterPluginGUI.C b/SpiralSound/Plugins/SVFilterPlugin/SVFilterPluginGUI.C index d8e9d27..60c34c5 100644 --- a/SpiralSound/Plugins/SVFilterPlugin/SVFilterPluginGUI.C +++ b/SpiralSound/Plugins/SVFilterPlugin/SVFilterPluginGUI.C @@ -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){