From 61dabf1965881cba52d61d4d54730f515666f995 Mon Sep 17 00:00:00 2001 From: nebogeo Date: Wed, 18 Sep 2002 20:03:17 +0000 Subject: [PATCH] merged branches --- SpiralSound/ChannelHandler.C | 312 ++++++++++++++++++ SpiralSound/ChannelHandler.h | 136 ++++++++ SpiralSound/Midi.h | 2 +- SpiralSound/Plugins/AmpPlugin/AmpPlugin.C | 11 +- SpiralSound/Plugins/AmpPlugin/AmpPlugin.h | 4 +- SpiralSound/Plugins/AmpPlugin/AmpPluginGUI.C | 20 +- SpiralSound/Plugins/AmpPlugin/AmpPluginGUI.h | 4 +- SpiralSound/Plugins/AmpPlugin/Makefile.in | 5 + .../Plugins/ComplexEnvelopePlugin/Makefile.in | 5 + .../ControllerPlugin/ControllerPlugin.C | 113 +++---- .../ControllerPlugin/ControllerPlugin.h | 32 +- .../ControllerPlugin/ControllerPluginGUI.C | 47 ++- .../ControllerPlugin/ControllerPluginGUI.h | 7 +- .../Plugins/ControllerPlugin/Makefile.in | 5 + SpiralSound/Plugins/DelayPlugin/DelayPlugin.C | 9 +- SpiralSound/Plugins/DelayPlugin/DelayPlugin.h | 8 +- .../Plugins/DelayPlugin/DelayPluginGUI.C | 20 +- .../Plugins/DelayPlugin/DelayPluginGUI.h | 9 +- SpiralSound/Plugins/DelayPlugin/Makefile.in | 5 + .../DistributorPlugin/DistributorPlugin.C | 3 +- .../DistributorPlugin/DistributorPlugin.h | 3 - .../DistributorPlugin/DistributorPluginGUI.C | 7 +- .../DistributorPlugin/DistributorPluginGUI.h | 9 +- .../Plugins/DistributorPlugin/Makefile.in | 6 +- SpiralSound/Plugins/EchoPlugin/EchoPlugin.C | 9 +- SpiralSound/Plugins/EchoPlugin/EchoPlugin.h | 8 +- .../Plugins/EchoPlugin/EchoPluginGUI.C | 22 +- .../Plugins/EchoPlugin/EchoPluginGUI.h | 7 +- SpiralSound/Plugins/EchoPlugin/Makefile.in | 5 + SpiralSound/Plugins/Edit.sh | 4 +- .../EnvFollowerPlugin/EnvFollowerPlugin.C | 9 +- .../EnvFollowerPlugin/EnvFollowerPlugin.h | 5 - .../EnvFollowerPlugin/EnvFollowerPluginGUI.C | 17 +- .../EnvFollowerPlugin/EnvFollowerPluginGUI.h | 8 +- .../Plugins/EnvFollowerPlugin/Makefile.in | 5 + .../Plugins/EnvelopePlugin/EnvelopePlugin.C | 13 +- .../Plugins/EnvelopePlugin/EnvelopePlugin.h | 12 +- .../EnvelopePlugin/EnvelopePluginGUI.C | 48 +-- .../EnvelopePlugin/EnvelopePluginGUI.h | 8 +- .../Plugins/EnvelopePlugin/Makefile.in | 5 + .../Plugins/FilterPlugin/FilterPlugin.C | 14 +- .../Plugins/FilterPlugin/FilterPlugin.h | 15 +- .../Plugins/FilterPlugin/FilterPluginGUI.C | 26 +- .../Plugins/FilterPlugin/FilterPluginGUI.h | 7 +- SpiralSound/Plugins/FilterPlugin/Makefile.in | 5 + SpiralSound/Plugins/JackPlugin/JackPlugin.C | 42 ++- SpiralSound/Plugins/JackPlugin/JackPlugin.h | 25 +- .../Plugins/JackPlugin/JackPluginGUI.C | 27 +- .../Plugins/JackPlugin/JackPluginGUI.h | 10 +- SpiralSound/Plugins/JackPlugin/Makefile.in | 5 + .../Plugins/JoystickPlugin/Makefile.in | 6 +- .../Plugins/LADSPAPlugin/LADSPAPlugin.C | 163 +++++++-- .../Plugins/LADSPAPlugin/LADSPAPlugin.h | 70 +++- .../Plugins/LADSPAPlugin/LADSPAPluginGUI.C | 112 ++----- .../Plugins/LADSPAPlugin/LADSPAPluginGUI.h | 37 +-- SpiralSound/Plugins/LADSPAPlugin/Makefile.in | 5 + SpiralSound/Plugins/LFOPlugin/LFOPlugin.C | 7 +- SpiralSound/Plugins/LFOPlugin/LFOPlugin.h | 8 +- SpiralSound/Plugins/LFOPlugin/LFOPluginGUI.C | 31 +- SpiralSound/Plugins/LFOPlugin/LFOPluginGUI.h | 9 +- SpiralSound/Plugins/LFOPlugin/Makefile | 9 +- SpiralSound/Plugins/LFOPlugin/Makefile.in | 5 + SpiralSound/Plugins/MatrixPlugin/Makefile.in | 5 + .../Plugins/MatrixPlugin/MatrixPlugin.C | 70 +++- .../Plugins/MatrixPlugin/MatrixPlugin.h | 26 +- .../Plugins/MatrixPlugin/MatrixPluginGUI.C | 103 ++++-- .../Plugins/MatrixPlugin/MatrixPluginGUI.h | 14 +- SpiralSound/Plugins/MeterPlugin/Makefile | 4 +- SpiralSound/Plugins/MidiPlugin/Makefile.in | 5 + SpiralSound/Plugins/MidiPlugin/MidiPlugin.C | 27 +- SpiralSound/Plugins/MidiPlugin/MidiPlugin.h | 17 +- .../Plugins/MidiPlugin/MidiPluginGUI.C | 32 +- .../Plugins/MidiPlugin/MidiPluginGUI.h | 7 +- SpiralSound/Plugins/MixerPlugin/Makefile.in | 5 + SpiralSound/Plugins/MixerPlugin/MixerPlugin.C | 20 +- SpiralSound/Plugins/MixerPlugin/MixerPlugin.h | 15 +- .../Plugins/MixerPlugin/MixerPluginGUI.C | 19 +- .../Plugins/MixerPlugin/MixerPluginGUI.h | 8 +- .../Plugins/MoogFilterPlugin/Makefile.in | 6 + .../MoogFilterPlugin/MoogFilterPlugin.C | 9 +- .../MoogFilterPlugin/MoogFilterPlugin.h | 5 - .../MoogFilterPlugin/MoogFilterPluginGUI.C | 18 +- .../MoogFilterPlugin/MoogFilterPluginGUI.h | 7 +- .../Plugins/NoteSnapPlugin/Makefile.in | 5 + .../Plugins/NoteSnapPlugin/NoteSnapPlugin.C | 3 +- .../Plugins/NoteSnapPlugin/NoteSnapPlugin.h | 3 - .../NoteSnapPlugin/NoteSnapPluginGUI.C | 7 +- .../NoteSnapPlugin/NoteSnapPluginGUI.h | 6 +- .../Plugins/OscillatorPlugin/Makefile.in | 5 + .../OscillatorPlugin/OscillatorPlugin.C | 13 +- .../OscillatorPlugin/OscillatorPlugin.h | 9 - .../OscillatorPlugin/OscillatorPluginGUI.C | 72 ++-- .../OscillatorPlugin/OscillatorPluginGUI.h | 7 +- SpiralSound/Plugins/OutputPlugin/Makefile.in | 5 + .../Plugins/OutputPlugin/OutputPlugin.C | 16 +- .../Plugins/OutputPlugin/OutputPlugin.h | 9 +- .../Plugins/OutputPlugin/OutputPluginGUI.C | 14 +- .../Plugins/OutputPlugin/OutputPluginGUI.h | 7 +- .../Plugins/PoshSamplerPlugin/Makefile.in | 5 + .../PoshSamplerPlugin/PoshSamplerPlugin.C | 72 +++- .../PoshSamplerPlugin/PoshSamplerPlugin.h | 62 +++- .../PoshSamplerPlugin/PoshSamplerPluginGUI.C | 185 ++++++++--- .../PoshSamplerPlugin/PoshSamplerPluginGUI.h | 15 +- SpiralSound/Plugins/RingModPlugin/Makefile.in | 5 + .../Plugins/RingModPlugin/RingModPlugin.C | 8 +- .../Plugins/RingModPlugin/RingModPlugin.h | 6 +- .../Plugins/RingModPlugin/RingModPluginGUI.C | 13 +- .../Plugins/RingModPlugin/RingModPluginGUI.h | 7 +- .../Plugins/SVFilterPlugin/Makefile.in | 5 + .../Plugins/SVFilterPlugin/SVFilterPlugin.C | 9 +- .../Plugins/SVFilterPlugin/SVFilterPlugin.h | 5 - .../SVFilterPlugin/SVFilterPluginGUI.C | 20 +- .../SVFilterPlugin/SVFilterPluginGUI.h | 7 +- .../Plugins/SampleHoldPlugin/Makefile.in | 5 + .../SampleHoldPlugin/SampleHoldPlugin.C | 3 +- .../SampleHoldPlugin/SampleHoldPlugin.h | 3 - .../SampleHoldPlugin/SampleHoldPluginGUI.C | 7 +- .../SampleHoldPlugin/SampleHoldPluginGUI.h | 8 +- SpiralSound/Plugins/SamplerPlugin/Makefile.in | 5 + SpiralSound/Plugins/ScopePlugin/Makefile.in | 5 + SpiralSound/Plugins/ScopePlugin/ScopePlugin.C | 21 +- SpiralSound/Plugins/ScopePlugin/ScopePlugin.h | 7 +- .../Plugins/ScopePlugin/ScopePluginGUI.C | 34 +- .../Plugins/ScopePlugin/ScopePluginGUI.h | 7 +- SpiralSound/Plugins/SeqPlugin/Makefile.in | 5 + .../Plugins/SeqSelectorPlugin/Makefile.in | 5 + SpiralSound/Plugins/SmoothPlugin/Makefile.in | 5 + .../Plugins/SmoothPlugin/SmoothPlugin.C | 9 +- .../Plugins/SmoothPlugin/SmoothPlugin.h | 7 +- .../Plugins/SmoothPlugin/SmoothPluginGUI.C | 18 +- .../Plugins/SmoothPlugin/SmoothPluginGUI.h | 8 +- .../Plugins/SpiralLoopPlugin/Makefile.in | 5 + SpiralSound/Plugins/SpiralPlugin.C | 23 +- SpiralSound/Plugins/SpiralPlugin.h | 36 +- SpiralSound/Plugins/SpiralPluginGUI.C | 18 +- SpiralSound/Plugins/SpiralPluginGUI.h | 23 +- .../Plugins/SplitterPlugin/Makefile.in | 5 + .../Plugins/SplitterPlugin/SplitterPlugin.C | 3 +- .../Plugins/SplitterPlugin/SplitterPlugin.h | 3 - .../SplitterPlugin/SplitterPluginGUI.C | 7 +- .../SplitterPlugin/SplitterPluginGUI.h | 8 +- .../Plugins/StereoMixerPlugin/Makefile.in | 5 + .../StereoMixerPlugin/StereoMixerPlugin.C | 21 +- .../StereoMixerPlugin/StereoMixerPlugin.h | 20 +- .../StereoMixerPlugin/StereoMixerPluginGUI.C | 24 +- .../StereoMixerPlugin/StereoMixerPluginGUI.h | 7 +- SpiralSound/Plugins/StreamPlugin/Makefile.in | 5 + .../Plugins/WaveShaperPlugin/Makefile.in | 5 + .../Plugins/WaveTablePlugin/Makefile.in | 5 + .../Plugins/WaveTablePlugin/WaveTablePlugin.C | 26 +- .../Plugins/WaveTablePlugin/WaveTablePlugin.h | 16 +- .../WaveTablePlugin/WaveTablePluginGUI.C | 88 ++--- .../WaveTablePlugin/WaveTablePluginGUI.h | 9 +- SpiralSound/Plugins/Widgets/Fl_Knob.H | 16 +- SpiralSound/Plugins/Widgets/Fl_Knob.cxx | 139 ++++++-- SpiralSound/Plugins/Widgets/Fl_Knob.fld | 142 +++++--- SpiralSound/Plugins/XFadePlugin/Makefile.in | 5 + SpiralSound/Plugins/XFadePlugin/XFadePlugin.C | 8 +- SpiralSound/Plugins/XFadePlugin/XFadePlugin.h | 6 +- .../Plugins/XFadePlugin/XFadePluginGUI.C | 13 +- .../Plugins/XFadePlugin/XFadePluginGUI.h | 7 +- SpiralSound/Sample.C | 2 +- SpiralSound/Sample.h | 2 +- 163 files changed, 2327 insertions(+), 1169 deletions(-) create mode 100644 SpiralSound/ChannelHandler.C create mode 100644 SpiralSound/ChannelHandler.h diff --git a/SpiralSound/ChannelHandler.C b/SpiralSound/ChannelHandler.C new file mode 100644 index 0000000..96c4d7b --- /dev/null +++ b/SpiralSound/ChannelHandler.C @@ -0,0 +1,312 @@ +/* SpiralSound + * Copyleft (C) 2002 David Griffiths + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + +#include "ChannelHandler.h" +#include + +ChannelHandler::ChannelHandler() : +m_UpdateIndicator(false) +{ + m_Mutex = new pthread_mutex_t; + m_Command[0]=0; + m_Command[1]=0; + m_BulkSrc=NULL; + m_BulkSize=0; + m_BulkPos=-1; + pthread_mutex_init(m_Mutex,NULL); +} + +ChannelHandler::~ChannelHandler() +{ + for(map::iterator i=m_ChannelMap.begin(); + i!=m_ChannelMap.end(); i++) + { + free(i->second->data_buf); + delete i->second; + } + + pthread_mutex_destroy(m_Mutex); + delete m_Mutex; +} + +/////////////////////////////////////////////////////////////// + +void ChannelHandler::UpdateDataNow() +{ + // make sure the command is cleared even if + // we can't get a lock on the data + m_Command[0]=0; + + if (pthread_mutex_trylock(m_Mutex)) + { + m_UpdateIndicator=!m_UpdateIndicator; + + for(map::iterator i=m_ChannelMap.begin(); + i!=m_ChannelMap.end(); i++) + { + Channel *ch = i->second; + + switch (ch->type) + { + case INPUT : + { + memcpy(ch->data,ch->data_buf,ch->size); + } break; + + case OUTPUT : + { + memcpy(ch->data_buf,ch->data,ch->size); + } break; + + // one off request type + case OUTPUT_REQUEST : + { + if (m_BulkPos!=-1 && m_BulkID==i->first) + { + // doing a bulk transfer + if (m_BulkPos+ch->size>m_BulkSize) + { + // last transfer + memcpy(ch->data_buf,((char*)m_BulkSrc)+m_BulkPos,m_BulkSize-m_BulkPos); + m_BulkPos=-1; + } + else + { + memcpy(ch->data_buf,((char*)m_BulkSrc)+m_BulkPos,ch->size); + m_BulkPos+=ch->size; + } + ch->updated=true; + } + else + { + // normal request transfer + if (ch->requested) + { + memcpy(ch->data_buf,ch->data,ch->size); + ch->updated=true; + } + } + } break; + } + } + + m_Command[0]=m_Command[1]; + // make sure the command only lasts one update + m_Command[1]=0; + + pthread_mutex_unlock(m_Mutex); + //cerr<<"audio out mutex"<::iterator i=m_ChannelMap.find(ID); + if (i!=m_ChannelMap.end()) + { + cerr<<"Channel with ID ["<data_buf = malloc(size); + NewCh->size = size; + NewCh->data = pData; + NewCh->requested = false; + NewCh->updated = false; + memcpy(NewCh->data_buf,NewCh->data,size); + m_ChannelMap[ID]=NewCh; + + //pthread_mutex_unlock(m_Mutex); +} + +///////////////////////////////////////////////////////////////////////// + +void ChannelHandler::GetData(const string &ID, void *data) +{ + map::iterator i=m_ChannelMap.find(ID); + if (i==m_ChannelMap.end()) + { + cerr<<"ChannelHandler: Channel ["<second->type==OUTPUT || i->second->type==OUTPUT_REQUEST) + { + memcpy(data,i->second->data_buf,i->second->size); + } + else + { + cerr<<"ChannelHandler: Tried to Get() data registered as input"<::iterator i=m_ChannelMap.find(ID); + if (i==m_ChannelMap.end()) + { + cerr<<"ChannelHandler: Channel ["<second->type==INPUT) + { + memcpy(i->second->data_buf,s,i->second->size); + } + else + { + cerr<<"ChannelHandler: Tried to Set() data registered as output"<::iterator i=m_ChannelMap.begin(); + i!=m_ChannelMap.end(); i++) + { + memcpy(i->second->data_buf,i->second->data,i->second->size); + } + + pthread_mutex_unlock(m_Mutex); +} + +void ChannelHandler::RequestChannelAndWait(const string &ID) +{ + map::iterator i=m_ChannelMap.find(ID); + if (i==m_ChannelMap.end()) + { + cerr<<"ChannelHandler: Channel ["<second->type!=OUTPUT_REQUEST) + { + cerr<<"ChannelHandler: Trying to request ["<second->requested=true; + pthread_mutex_unlock(m_Mutex); + + bool ready=false; + while (!ready) + { + usleep(10); // random amount of time :) + pthread_mutex_lock(m_Mutex); + ready=i->second->updated; + pthread_mutex_unlock(m_Mutex); + } + + pthread_mutex_lock(m_Mutex); + i->second->requested=false; + i->second->updated=false; + pthread_mutex_unlock(m_Mutex); +} + +void ChannelHandler::BulkTransfer(const string &ID, void *dest, int size) +{ + map::iterator i=m_ChannelMap.find(ID); + if (i==m_ChannelMap.end()) + { + cerr<<"ChannelHandler: Channel ["<second->type!=OUTPUT_REQUEST) + { + cerr<<"ChannelHandler: Trying to bulk transfer on ["<second->size; + + // fill up the destination buffer + while (m_BulkPos!=-1) + { + RequestChannelAndWait(ID); + if (pos+buffersize>size) + { + // last copy + char *tempbuf = (char*)malloc(buffersize); + GetData(ID,(void*)tempbuf); + memcpy(((char*)dest)+pos,(void*)tempbuf,size-pos); + free(tempbuf); + } + else + { + GetData(ID,((char*)dest)+pos); + } + + pos+=buffersize; + } +} + +void ChannelHandler::Wait() +{ + pthread_mutex_lock(m_Mutex); + bool current=m_UpdateIndicator; + bool last=m_UpdateIndicator; + pthread_mutex_unlock(m_Mutex); + + while (current==last) + { + usleep(10); + pthread_mutex_lock(m_Mutex); + current=m_UpdateIndicator; + pthread_mutex_unlock(m_Mutex); + } +} diff --git a/SpiralSound/ChannelHandler.h b/SpiralSound/ChannelHandler.h new file mode 100644 index 0000000..8912049 --- /dev/null +++ b/SpiralSound/ChannelHandler.h @@ -0,0 +1,136 @@ +/* SpiralSound + * Copyleft (C) 2002 David Griffiths + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + +#ifndef CHANNEL_HANDLER +#define CHANNEL_HANDLER + +#include +#include +#include +#include + +class ChannelHandler +{ +public: + enum Type{INPUT,OUTPUT,OUTPUT_REQUEST}; + + ChannelHandler(); + ~ChannelHandler(); + + // only call these from the audio thread + + // don't call Register*() when the audio thread is running + void RegisterData(const string &ID, Type t, void *pData, int size); + void Register(const string &ID, bool* pData, Type t=ChannelHandler::INPUT) + { RegisterData(ID, t,(bool*)pData,sizeof(bool)); } + void Register(const string &ID, char* pData, Type t=ChannelHandler::INPUT) + { RegisterData(ID, t,(char*)pData,sizeof(char)); } + void Register(const string &ID, int* pData, Type t=ChannelHandler::INPUT) + { RegisterData(ID, t,(int*)pData,sizeof(int)); } + void Register(const string &ID, long* pData, Type t=ChannelHandler::INPUT) + { RegisterData(ID, t,(long*)pData,sizeof(long)); } + void Register(const string &ID, short* pData, Type t=ChannelHandler::INPUT) + { RegisterData(ID, t,(short*)pData,sizeof(short)); } + void Register(const string &ID, float* pData, Type t=ChannelHandler::INPUT) + { RegisterData(ID, t,(float*)pData,sizeof(float)); } + void Register(const string &ID, double* pData, Type t=ChannelHandler::INPUT) + { RegisterData(ID, t,(double*)pData,sizeof(double)); } + + void UpdateDataNow(); + + bool IsCommandWaiting() { return m_Command[0]; } + char GetCommand() { return m_Command[0]; } + + // use bulk transfers to copy variable and large sized data to the gui + void SetupBulkTransfer(void *source) { m_BulkSrc=source; } + + // only call these from the gui thread + // the ID comes from the order the channel is registered in + void GetData(const string &ID, void *data); + const bool GetBool(const string &ID) { bool t; GetData(ID,&t); return t; } + const char GetChar(const string &ID) { char t; GetData(ID,&t); return t; } + const int GetInt(const string &ID) { int t; GetData(ID,&t); return t; } + const long GetLong(const string &ID) { long t; GetData(ID,&t); return t; } + const short GetShort(const string &ID) { short t; GetData(ID,&t); return t; } + const float GetFloat(const string &ID) { float t; GetData(ID,&t); return t; } + const double GetDouble(const string &ID) { double t; GetData(ID,&t); return t; } + + void SetData(const string &ID, void *s); + void Set(const string &ID, const bool& s) { SetData(ID,(void*)&s); } + void Set(const string &ID, const char& s) { SetData(ID,(void*)&s); } + void Set(const string &ID, const int& s) { SetData(ID,(void*)&s); } + void Set(const string &ID, const long& s) { SetData(ID,(void*)&s); } + void Set(const string &ID, const short& s) { SetData(ID,(void*)&s); } + void Set(const string &ID, const float& s) { SetData(ID,(void*)&s); } + void Set(const string &ID, const double& s) { SetData(ID,(void*)&s); } + + void SetCommand(char command); + + // initialises the data from the audio side to the internal buffers + void FlushChannels(); + + //////////////////////////////////////////// + // This is useful for getting data from the audio side immediately, + // as it will block until complete, and for larger amounts of data, as + // it won't be doing the copy every update. + + void RequestChannelAndWait(const string &ID); + + /////////////////////////////////////////// + // Use for copying large variable sized data very infrequently. + // uses an OUTPUT_REQUEST channel as a transfer buffer. + // Send the size needed to the gui down another channel. + // This can be a slowww function, as it can take many audio updates + // to complete, depending on the size of the buffer channel and the + // total size of the transfer. + + void BulkTransfer(const string &ID, void *dest, int size); + + // delays for one or more updates. use for syncing commands + void Wait(); + +private: + + class Channel + { + public: + Channel(Type t) { type=t; } + + Type type; + void *data_buf; + int size; + void *data; + bool requested; + bool updated; + }; + + map m_ChannelMap; + char m_Command[2]; + + bool m_UpdateIndicator; + + void *m_BulkSrc; + + int m_BulkSize; + int m_BulkPos; + string m_BulkID; + + pthread_mutex_t* m_Mutex; +}; + +#endif diff --git a/SpiralSound/Midi.h b/SpiralSound/Midi.h index a56579a..b6afab5 100644 --- a/SpiralSound/Midi.h +++ b/SpiralSound/Midi.h @@ -30,7 +30,7 @@ using namespace std; -#define KEYBOARD_SUPPORT +//#define KEYBOARD_SUPPORT class MidiEvent diff --git a/SpiralSound/Plugins/AmpPlugin/AmpPlugin.C b/SpiralSound/Plugins/AmpPlugin/AmpPlugin.C index 223b59e..9467e62 100644 --- a/SpiralSound/Plugins/AmpPlugin/AmpPlugin.C +++ b/SpiralSound/Plugins/AmpPlugin/AmpPlugin.C @@ -54,7 +54,10 @@ m_DC(0.0f) m_PluginInfo.PortTips.push_back("Input"); m_PluginInfo.PortTips.push_back("Amp CV"); m_PluginInfo.PortTips.push_back("DC Offset CV"); - m_PluginInfo.PortTips.push_back("Output"); + m_PluginInfo.PortTips.push_back("Output"); + + m_AudioCH->Register("Amp",&m_Amp); + m_AudioCH->Register("DC",&m_DC); } AmpPlugin::~AmpPlugin() @@ -68,11 +71,9 @@ PluginInfo &AmpPlugin::Initialise(const HostInfo *Host) SpiralGUIType *AmpPlugin::CreateGUI() { - m_GUI = new AmpPluginGUI(m_PluginInfo.Width, + return new AmpPluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, - this,m_HostInfo); - m_GUI->hide(); - return m_GUI; + this,m_AudioCH,m_HostInfo); } void AmpPlugin::Execute() diff --git a/SpiralSound/Plugins/AmpPlugin/AmpPlugin.h b/SpiralSound/Plugins/AmpPlugin/AmpPlugin.h index 80737df..0ed3f49 100644 --- a/SpiralSound/Plugins/AmpPlugin/AmpPlugin.h +++ b/SpiralSound/Plugins/AmpPlugin/AmpPlugin.h @@ -37,9 +37,7 @@ public: // has to be defined in the plugin virtual void UpdateGUI() { Fl::check(); } - void SetAmp(float s) { m_Amp=s; } - void SetDC(float s) { m_DC=s; } - float GetAmp() { return m_Amp; } + float GetAmp() { return m_Amp; } float GetDC() { return m_DC; } void Randomise(); diff --git a/SpiralSound/Plugins/AmpPlugin/AmpPluginGUI.C b/SpiralSound/Plugins/AmpPlugin/AmpPluginGUI.C index 408d3ca..83561de 100644 --- a/SpiralSound/Plugins/AmpPlugin/AmpPluginGUI.C +++ b/SpiralSound/Plugins/AmpPlugin/AmpPluginGUI.C @@ -26,8 +26,8 @@ static const int GUIBG2_COLOUR = 145; //////////////////////////////////////////// -AmpPluginGUI::AmpPluginGUI(int w, int h,AmpPlugin *o,const HostInfo *Info) : -SpiralPluginGUI(w,h,o) +AmpPluginGUI::AmpPluginGUI(int w, int h,AmpPlugin *o,ChannelHandler *ch,const HostInfo *Info) : +SpiralPluginGUI(w,h,o,ch) { m_Plugin=o; @@ -79,14 +79,16 @@ SpiralPluginGUI(w,h,o) extern "C" int sprintf(char *,const char *,...); -void AmpPluginGUI::UpdateValues() +void AmpPluginGUI::UpdateValues(SpiralPlugin *o) { - m_Amp->value(2.0f-m_Plugin->GetAmp()); - m_DC->value(2.0f-m_Plugin->GetDC()); + AmpPlugin* Plugin = (AmpPlugin*)o; + + m_Amp->value(2.0f-Plugin->GetAmp()); + m_DC->value(2.0f-Plugin->GetDC()); char str[10]; - sprintf(str,"%4.2f",m_Plugin->GetAmp()); + sprintf(str,"%4.2f",Plugin->GetAmp()); m_out_gain->value(str); - sprintf(str,"%4.2f",m_Plugin->GetDC()); + sprintf(str,"%4.2f",Plugin->GetDC()); m_out_DC->value(str); } @@ -95,7 +97,7 @@ inline void AmpPluginGUI::cb_Amp_i(Fl_Slider* o, void* v) char str[10]; float value=2.0f-o->value(); - m_Plugin->SetAmp(value); + m_GUICH->Set("Amp",value); sprintf(str,"%4.2f",value); m_out_gain->value(str); } @@ -106,7 +108,7 @@ inline void AmpPluginGUI::cb_DC_i(Fl_Slider* o, void* v) { char str[10]; float value=2.0f-o->value(); - m_Plugin->SetDC(value); + m_GUICH->Set("DC",value); sprintf(str,"%4.2f",value); m_out_DC->value(str); } diff --git a/SpiralSound/Plugins/AmpPlugin/AmpPluginGUI.h b/SpiralSound/Plugins/AmpPlugin/AmpPluginGUI.h index 0e59fde..a541cc2 100644 --- a/SpiralSound/Plugins/AmpPlugin/AmpPluginGUI.h +++ b/SpiralSound/Plugins/AmpPlugin/AmpPluginGUI.h @@ -33,9 +33,9 @@ class AmpPluginGUI : public SpiralPluginGUI { public: - AmpPluginGUI(int w, int h, AmpPlugin *o,const HostInfo *Info); + AmpPluginGUI(int w, int h, AmpPlugin *o,ChannelHandler *ch,const HostInfo *Info); - virtual void UpdateValues(); + virtual void UpdateValues(SpiralPlugin *o); virtual SpiralPlugin* GetPlugin() { return m_Plugin; } AmpPlugin *m_Plugin; diff --git a/SpiralSound/Plugins/AmpPlugin/Makefile.in b/SpiralSound/Plugins/AmpPlugin/Makefile.in index 25e0632..bc5e379 100644 --- a/SpiralSound/Plugins/AmpPlugin/Makefile.in +++ b/SpiralSound/Plugins/AmpPlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \ AmpPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \ AmpPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -162,3 +165,5 @@ AmpPluginGUI.o: AmpPluginGUI.C \ ../SpiralPluginGUI.h \ ../Widgets/Fl_DragBar.H +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/ComplexEnvelopePlugin/Makefile.in b/SpiralSound/Plugins/ComplexEnvelopePlugin/Makefile.in index 2936e0f..8cf06d9 100644 --- a/SpiralSound/Plugins/ComplexEnvelopePlugin/Makefile.in +++ b/SpiralSound/Plugins/ComplexEnvelopePlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -51,6 +52,7 @@ HEADERS = ../SpiralPlugin.h \ ComplexEnvelopePluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -59,6 +61,7 @@ SOURCES = ../SpiralPlugin.C \ ComplexEnvelopePluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -170,3 +173,5 @@ ComplexEnvelopePluginGUI.o: ComplexEnvelopePluginGUI.C \ Bezier.h \ ../Widgets/Fl_DragBar.H +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/ControllerPlugin/ControllerPlugin.C b/SpiralSound/Plugins/ControllerPlugin/ControllerPlugin.C index 61d7b87..2ae41ad 100644 --- a/SpiralSound/Plugins/ControllerPlugin/ControllerPlugin.C +++ b/SpiralSound/Plugins/ControllerPlugin/ControllerPlugin.C @@ -60,6 +60,12 @@ m_Num(4) { m_ChannelVal[n]=0.0f; } + + m_AudioCH->Register("Number",&m_GUIArgs.Number); + m_AudioCH->Register("Value",&m_GUIArgs.Value); + m_AudioCH->Register("Min",&m_GUIArgs.Min); + m_AudioCH->Register("Max",&m_GUIArgs.Max); + m_AudioCH->RegisterData("Name",ChannelHandler::INPUT,m_GUIArgs.Name,sizeof(m_GUIArgs.Name)); } ControllerPlugin::~ControllerPlugin() @@ -73,11 +79,9 @@ PluginInfo &ControllerPlugin::Initialise(const HostInfo *Host) SpiralGUIType *ControllerPlugin::CreateGUI() { - m_GUI = new ControllerPluginGUI(m_PluginInfo.Width, + return new ControllerPluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, - this,m_HostInfo); - m_GUI->hide(); - return m_GUI; + this,m_AudioCH,m_HostInfo); } void ControllerPlugin::Execute() @@ -91,6 +95,22 @@ void ControllerPlugin::Execute() } } +void ControllerPlugin::ExecuteCommands() +{ + if (m_AudioCH->IsCommandWaiting()) + { + switch (m_AudioCH->GetCommand()) + { + case (SETCHANNEL) : + SetChannel(m_GUIArgs.Number,m_GUIArgs.Value,m_GUIArgs.Min,m_GUIArgs.Max,m_GUIArgs.Name); + break; + case (SETNUM) : + SetNum(m_GUIArgs.Number); + break; + } + } +} + void ControllerPlugin::SetNum(int n) { // once to clear the connections with the current info @@ -114,7 +134,7 @@ void ControllerPlugin::SetNum(int n) m_Num=n; m_PluginInfo.NumOutputs=n; - + // do the actual update UpdatePluginInfoWithHost(); } @@ -133,34 +153,28 @@ void ControllerPlugin::StreamOut(ostream &s) switch (m_Version) { - case 1: - { - for (int n=0; n<4; n++) - { - s<StreamOut(s); - } break; - - case 3: - { + s<StreamOut(s); + } break; + default : + cerr<<"ControllerPlugin - I dont support this streaming version any more"<>m_ChannelVal[n]; - } - } break; - - case 2: + case 3: { Clear(); @@ -190,35 +196,21 @@ void ControllerPlugin::StreamIn(istream &s) s>>m_ChannelVal[n]; } - s>>*(ControllerPluginGUI*)m_GUI; - - // add the channels one by one + char Buf[4096]; + int size; + + s>>m_Num; for (int n=0; n>size; + s.ignore(1); + s.get(Buf,size+1); + m_Names[n]=Buf; + s>>m_MinVal[n]; + s>>m_MaxVal[n]; + s>>m_ChannelVal[n]; } - m_PluginInfo.NumOutputs=m_Num; - UpdatePluginInfoWithHost(); - - } break; - - case 3: - { - Clear(); - - s>>m_Num; - - for (int n=0; n>m_ChannelVal[n]; - } - - ((ControllerPluginGUI*)m_GUI)->StreamIn(s); - // add the channels one by one for (int n=0; nGetNum(); + for (int n=0; nm_Title->value(Plugin->GetName(n).c_str()); + sprintf(temp,"%f",Plugin->GetMin(n)); + m_GuiVec[n]->m_Min->value(temp); + sprintf(temp,"%f",Plugin->GetMax(n)); + m_GuiVec[n]->m_Max->value(temp); + m_GuiVec[n]->m_Chan->value(Plugin->GetVal(n)); + } + + resize(x(),y(),c*60,h()); } inline void ControllerPluginGUI::cb_Chan_i(Fl_Slider* o, void* v) @@ -138,7 +157,14 @@ inline void ControllerPluginGUI::cb_Chan_i(Fl_Slider* o, void* v) long max=strtol(m_GuiVec[num]->m_Min->value(),NULL,10); long min=strtol(m_GuiVec[num]->m_Max->value(),NULL,10); float val=o->value()*(max-min)+min; - m_Plugin->SetChannel(num,val); + m_GUICH->Set("Number",num); + m_GUICH->Set("Value",val); + m_GUICH->Set("Min",(int)min); + m_GUICH->Set("Max",(int)max); + char temp[256]; + sprintf(temp,"%s",m_GuiVec[num]->m_Title->value()); + m_GUICH->Set("Name",temp); + m_GUICH->SetCommand(ControllerPlugin::SETCHANNEL); } void ControllerPluginGUI::cb_Chan(Fl_Slider* o, void* v) { ((ControllerPluginGUI*)(o->parent()->user_data()))->cb_Chan_i(o,v);} @@ -150,8 +176,8 @@ inline void ControllerPluginGUI::cb_Add_i(Fl_Button* o, void* v) AddCV(); resize(x(),y(),w()+60,h()); redraw(); - - m_Plugin->SetNum(m_GuiVec.size()); + m_GUICH->Set("Number",(int)m_GuiVec.size()); + m_GUICH->SetCommand(ControllerPlugin::SETNUM); } } void ControllerPluginGUI::cb_Add(Fl_Button* o, void* v) @@ -165,7 +191,8 @@ inline void ControllerPluginGUI::cb_Delete_i(Fl_Button* o, void* v) resize(x(),y(),w()-60,h()); redraw(); - m_Plugin->SetNum(m_GuiVec.size()); + m_GUICH->Set("Number",(int)m_GuiVec.size()); + m_GUICH->SetCommand(ControllerPlugin::SETNUM); } } void ControllerPluginGUI::cb_Delete(Fl_Button* o, void* v) diff --git a/SpiralSound/Plugins/ControllerPlugin/ControllerPluginGUI.h b/SpiralSound/Plugins/ControllerPlugin/ControllerPluginGUI.h index e4732cd..bbd97c6 100644 --- a/SpiralSound/Plugins/ControllerPlugin/ControllerPluginGUI.h +++ b/SpiralSound/Plugins/ControllerPlugin/ControllerPluginGUI.h @@ -36,12 +36,9 @@ static int Numbers[MAX_CHANNELS]; class ControllerPluginGUI : public SpiralPluginGUI { public: - ControllerPluginGUI(int w, int h, ControllerPlugin *o,const HostInfo *Info); + ControllerPluginGUI(int w, int h, ControllerPlugin *o,ChannelHandler *ch,const HostInfo *Info); - virtual void UpdateValues(); - virtual SpiralPlugin* GetPlugin() { return m_Plugin; } - - ControllerPlugin *m_Plugin; + virtual void UpdateValues(SpiralPlugin *o); void StreamIn(istream &s); void StreamOut(ostream &s); diff --git a/SpiralSound/Plugins/ControllerPlugin/Makefile.in b/SpiralSound/Plugins/ControllerPlugin/Makefile.in index 7327393..f58539d 100644 --- a/SpiralSound/Plugins/ControllerPlugin/Makefile.in +++ b/SpiralSound/Plugins/ControllerPlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \ ControllerPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \ ControllerPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -162,3 +165,5 @@ ControllerPluginGUI.o: ControllerPluginGUI.C \ ../SpiralPluginGUI.h \ ../Widgets/Fl_DragBar.H +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/DelayPlugin/DelayPlugin.C b/SpiralSound/Plugins/DelayPlugin/DelayPlugin.C index 6b45c11..9130e24 100644 --- a/SpiralSound/Plugins/DelayPlugin/DelayPlugin.C +++ b/SpiralSound/Plugins/DelayPlugin/DelayPlugin.C @@ -56,6 +56,9 @@ m_WriteHeadPos(0) m_PluginInfo.PortTips.push_back("Delay CV"); m_PluginInfo.PortTips.push_back("ReadHead CV"); m_PluginInfo.PortTips.push_back("Output"); + + m_AudioCH->Register("Delay",&m_Delay); + m_AudioCH->Register("Mix",&m_Mix); } DelayPlugin::~DelayPlugin() @@ -71,11 +74,9 @@ PluginInfo &DelayPlugin::Initialise(const HostInfo *Host) SpiralGUIType *DelayPlugin::CreateGUI() { - m_GUI = new DelayPluginGUI(m_PluginInfo.Width, + return new DelayPluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, - this,m_HostInfo); - m_GUI->hide(); - return m_GUI; + this,m_AudioCH,m_HostInfo); } void DelayPlugin::Execute() diff --git a/SpiralSound/Plugins/DelayPlugin/DelayPlugin.h b/SpiralSound/Plugins/DelayPlugin/DelayPlugin.h index 0d65fe5..ecd8d3d 100644 --- a/SpiralSound/Plugins/DelayPlugin/DelayPlugin.h +++ b/SpiralSound/Plugins/DelayPlugin/DelayPlugin.h @@ -34,13 +34,7 @@ public: virtual void StreamOut(ostream &s); virtual void StreamIn(istream &s); - // has to be defined in the plugin - virtual void UpdateGUI() { Fl::check(); } - - - void SetDelay(float s) { m_Delay=s; } - void SetMix(float s) { m_Mix=s; } - float GetDelay() { return m_Delay; } + float GetDelay() { return m_Delay; } float GetMix() { return m_Mix; } void Randomise(); diff --git a/SpiralSound/Plugins/DelayPlugin/DelayPluginGUI.C b/SpiralSound/Plugins/DelayPlugin/DelayPluginGUI.C index e142745..f43ee68 100644 --- a/SpiralSound/Plugins/DelayPlugin/DelayPluginGUI.C +++ b/SpiralSound/Plugins/DelayPlugin/DelayPluginGUI.C @@ -26,11 +26,9 @@ static const int GUIBG2_COLOUR = 145; //////////////////////////////////////////// -DelayPluginGUI::DelayPluginGUI(int w, int h,DelayPlugin *o,const HostInfo *Info) : -SpiralPluginGUI(w,h,o) -{ - m_Plugin=o; - +DelayPluginGUI::DelayPluginGUI(int w, int h,DelayPlugin *o,ChannelHandler *ch,const HostInfo *Info) : +SpiralPluginGUI(w,h,o,ch) +{ m_Delay = new Fl_Slider(15, 20, 20, 70, "Delay"); m_Delay->type(4); m_Delay->selection_color(GUI_COLOUR); @@ -52,21 +50,23 @@ SpiralPluginGUI(w,h,o) end(); } -void DelayPluginGUI::UpdateValues() +void DelayPluginGUI::UpdateValues(SpiralPlugin *o) { - m_Delay->value(m_Plugin->GetDelay()-5.0f); - m_Mix->value(m_Plugin->GetMix()); + DelayPlugin *Plugin = (DelayPlugin*)o; + + m_Delay->value(Plugin->GetDelay()-5.0f); + m_Mix->value(Plugin->GetMix()); } inline void DelayPluginGUI::cb_Delay_i(Fl_Slider* o, void* v) { float value=1.0f-o->value(); - m_Plugin->SetDelay(value); + m_GUICH->Set("Delay",value); } void DelayPluginGUI::cb_Delay(Fl_Slider* o, void* v) { ((DelayPluginGUI*)(o->parent()))->cb_Delay_i(o,v); } inline void DelayPluginGUI::cb_Mix_i(Fl_Knob* o, void* v) -{ m_Plugin->SetMix(o->value()); } +{ m_GUICH->Set("Mix",o->value()); } void DelayPluginGUI::cb_Mix(Fl_Knob* o, void* v) { ((DelayPluginGUI*)(o->parent()))->cb_Mix_i(o,v); } diff --git a/SpiralSound/Plugins/DelayPlugin/DelayPluginGUI.h b/SpiralSound/Plugins/DelayPlugin/DelayPluginGUI.h index 182f6a3..010dcab 100644 --- a/SpiralSound/Plugins/DelayPlugin/DelayPluginGUI.h +++ b/SpiralSound/Plugins/DelayPlugin/DelayPluginGUI.h @@ -32,13 +32,10 @@ class DelayPluginGUI : public SpiralPluginGUI { public: - DelayPluginGUI(int w, int h, DelayPlugin *o,const HostInfo *Info); - - virtual void UpdateValues(); - virtual SpiralPlugin* GetPlugin() { return m_Plugin; } - - DelayPlugin *m_Plugin; + DelayPluginGUI(int w, int h, DelayPlugin *o,ChannelHandler *ch,const HostInfo *Info); + virtual void UpdateValues(SpiralPlugin *o); + private: Fl_Slider *m_Delay; diff --git a/SpiralSound/Plugins/DelayPlugin/Makefile.in b/SpiralSound/Plugins/DelayPlugin/Makefile.in index 45f475d..50699b6 100644 --- a/SpiralSound/Plugins/DelayPlugin/Makefile.in +++ b/SpiralSound/Plugins/DelayPlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \ DelayPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \ DelayPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -164,3 +167,5 @@ DelayPluginGUI.o: DelayPluginGUI.C \ ../Widgets/Fl_DragBar.H \ ../Widgets/Fl_Knob.H +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/DistributorPlugin/DistributorPlugin.C b/SpiralSound/Plugins/DistributorPlugin/DistributorPlugin.C index 80666d3..22bfc3e 100644 --- a/SpiralSound/Plugins/DistributorPlugin/DistributorPlugin.C +++ b/SpiralSound/Plugins/DistributorPlugin/DistributorPlugin.C @@ -69,8 +69,7 @@ PluginInfo &DistributorPlugin::Initialise(const HostInfo *Host) SpiralGUIType *DistributorPlugin::CreateGUI() { - m_GUI=NULL; - return m_GUI; + return NULL; } void DistributorPlugin::Execute() diff --git a/SpiralSound/Plugins/DistributorPlugin/DistributorPlugin.h b/SpiralSound/Plugins/DistributorPlugin/DistributorPlugin.h index c719665..3a3b1fa 100644 --- a/SpiralSound/Plugins/DistributorPlugin/DistributorPlugin.h +++ b/SpiralSound/Plugins/DistributorPlugin/DistributorPlugin.h @@ -34,9 +34,6 @@ public: virtual void StreamOut(ostream &s) {} virtual void StreamIn(istream &s) {} - // has to be defined in the plugin - virtual void UpdateGUI() { Fl::check(); } - private: bool m_Triggered; bool m_Switch; diff --git a/SpiralSound/Plugins/DistributorPlugin/DistributorPluginGUI.C b/SpiralSound/Plugins/DistributorPlugin/DistributorPluginGUI.C index 2917a63..3da80e1 100644 --- a/SpiralSound/Plugins/DistributorPlugin/DistributorPluginGUI.C +++ b/SpiralSound/Plugins/DistributorPlugin/DistributorPluginGUI.C @@ -26,16 +26,15 @@ static const int GUIBG2_COLOUR = 145; //////////////////////////////////////////// -DistributorPluginGUI::DistributorPluginGUI(int w, int h,DistributorPlugin *o,const HostInfo *Info) : -SpiralPluginGUI(w,h,o) +DistributorPluginGUI::DistributorPluginGUI(int w, int h,DistributorPlugin *o,ChannelHandler *ch,const HostInfo *Info) : +SpiralPluginGUI(w,h,o,ch) { - m_Plugin=o; end(); } -void DistributorPluginGUI::UpdateValues() +void DistributorPluginGUI::UpdateValues(SpiralPlugin *o) { } diff --git a/SpiralSound/Plugins/DistributorPlugin/DistributorPluginGUI.h b/SpiralSound/Plugins/DistributorPlugin/DistributorPluginGUI.h index 3cd6f2d..4b1e451 100644 --- a/SpiralSound/Plugins/DistributorPlugin/DistributorPluginGUI.h +++ b/SpiralSound/Plugins/DistributorPlugin/DistributorPluginGUI.h @@ -33,12 +33,9 @@ class DistributorPluginGUI : public SpiralPluginGUI { public: - DistributorPluginGUI(int w, int h, DistributorPlugin *o,const HostInfo *Info); - - virtual void UpdateValues(); - virtual SpiralPlugin* GetPlugin() { return m_Plugin; } - - DistributorPlugin *m_Plugin; + DistributorPluginGUI(int w, int h, DistributorPlugin *o,ChannelHandler *ch,const HostInfo *Info); + virtual void UpdateValues(SpiralPlugin *o); + private: //// Callbacks //// diff --git a/SpiralSound/Plugins/DistributorPlugin/Makefile.in b/SpiralSound/Plugins/DistributorPlugin/Makefile.in index d7c7ad1..5fdfc84 100644 --- a/SpiralSound/Plugins/DistributorPlugin/Makefile.in +++ b/SpiralSound/Plugins/DistributorPlugin/Makefile.in @@ -44,6 +44,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -51,6 +52,7 @@ HEADERS = ../SpiralPlugin.h \ DistributorPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -58,6 +60,7 @@ SOURCES = ../SpiralPlugin.C \ DistributorPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -167,4 +170,5 @@ DistributorPluginGUI.o: DistributorPluginGUI.C \ ../SpiralPluginGUI.h \ ../Widgets/Fl_DragBar.H - +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/EchoPlugin/EchoPlugin.C b/SpiralSound/Plugins/EchoPlugin/EchoPlugin.C index 21738dd..abc05dc 100644 --- a/SpiralSound/Plugins/EchoPlugin/EchoPlugin.C +++ b/SpiralSound/Plugins/EchoPlugin/EchoPlugin.C @@ -55,6 +55,9 @@ m_HeadPos(0) m_PluginInfo.PortTips.push_back("Delay CV"); m_PluginInfo.PortTips.push_back("Feedback CV"); m_PluginInfo.PortTips.push_back("Output"); + + m_AudioCH->Register("Delay",&m_Delay); + m_AudioCH->Register("Feedback",&m_Feedback); } EchoPlugin::~EchoPlugin() @@ -70,11 +73,9 @@ PluginInfo &EchoPlugin::Initialise(const HostInfo *Host) SpiralGUIType *EchoPlugin::CreateGUI() { - m_GUI = new EchoPluginGUI(m_PluginInfo.Width, + return new EchoPluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, - this,m_HostInfo); - m_GUI->hide(); - return m_GUI; + this,m_AudioCH,m_HostInfo); } void EchoPlugin::Execute() diff --git a/SpiralSound/Plugins/EchoPlugin/EchoPlugin.h b/SpiralSound/Plugins/EchoPlugin/EchoPlugin.h index 729010f..a9deac6 100644 --- a/SpiralSound/Plugins/EchoPlugin/EchoPlugin.h +++ b/SpiralSound/Plugins/EchoPlugin/EchoPlugin.h @@ -33,13 +33,7 @@ public: virtual void Execute(); virtual void StreamOut(ostream &s); virtual void StreamIn(istream &s); - - // has to be defined in the plugin - virtual void UpdateGUI() { Fl::check(); } - - - void SetDelay(float s) { m_Delay=s; } - void SetFeedback(float s) { m_Feedback=s; } + float GetDelay() { return m_Delay; } float GetFeedback() { return m_Feedback; } diff --git a/SpiralSound/Plugins/EchoPlugin/EchoPluginGUI.C b/SpiralSound/Plugins/EchoPlugin/EchoPluginGUI.C index 243cd23..ad901c7 100644 --- a/SpiralSound/Plugins/EchoPlugin/EchoPluginGUI.C +++ b/SpiralSound/Plugins/EchoPlugin/EchoPluginGUI.C @@ -26,11 +26,9 @@ static const int GUIBG2_COLOUR = 145; //////////////////////////////////////////// -EchoPluginGUI::EchoPluginGUI(int w, int h,EchoPlugin *o,const HostInfo *Info) : -SpiralPluginGUI(w,h,o) +EchoPluginGUI::EchoPluginGUI(int w, int h,EchoPlugin *o,ChannelHandler *ch,const HostInfo *Info) : +SpiralPluginGUI(w,h,o,ch) { - m_Plugin=o; - m_Delay = new Fl_Slider(15, 20, 20, 70, "Delay"); m_Delay->type(4); m_Delay->selection_color(GUI_COLOUR); @@ -79,14 +77,16 @@ SpiralPluginGUI(w,h,o) extern "C" int sprintf(char *,const char *,...); -void EchoPluginGUI::UpdateValues() +void EchoPluginGUI::UpdateValues(SpiralPlugin *o) { - m_Delay->value(1.0f-m_Plugin->GetDelay()); - m_Feedback->value(1.1f-m_Plugin->GetFeedback()); + EchoPlugin *Plugin = (EchoPlugin*)o; + + m_Delay->value(1.0f-Plugin->GetDelay()); + m_Feedback->value(1.1f-Plugin->GetFeedback()); char str[10]; - sprintf(str,"%5.3f s", m_Plugin->GetDelay()); + sprintf(str,"%5.3f s", Plugin->GetDelay()); m_out_delay->value(str); - sprintf(str,"%5.1f %%", 100*m_Plugin->GetFeedback()); + sprintf(str,"%5.1f %%", 100*Plugin->GetFeedback()); m_out_feedback->value(str); } @@ -94,7 +94,7 @@ inline void EchoPluginGUI::cb_Delay_i(Fl_Slider* o, void* v) { char str[10]; float value=1.0f-o->value(); - m_Plugin->SetDelay(value); + m_GUICH->Set("Delay",value); sprintf(str,"%5.3f s", value); m_out_delay->value(str); } @@ -105,7 +105,7 @@ void EchoPluginGUI::cb_Delay(Fl_Slider* o, void* v) inline void EchoPluginGUI::cb_Feedback_i(Fl_Slider* o, void* v) { char str[10]; - m_Plugin->SetFeedback(1.1f-o->value()); + m_GUICH->Set("Feedback",(float)(1.1f-o->value())); sprintf(str,"%5.1f %%", 100*(1.1f-o->value())); m_out_feedback->value(str); } diff --git a/SpiralSound/Plugins/EchoPlugin/EchoPluginGUI.h b/SpiralSound/Plugins/EchoPlugin/EchoPluginGUI.h index a4d9d39..e5a06a1 100644 --- a/SpiralSound/Plugins/EchoPlugin/EchoPluginGUI.h +++ b/SpiralSound/Plugins/EchoPlugin/EchoPluginGUI.h @@ -35,12 +35,9 @@ class EchoPluginGUI : public SpiralPluginGUI { public: - EchoPluginGUI(int w, int h, EchoPlugin *o,const HostInfo *Info); + EchoPluginGUI(int w, int h, EchoPlugin *o,ChannelHandler *ch,const HostInfo *Info); - virtual void UpdateValues(); - virtual SpiralPlugin* GetPlugin() { return m_Plugin; } - - EchoPlugin *m_Plugin; + virtual void UpdateValues(SpiralPlugin *o); private: diff --git a/SpiralSound/Plugins/EchoPlugin/Makefile.in b/SpiralSound/Plugins/EchoPlugin/Makefile.in index 611e56d..bacdffd 100644 --- a/SpiralSound/Plugins/EchoPlugin/Makefile.in +++ b/SpiralSound/Plugins/EchoPlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \ EchoPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \ EchoPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -164,3 +167,5 @@ EchoPluginGUI.o: EchoPluginGUI.C \ ../Widgets/Fl_DragBar.H \ ../Widgets/Fl_Knob.H +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/Edit.sh b/SpiralSound/Plugins/Edit.sh index c501616..5559716 100755 --- a/SpiralSound/Plugins/Edit.sh +++ b/SpiralSound/Plugins/Edit.sh @@ -4,7 +4,7 @@ for file in `cat PluginList.txt` do echo $file cd $file/ -nedit $file.h -nedit $file.C +cvs edit Makefile.in +nedit Makefile.in cd .. done diff --git a/SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPlugin.C b/SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPlugin.C index b7bdca8..d0fa47c 100644 --- a/SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPlugin.C +++ b/SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPlugin.C @@ -51,6 +51,9 @@ m_Value(0) m_PluginInfo.NumOutputs=1; m_PluginInfo.PortTips.push_back("Input"); m_PluginInfo.PortTips.push_back("Output"); + + m_AudioCH->Register("Attack",&m_Attack); + m_AudioCH->Register("Decay",&m_Decay); } EnvFollowerPlugin::~EnvFollowerPlugin() @@ -64,11 +67,9 @@ PluginInfo &EnvFollowerPlugin::Initialise(const HostInfo *Host) SpiralGUIType *EnvFollowerPlugin::CreateGUI() { - m_GUI = new EnvFollowerPluginGUI(m_PluginInfo.Width, + return new EnvFollowerPluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, - this,m_HostInfo); - m_GUI->hide(); - return m_GUI; + this,m_AudioCH,m_HostInfo); } void EnvFollowerPlugin::Execute() diff --git a/SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPlugin.h b/SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPlugin.h index 7eb21b9..44a822e 100644 --- a/SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPlugin.h +++ b/SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPlugin.h @@ -34,12 +34,7 @@ public: virtual void StreamOut(ostream &s); virtual void StreamIn(istream &s); - // has to be defined in the plugin - virtual void UpdateGUI() { Fl::check(); } - - void SetAttack(float v) { m_Attack=v; } float GetAttack() { return m_Attack; } - void SetDecay(float v) { m_Decay=v; } float GetDecay() { return m_Decay; } private: diff --git a/SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPluginGUI.C b/SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPluginGUI.C index dcf596d..1330acf 100644 --- a/SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPluginGUI.C +++ b/SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPluginGUI.C @@ -26,11 +26,9 @@ static const int GUIBG2_COLOUR = 145; //////////////////////////////////////////// -EnvFollowerPluginGUI::EnvFollowerPluginGUI(int w, int h,EnvFollowerPlugin *o,const HostInfo *Info) : -SpiralPluginGUI(w,h,o) +EnvFollowerPluginGUI::EnvFollowerPluginGUI(int w, int h,EnvFollowerPlugin *o,ChannelHandler *ch,const HostInfo *Info) : +SpiralPluginGUI(w,h,o,ch) { - m_Plugin=o; - m_Attack = new Fl_Knob(20, 25, 40, 40, "Attack"); m_Attack->color(GUI_COLOUR); m_Attack->type(Fl_Knob::DOTLIN); @@ -56,18 +54,19 @@ SpiralPluginGUI(w,h,o) -void EnvFollowerPluginGUI::UpdateValues() +void EnvFollowerPluginGUI::UpdateValues(SpiralPlugin *o) { - m_Attack->value(m_Plugin->GetAttack()); - m_Decay->value(m_Plugin->GetDecay()); + EnvFollowerPlugin *Plugin = (EnvFollowerPlugin*)o; + m_Attack->value(Plugin->GetAttack()); + m_Decay->value(Plugin->GetDecay()); } inline void EnvFollowerPluginGUI::cb_Decay_i(Fl_Knob* o, void* v) -{ m_Plugin->SetDecay(o->value()); } +{ m_GUICH->Set("Decay",o->value()); } void EnvFollowerPluginGUI::cb_Decay(Fl_Knob* o, void* v) { ((EnvFollowerPluginGUI*)(o->parent()))->cb_Decay_i(o,v);} inline void EnvFollowerPluginGUI::cb_Attack_i(Fl_Knob* o, void* v) -{ m_Plugin->SetAttack(o->value()); } +{ m_GUICH->Set("Attack",o->value()); } void EnvFollowerPluginGUI::cb_Attack(Fl_Knob* o, void* v) { ((EnvFollowerPluginGUI*)(o->parent()))->cb_Attack_i(o,v);} diff --git a/SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPluginGUI.h b/SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPluginGUI.h index e864a6c..41c4e6c 100644 --- a/SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPluginGUI.h +++ b/SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPluginGUI.h @@ -33,12 +33,10 @@ class EnvFollowerPluginGUI : public SpiralPluginGUI { public: - EnvFollowerPluginGUI(int w, int h, EnvFollowerPlugin *o,const HostInfo *Info); + EnvFollowerPluginGUI(int w, int h, EnvFollowerPlugin *o,ChannelHandler *ch,const HostInfo *Info); - virtual void UpdateValues(); - virtual SpiralPlugin* GetPlugin() { return m_Plugin; } - - EnvFollowerPlugin *m_Plugin; + virtual void UpdateValues(SpiralPlugin *o); + private: Fl_Knob* m_Attack; diff --git a/SpiralSound/Plugins/EnvFollowerPlugin/Makefile.in b/SpiralSound/Plugins/EnvFollowerPlugin/Makefile.in index f2ddda2..fdad8cf 100644 --- a/SpiralSound/Plugins/EnvFollowerPlugin/Makefile.in +++ b/SpiralSound/Plugins/EnvFollowerPlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \ EnvFollowerPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \ EnvFollowerPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -166,3 +169,5 @@ EnvFollowerPluginGUI.o: EnvFollowerPluginGUI.C \ ../SpiralPluginGUI.h \ ../Widgets/Fl_DragBar.H +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/EnvelopePlugin/EnvelopePlugin.C b/SpiralSound/Plugins/EnvelopePlugin/EnvelopePlugin.C index 3be0aab..2fcb8df 100644 --- a/SpiralSound/Plugins/EnvelopePlugin/EnvelopePlugin.C +++ b/SpiralSound/Plugins/EnvelopePlugin/EnvelopePlugin.C @@ -58,6 +58,13 @@ m_TrigThresh(0.01) m_PluginInfo.PortTips.push_back("Input"); m_PluginInfo.PortTips.push_back("CV"); m_PluginInfo.PortTips.push_back("Output"); + + m_AudioCH->Register("Attack",&m_Attack); + m_AudioCH->Register("Decay",&m_Decay); + m_AudioCH->Register("Sustain",&m_Sustain); + m_AudioCH->Register("Release",&m_Release); + m_AudioCH->Register("Volume",&m_Volume); + m_AudioCH->Register("Trig",&m_TrigThresh); } EnvelopePlugin::~EnvelopePlugin() @@ -73,11 +80,9 @@ PluginInfo &EnvelopePlugin::Initialise(const HostInfo *Host) SpiralGUIType *EnvelopePlugin::CreateGUI() { - m_GUI = new EnvelopePluginGUI(m_PluginInfo.Width, + return new EnvelopePluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, - this,m_HostInfo); - m_GUI->hide(); - return m_GUI; + this,m_AudioCH,m_HostInfo); } void EnvelopePlugin::Execute() diff --git a/SpiralSound/Plugins/EnvelopePlugin/EnvelopePlugin.h b/SpiralSound/Plugins/EnvelopePlugin/EnvelopePlugin.h index 58f54f2..67b9735 100644 --- a/SpiralSound/Plugins/EnvelopePlugin/EnvelopePlugin.h +++ b/SpiralSound/Plugins/EnvelopePlugin/EnvelopePlugin.h @@ -35,17 +35,7 @@ public: virtual void Execute(); virtual void StreamOut(ostream &s); virtual void StreamIn(istream &s); - - // has to be defined in the plugin - virtual void UpdateGUI() { Fl::check(); } - - void SetAttack(float s) { m_Attack=s; } - void SetDecay(float s) { m_Decay=s; } - void SetSustain(float s) { m_Sustain=s; } - void SetRelease(float s) { m_Release=s; } - void SetVolume(float s) { m_Volume=s; } - void SetTrigThresh(float s) { m_TrigThresh=s; } - + float GetAttack() { return m_Attack; } float GetDecay() { return m_Decay; } float GetSustain() { return m_Sustain; } diff --git a/SpiralSound/Plugins/EnvelopePlugin/EnvelopePluginGUI.C b/SpiralSound/Plugins/EnvelopePlugin/EnvelopePluginGUI.C index f19df7b..89904ae 100644 --- a/SpiralSound/Plugins/EnvelopePlugin/EnvelopePluginGUI.C +++ b/SpiralSound/Plugins/EnvelopePlugin/EnvelopePluginGUI.C @@ -27,11 +27,9 @@ static const float TIMED_SLIDER_MAX = 3.0f; //////////////////////////////////////////// -EnvelopePluginGUI::EnvelopePluginGUI(int w, int h,EnvelopePlugin *o,const HostInfo *Info) : -SpiralPluginGUI(w,h,o) -{ - m_Plugin=o; - +EnvelopePluginGUI::EnvelopePluginGUI(int w, int h,EnvelopePlugin *o,ChannelHandler *ch,const HostInfo *Info) : +SpiralPluginGUI(w,h,o,ch) +{ Thresh = new Fl_Slider(10, 20, 20, 70, "T"); Thresh->type(4); Thresh->selection_color(GUI_COLOUR); @@ -154,26 +152,28 @@ SpiralPluginGUI(w,h,o) extern "C" int sprintf(char *,const char *,...); -void EnvelopePluginGUI::UpdateValues() +void EnvelopePluginGUI::UpdateValues(SpiralPlugin *o) { - Thresh->value(1.0f-sqrt(m_Plugin->GetAttack())); - Attack->value(TIMED_SLIDER_MAX-sqrt(m_Plugin->GetAttack())); - Decay->value(TIMED_SLIDER_MAX-sqrt(m_Plugin->GetDecay())); - Sustain->value(1.0f-m_Plugin->GetSustain()); - Release->value(TIMED_SLIDER_MAX-sqrt(m_Plugin->GetRelease())); - Volume->value(1.0f-m_Plugin->GetVolume()); + EnvelopePlugin *Plugin = (EnvelopePlugin*)o; + + Thresh->value(1.0f-sqrt(Plugin->GetAttack())); + Attack->value(TIMED_SLIDER_MAX-sqrt(Plugin->GetAttack())); + Decay->value(TIMED_SLIDER_MAX-sqrt(Plugin->GetDecay())); + Sustain->value(1.0f-Plugin->GetSustain()); + Release->value(TIMED_SLIDER_MAX-sqrt(Plugin->GetRelease())); + Volume->value(1.0f-Plugin->GetVolume()); char str[10]; - sprintf(str,"%4.0f %%", 100*m_Plugin->GetTrigThresh()); + sprintf(str,"%4.0f %%", 100*Plugin->GetTrigThresh()); m_out_thresh->value(str); - sprintf(str,"%5.3f s", m_Plugin->GetAttack()); + sprintf(str,"%5.3f s", Plugin->GetAttack()); m_out_attack->value(str); - sprintf(str,"%5.3f s", m_Plugin->GetDecay()); + sprintf(str,"%5.3f s", Plugin->GetDecay()); m_out_decay->value(str); - sprintf(str,"%4.0f %%", 100*m_Plugin->GetSustain()); + sprintf(str,"%4.0f %%", 100*Plugin->GetSustain()); m_out_sustain->value(str); - sprintf(str,"%5.3f s", m_Plugin->GetRelease()); + sprintf(str,"%5.3f s", Plugin->GetRelease()); m_out_release->value(str); - sprintf(str,"%4.0f %%", 100*m_Plugin->GetVolume()); + sprintf(str,"%4.0f %%", 100*Plugin->GetVolume()); m_out_volume->value(str); } @@ -181,7 +181,7 @@ void EnvelopePluginGUI::UpdateValues() inline void EnvelopePluginGUI::cb_Thresh_i(Fl_Slider* o, void* v) { char str[10]; - m_Plugin->SetTrigThresh(1.0f-o->value()); + m_GUICH->Set("Trig",1.0f-o->value()); sprintf(str,"%4.0f %%", 100*(1.0f-o->value())); m_out_thresh->value(str); } @@ -193,7 +193,7 @@ inline void EnvelopePluginGUI::cb_Attack_i(Fl_Slider* o, void* v) { char str[10]; float value=TIMED_SLIDER_MAX-o->value(); - m_Plugin->SetAttack(value*value); + m_GUICH->Set("Attack",value*value); sprintf(str,"%5.3f s", value*value); m_out_attack->value(str); } @@ -204,7 +204,7 @@ inline void EnvelopePluginGUI::cb_Decay_i(Fl_Slider* o, void* v) { char str[10]; float value=TIMED_SLIDER_MAX-o->value(); - m_Plugin->SetDecay(value*value); + m_GUICH->Set("Decay",value*value); sprintf(str,"%5.3f s", value*value); m_out_decay->value(str); } @@ -214,7 +214,7 @@ void EnvelopePluginGUI::cb_Decay(Fl_Slider* o, void* v) inline void EnvelopePluginGUI::cb_Sustain_i(Fl_Slider* o, void* v) { char str[10]; - m_Plugin->SetSustain(1.0f-o->value()); + m_GUICH->Set("Sustain",1.0f-o->value()); sprintf(str,"%4.0f %%", 100*(1.0f-o->value())); m_out_sustain->value(str); } @@ -226,7 +226,7 @@ inline void EnvelopePluginGUI::cb_Release_i(Fl_Slider* o, void* v) { char str[10]; float value=TIMED_SLIDER_MAX-o->value(); - m_Plugin->SetRelease(value*value); + m_GUICH->Set("Release",value*value); sprintf(str,"%5.3f s", value*value); m_out_release->value(str); } @@ -237,7 +237,7 @@ inline void EnvelopePluginGUI::cb_Volume_i(Fl_Slider* o, void* v) { char str[10]; - m_Plugin->SetVolume(1.0f-o->value()); + m_GUICH->Set("Volume",1.0f-o->value()); sprintf(str,"%4.0f %%", 100*(1.0f-o->value())); m_out_volume->value(str); } diff --git a/SpiralSound/Plugins/EnvelopePlugin/EnvelopePluginGUI.h b/SpiralSound/Plugins/EnvelopePlugin/EnvelopePluginGUI.h index 79c5f31..de09f51 100644 --- a/SpiralSound/Plugins/EnvelopePlugin/EnvelopePluginGUI.h +++ b/SpiralSound/Plugins/EnvelopePlugin/EnvelopePluginGUI.h @@ -34,12 +34,10 @@ class EnvelopePluginGUI : public SpiralPluginGUI { public: - EnvelopePluginGUI(int w, int h, EnvelopePlugin *o,const HostInfo *Info); + EnvelopePluginGUI(int w, int h, EnvelopePlugin *o,ChannelHandler *ch,const HostInfo *Info); - virtual void UpdateValues(); - virtual SpiralPlugin* GetPlugin() { return m_Plugin; } - - EnvelopePlugin *m_Plugin; + virtual void UpdateValues(SpiralPlugin *o); + private: Fl_Slider *Thresh; diff --git a/SpiralSound/Plugins/EnvelopePlugin/Makefile.in b/SpiralSound/Plugins/EnvelopePlugin/Makefile.in index 8e66576..a6ecd6c 100644 --- a/SpiralSound/Plugins/EnvelopePlugin/Makefile.in +++ b/SpiralSound/Plugins/EnvelopePlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \ EnvelopePluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \ EnvelopePluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -162,3 +165,5 @@ EnvelopePluginGUI.o: EnvelopePluginGUI.C \ ../SpiralPluginGUI.h \ ../Widgets/Fl_DragBar.H +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/FilterPlugin/FilterPlugin.C b/SpiralSound/Plugins/FilterPlugin/FilterPlugin.C index 23d948a..ee2d144 100644 --- a/SpiralSound/Plugins/FilterPlugin/FilterPlugin.C +++ b/SpiralSound/Plugins/FilterPlugin/FilterPlugin.C @@ -64,6 +64,12 @@ m_RevResonanceMod(false) m_PluginInfo.PortTips.push_back("Cutoff CV"); m_PluginInfo.PortTips.push_back("Emphasis CV"); m_PluginInfo.PortTips.push_back("Output"); + + m_AudioCH->Register("Cutoff",&fc); + m_AudioCH->Register("Resonance",&Q); + m_AudioCH->Register("RevC",&m_RevCutoffMod); + m_AudioCH->Register("RevR",&m_RevResonanceMod); + } FilterPlugin::~FilterPlugin() @@ -92,11 +98,9 @@ PluginInfo &FilterPlugin::Initialise(const HostInfo *Host) SpiralGUIType *FilterPlugin::CreateGUI() { - m_GUI = new FilterPluginGUI(m_PluginInfo.Width, + return new FilterPluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, - this,m_HostInfo); - m_GUI->hide(); - return m_GUI; + this,m_AudioCH,m_HostInfo); } void FilterPlugin::Execute() @@ -142,7 +146,7 @@ void FilterPlugin::Execute() m_LastFC=fc; } } - + float in = GetInput(0,n); //if (in!=0) //{ diff --git a/SpiralSound/Plugins/FilterPlugin/FilterPlugin.h b/SpiralSound/Plugins/FilterPlugin/FilterPlugin.h index 7ed15f0..13f2d6e 100644 --- a/SpiralSound/Plugins/FilterPlugin/FilterPlugin.h +++ b/SpiralSound/Plugins/FilterPlugin/FilterPlugin.h @@ -36,17 +36,10 @@ public: virtual void Execute(); virtual void StreamOut(ostream &s); virtual void StreamIn(istream &s); - - // has to be defined in the plugin - virtual void UpdateGUI() { Fl::check(); } void Reset(); void SetupCoeffs(); - void SetCutoff(double s) {fc=s;} - void SetResonance(double s) {Q=s;} - void SetRevCutoffMod(bool s) {m_RevCutoffMod=s;} - void SetRevResonanceMod(bool s) {m_RevResonanceMod=s;} double GetCutoff() {return fc;} double GetResonance() {return Q;} bool GetRevCutoffMod() {return m_RevCutoffMod;} @@ -58,10 +51,10 @@ private: // Voice independant float *coef; - double fs, fc; // Sampling frequency, cutoff frequency - double Q; // Resonance > 1.0 < 1000 - double m_LastFC; - double m_LastQ; + float fs, fc; // Sampling frequency, cutoff frequency + float Q; // Resonance > 1.0 < 1000 + float m_LastFC; + float m_LastQ; unsigned nInd; double a0, a1, a2, b0, b1, b2; double k; // overall gain factor diff --git a/SpiralSound/Plugins/FilterPlugin/FilterPluginGUI.C b/SpiralSound/Plugins/FilterPlugin/FilterPluginGUI.C index e389571..4e978b1 100644 --- a/SpiralSound/Plugins/FilterPlugin/FilterPluginGUI.C +++ b/SpiralSound/Plugins/FilterPlugin/FilterPluginGUI.C @@ -26,11 +26,9 @@ static const int GUIBG2_COLOUR = 145; //////////////////////////////////////////// -FilterPluginGUI::FilterPluginGUI(int w, int h,FilterPlugin *o,const HostInfo *Info) : -SpiralPluginGUI(w,h,o) +FilterPluginGUI::FilterPluginGUI(int w, int h,FilterPlugin *o,ChannelHandler *ch,const HostInfo *Info) : +SpiralPluginGUI(w,h,o,ch) { - m_Plugin=o; - Cutoff = new Fl_Slider(15, 20, 20, 70, "Cutoff"); Cutoff->type(4); Cutoff->selection_color(GUI_COLOUR); @@ -64,38 +62,40 @@ SpiralPluginGUI(w,h,o) end(); } -void FilterPluginGUI::UpdateValues() +void FilterPluginGUI::UpdateValues(SpiralPlugin *o) { - Cutoff->value(100.0f-sqrt(m_Plugin->GetCutoff()-10.0f)); - Resonance->value(m_Plugin->GetResonance()-1.0f); + FilterPlugin *Plugin = (FilterPlugin*)o; + + Cutoff->value(100.0f-sqrt(Plugin->GetCutoff()-10.0f)); + Resonance->value(Plugin->GetResonance()-1.0f); RevCutoff->value(0); RevResonance->value(0); - if (m_Plugin->GetRevCutoffMod()) RevCutoff->value(1); - if (m_Plugin->GetRevResonanceMod()) RevResonance->value(1); + if (Plugin->GetRevCutoffMod()) RevCutoff->value(1); + if (Plugin->GetRevResonanceMod()) RevResonance->value(1); } inline void FilterPluginGUI::cb_Cutoff_i(Fl_Slider* o, void* v) { float value=100.0f-o->value(); - m_Plugin->SetCutoff((value*value)+10.0f); + m_GUICH->Set("Cutoff",(float)(value*value)+10.0f); } void FilterPluginGUI::cb_Cutoff(Fl_Slider* o, void* v) { ((FilterPluginGUI*)(o->parent()))->cb_Cutoff_i(o,v); } inline void FilterPluginGUI::cb_Resonance_i(Fl_Knob* o, void* v) -{ m_Plugin->SetResonance(o->value()+1.0f); } +{ m_GUICH->Set("Resonance",(float)o->value()+1.0f); } void FilterPluginGUI::cb_Resonance(Fl_Knob* o, void* v) { ((FilterPluginGUI*)(o->parent()))->cb_Resonance_i(o,v); } inline void FilterPluginGUI::cb_RevCutoff_i(Fl_Button* o, void* v) -{ m_Plugin->SetRevCutoffMod(o->value()); } +{ m_GUICH->Set("RevC",(bool)o->value()); } void FilterPluginGUI::cb_RevCutoff(Fl_Button* o, void* v) { ((FilterPluginGUI*)(o->parent()))->cb_RevCutoff_i(o,v); } inline void FilterPluginGUI::cb_RevResonance_i(Fl_Button* o, void* v) -{ m_Plugin->SetRevResonanceMod(o->value()); } +{ m_GUICH->Set("RevR",(bool)o->value()); } void FilterPluginGUI::cb_RevResonance(Fl_Button* o, void* v) { ((FilterPluginGUI*)(o->parent()))->cb_RevResonance_i(o,v); } diff --git a/SpiralSound/Plugins/FilterPlugin/FilterPluginGUI.h b/SpiralSound/Plugins/FilterPlugin/FilterPluginGUI.h index 4441115..4cca4d3 100644 --- a/SpiralSound/Plugins/FilterPlugin/FilterPluginGUI.h +++ b/SpiralSound/Plugins/FilterPlugin/FilterPluginGUI.h @@ -32,12 +32,9 @@ class FilterPluginGUI : public SpiralPluginGUI { public: - FilterPluginGUI(int w, int h, FilterPlugin *o,const HostInfo *Info); + FilterPluginGUI(int w, int h, FilterPlugin *o,ChannelHandler *ch,const HostInfo *Info); - virtual void UpdateValues(); - virtual SpiralPlugin* GetPlugin() { return m_Plugin; } - - FilterPlugin *m_Plugin; + virtual void UpdateValues(SpiralPlugin *o); private: diff --git a/SpiralSound/Plugins/FilterPlugin/Makefile.in b/SpiralSound/Plugins/FilterPlugin/Makefile.in index 2ff9abb..d59de5e 100644 --- a/SpiralSound/Plugins/FilterPlugin/Makefile.in +++ b/SpiralSound/Plugins/FilterPlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -51,6 +52,7 @@ HEADERS = ../SpiralPlugin.h \ FilterPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -59,6 +61,7 @@ SOURCES = ../SpiralPlugin.C \ FilterPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -172,3 +175,5 @@ FilterPluginGUI.o: FilterPluginGUI.C \ ../Widgets/Fl_DragBar.H \ ../Widgets/Fl_Knob.H +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/JackPlugin/JackPlugin.C b/SpiralSound/Plugins/JackPlugin/JackPlugin.C index 3573b48..85a20b3 100644 --- a/SpiralSound/Plugins/JackPlugin/JackPlugin.C +++ b/SpiralSound/Plugins/JackPlugin/JackPlugin.C @@ -317,7 +317,8 @@ int GetID() /////////////////////////////////////////////////////// -JackPlugin::JackPlugin() +JackPlugin::JackPlugin() : +m_UpdateNames(false) { m_RefCount++; @@ -340,6 +341,15 @@ JackPlugin::JackPlugin() sprintf(Temp,"SSM Input %d",n); m_PluginInfo.PortTips.push_back(Temp); } + + m_AudioCH->Register("Num",&GUIArgs.Num); + m_AudioCH->RegisterData("Port",ChannelHandler::INPUT,&GUIArgs.Port,sizeof(GUIArgs.Port)); + m_AudioCH->Register("NumInputPortNames",&m_NumInputPortNames,ChannelHandler::OUTPUT); + m_AudioCH->Register("NumOutputPortNames",&m_NumOutputPortNames,ChannelHandler::OUTPUT); + m_AudioCH->RegisterData("InputPortNames",ChannelHandler::OUTPUT,&m_InputPortNames,sizeof(m_InputPortNames)); + m_AudioCH->RegisterData("OutputPortNames",ChannelHandler::OUTPUT,&m_OutputPortNames,sizeof(m_OutputPortNames)); + m_AudioCH->Register("UpdateNames",&m_UpdateNames,ChannelHandler::OUTPUT); + m_AudioCH->Register("Connected",&m_Connected,ChannelHandler::OUTPUT); } JackPlugin::~JackPlugin() @@ -364,11 +374,9 @@ PluginInfo &JackPlugin::Initialise(const HostInfo *Host) SpiralGUIType *JackPlugin::CreateGUI() { - m_GUI = new JackPluginGUI(m_PluginInfo.Width, + return new JackPluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, - this,m_HostInfo); - m_GUI->hide(); - return m_GUI; + this,m_AudioCH,m_HostInfo); } void JackPlugin::Execute() @@ -401,3 +409,27 @@ void JackPlugin::Execute() } +void JackPlugin::ExecuteCommands() +{ + if (m_UpdateNames) + { + vector InputNames,OutputNames; + GetPortNames(InputNames,OutputNames); + for (vector::iterator i=InputNames.begin(); + i!=InputNames.end(); ++i) + { + strcpy(m_InputPortNames[n],i->c_str()); + } + + for (vector::iterator i=OutputNames.begin(); + i!=OutputNames.end(); ++i) + { + strcpy(m_OutputPortNames[n],i->c_str()); + } + + m_NumInputPortNames=InputNames.size(); + m_NumOutputPortNames=OutputNames.size(); + + m_UpdateNames=false; + } +} diff --git a/SpiralSound/Plugins/JackPlugin/JackPlugin.h b/SpiralSound/Plugins/JackPlugin/JackPlugin.h index c18d58f..62b18b1 100644 --- a/SpiralSound/Plugins/JackPlugin/JackPlugin.h +++ b/SpiralSound/Plugins/JackPlugin/JackPlugin.h @@ -30,6 +30,8 @@ typedef jack_default_audio_sample_t sample_t; const int NUM_INPUTS = 8; const int NUM_OUTPUTS = 8; +const int MAX_INPUTPORTS = 256; +const int MAX_OUTPUTPORTS = 256; class JackClient { @@ -99,17 +101,32 @@ public: virtual void StreamOut(ostream &s) {} virtual void StreamIn(istream &s) {} - // has to be defined in the plugin - virtual void UpdateGUI() { Fl::check(); } - + enum GUICommands{NONE,ATTACH,DETACH,CONNECTINPUT,CONNECTOUTPUT}; + struct GUIArgs + { + int Num; + char Port[256]; + }; + +private: + GUIArgs m_GUIArgs; + + // slightly clumsy, but we have to share this data with the gui + int m_NumInputPortNames; + char m_InputPortNames[MAX_INPUTPORTS][256]; + int m_NumOutputPortNames; + char m_OutputPortNames[MAX_OUTPUTPORTS][256]; + void Attach() { JackClient::Get()->Attach(); } void Detach() { JackClient::Get()->Detach(); } void GetPortNames(vector &InputNames,vector &OutputNames) { JackClient::Get()->GetPortNames(InputNames,OutputNames); } void ConnectInput(int n, const string &JackPort) { JackClient::Get()->ConnectInput(n,JackPort); } void ConnectOutput(int n, const string &JackPort) { JackClient::Get()->ConnectOutput(n,JackPort); } -private: + static int m_RefCount; static int m_NoExecuted; + bool m_UpdateNames; + bool m_Connected; }; #endif diff --git a/SpiralSound/Plugins/JackPlugin/JackPluginGUI.C b/SpiralSound/Plugins/JackPlugin/JackPluginGUI.C index b9839c1..7a86467 100644 --- a/SpiralSound/Plugins/JackPlugin/JackPluginGUI.C +++ b/SpiralSound/Plugins/JackPlugin/JackPluginGUI.C @@ -75,8 +75,8 @@ int OptionsList(const vector &List) //////////////////////////////////////////////////////////////////////// -JackPluginGUI::JackPluginGUI(int w, int h,JackPlugin *o,const HostInfo *Info) : -SpiralPluginGUI(w,h,o) +JackPluginGUI::JackPluginGUI(int w, int h,JackPlugin *o,ChannelHandler *ch,const HostInfo *Info) : +SpiralPluginGUI(w,h,o,ch) { for (int n=0; n<255; n++) Numbers[n]=n; @@ -122,7 +122,7 @@ SpiralPluginGUI(w,h,o) end(); } -void JackPluginGUI::UpdateValues() +void JackPluginGUI::UpdateValues(SpiralPlugin *o) { } @@ -146,7 +146,26 @@ inline void JackPluginGUI::cb_OutputConnect_i(Fl_Button* o, void* v) { cerr<<"cb_OutputConnect_i"< Inputs,Outputs; - m_Plugin->GetPortNames(Inputs,Outputs); + m_GUICH->Set("UpdateNames",true); + + // bit of a hack for multithreaded safety + int ninputs=m_GUICH->GetInt("NumOutputPortNames"), + int noutputs=m_GUICH->GetInt("NumOutputPortNames"); + char **inputs = new char[MAX_INPUTPORTS][256]; + char **outputs = new char[MAX_OUTPUTPORTS][256];; + + for (int n=0 nGetInt("NumInputPortNames"); n++) + { + Inputs.push_back(inputs[n]); + } + + for (int n=0 nGetInt("NumOutputPortNames"); n++) + { + Inputs.push_back(outputs[n]); + } + + delete[] inputs; + delete[] outputs; // connect this plugin's output to a jack input int choice=OptionsList(Inputs); diff --git a/SpiralSound/Plugins/JackPlugin/JackPluginGUI.h b/SpiralSound/Plugins/JackPlugin/JackPluginGUI.h index 5296361..5638249 100644 --- a/SpiralSound/Plugins/JackPlugin/JackPluginGUI.h +++ b/SpiralSound/Plugins/JackPlugin/JackPluginGUI.h @@ -35,14 +35,10 @@ class JackPluginGUI : public SpiralPluginGUI { public: - JackPluginGUI(int w, int h, JackPlugin *o,const HostInfo *Info); + JackPluginGUI(int w, int h, JackPlugin *o,ChannelHandler *ch,const HostInfo *Info); - virtual void UpdateValues(); - virtual SpiralPlugin* GetPlugin() { return m_Plugin; } - - void SetAttached(bool s) { m_Indicator->value(s); } - - JackPlugin *m_Plugin; + virtual void UpdateValues(SpiralPlugin *o); + virtual void draw() { m_Indicator->value(m_GUICH->GetBool("Connected"); }; private: diff --git a/SpiralSound/Plugins/JackPlugin/Makefile.in b/SpiralSound/Plugins/JackPlugin/Makefile.in index 99ab422..b6def35 100644 --- a/SpiralSound/Plugins/JackPlugin/Makefile.in +++ b/SpiralSound/Plugins/JackPlugin/Makefile.in @@ -45,6 +45,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../Widgets/Fl_LED_Button.H \ @@ -54,6 +55,7 @@ HEADERS = ../SpiralPlugin.h \ JackPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../Widgets/Fl_LED_Button.cxx \ @@ -63,6 +65,7 @@ SOURCES = ../SpiralPlugin.C \ JackPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../Widgets/Fl_LED_Button.o \ @@ -187,3 +190,5 @@ JackPluginGUI.o: JackPluginGUI.C \ ../SpiralPluginGUI.h \ ../Widgets/Fl_DragBar.H +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/JoystickPlugin/Makefile.in b/SpiralSound/Plugins/JoystickPlugin/Makefile.in index 0935d33..8b414a5 100644 --- a/SpiralSound/Plugins/JoystickPlugin/Makefile.in +++ b/SpiralSound/Plugins/JoystickPlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \ JoystickPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \ JoystickPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -166,4 +169,5 @@ JoystickPluginGUI.o: JoystickPluginGUI.C \ ../SpiralPluginGUI.h \ ../Widgets/Fl_DragBar.H - +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.C b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.C index 14e2ca6..07a4614 100644 --- a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.C +++ b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.C @@ -20,7 +20,75 @@ #include #include "SpiralIcon.xpm" #include "utils.h" - +#include + +//////////////////////////////////////////// + +/* FIXME: No matter what, I can't let this as it!! */ +static LADSPAPlugin * lg = NULL; + +void describePluginLibrary(const char * pcFullFilename, void * pvPluginHandle, + LADSPA_Descriptor_Function pfDescriptorFunction) { + const LADSPA_Descriptor * psDescriptor; + long lIndex; + unsigned long lPluginIndex; + unsigned long lPortIndex; + unsigned long lLength; + LADSPA_PortRangeHintDescriptor iHintDescriptor; + LADSPA_Data fBound; + +#define testcond(c,s) { \ + if (!(c)) { \ + cerr << (s); \ + failure = 1; \ + } \ +} + for (lIndex = 0; (psDescriptor = pfDescriptorFunction(lIndex)) != NULL; lIndex++) { + int failure = 0; + testcond(!LADSPA_IS_REALTIME(psDescriptor->Properties), "ERROR: PLUGIN MUST RUN REAL TIME.\n"); + testcond(psDescriptor->instantiate, "ERROR: PLUGIN HAS NO INSTANTIATE FUNCTION.\n"); + testcond(psDescriptor->connect_port, "ERROR: PLUGIN HAS NO CONNECT_PORT FUNCTION.\n"); + testcond(psDescriptor->run, "ERROR: PLUGIN HAS NO RUN FUNCTION.\n"); + testcond(!(psDescriptor->run_adding != 0 && psDescriptor->set_run_adding_gain == 0), + "ERROR: PLUGIN HAS RUN_ADDING FUNCTION BUT NOT SET_RUN_ADDING_GAIN.\n"); + testcond(!(psDescriptor->run_adding == 0 && psDescriptor->set_run_adding_gain != 0), + "ERROR: PLUGIN HAS SET_RUN_ADDING_GAIN FUNCTION BUT NOT RUN_ADDING.\n"); + testcond(psDescriptor->cleanup, "ERROR: PLUGIN HAS NO CLEANUP FUNCTION.\n"); + testcond(!LADSPA_IS_INPLACE_BROKEN(psDescriptor->Properties), + "ERROR: THIS PLUGIN CANNOT USE IN-PLACE PROCESSING.\n"); + testcond(psDescriptor->PortCount, "ERROR: PLUGIN HAS NO PORTS.\n"); + + if (!failure) { + LPluginInfo pi; + pi.Filename = pcFullFilename; + pi.Label = psDescriptor->Label; + pi.Name = psDescriptor->Name; + /* ARGH! I really can't stand this ugly hack */ + lg->m_LADSPAList.push_back(pi); + } else { + cerr << "Plugin ignored...\n\n"; + } + } + + dlclose(pvPluginHandle); +} + +void LADSPAPlugin::LoadPluginList(void) +{ + m_LADSPAList.clear(); + m_CurrentPlugin.Name = ""; + m_CurrentPlugin.Filename = ""; + m_CurrentPlugin.Label = ""; + + lg = this; + LADSPAPluginSearch(describePluginLibrary); + lg = NULL; + + sort(m_LADSPAList.begin(), m_LADSPAList.end(), LPluginInfoSortAsc()); +} + +//////////////////////////////////////////////////// + extern "C" { SpiralPlugin* CreateInstance() { @@ -54,6 +122,17 @@ m_Amped(false) m_PluginInfo.NumInputs=0; m_PluginInfo.NumOutputs=1; m_PluginInfo.PortTips.push_back("Nuffink yet"); + + m_AudioCH->Register("Gain",&m_Gain); + m_AudioCH->Register("Amped",&m_Amped); + m_AudioCH->RegisterData("Desc",ChannelHandler::OUTPUT,&PlugDesc,sizeof(PlugDesc)); + m_AudioCH->Register("Num",&m_GUIArgs.Num); + m_AudioCH->Register("Value",&m_GUIArgs.Value); + m_AudioCH->Register("Clamp",&m_GUIArgs.Clamp); + m_AudioCH->RegisterData("Filename",ChannelHandler::INPUT,&m_GUIArgs.Filename,sizeof(m_GUIArgs.Filename)); + m_AudioCH->RegisterData("Label",ChannelHandler::INPUT,&m_GUIArgs.Label,sizeof(m_GUIArgs.Label)); + + LoadPluginList(); } LADSPAPlugin::~LADSPAPlugin() @@ -70,11 +149,7 @@ PluginInfo &LADSPAPlugin::Initialise(const HostInfo *Host) SpiralGUIType *LADSPAPlugin::CreateGUI() { - m_GUI = new LADSPAPluginGUI(m_PluginInfo.Width, - m_PluginInfo.Height, - this,m_HostInfo); - m_GUI->hide(); - return m_GUI; + return new LADSPAPluginGUI(m_PluginInfo.Width,m_PluginInfo.Height,this,m_AudioCH,m_HostInfo,m_LADSPAList); } void LADSPAPlugin::Execute() @@ -106,7 +181,7 @@ void LADSPAPlugin::Execute() } } // Update the GUI outputs with the first value in the buffer - ((LADSPAPluginGUI*)m_GUI)->UpdatePortDisplay(n,m_LADSPABufVec[n][0]); + //((LADSPAPluginGUI*)m_GUI)->UpdatePortDisplay(n,m_LADSPABufVec[n][0]); } else // zero { @@ -138,6 +213,20 @@ void LADSPAPlugin::Execute() } } +void LADSPAPlugin::ExecuteCommands() +{ + if (m_AudioCH->IsCommandWaiting()) + { + switch(m_AudioCH->GetCommand()) + { + case (SETMIN) : SetMin(m_GUIArgs.Num,m_GUIArgs.Value); break; + case (SETMAX) : SetMax(m_GUIArgs.Num,m_GUIArgs.Value); break; + case (SETCLAMP) : SetPortClamp(m_GUIArgs.Num,m_GUIArgs.Clamp); break; + case (UPDATEPLUGIN) : UpdatePlugin(m_GUIArgs.Num); break; + }; + } +} + void LADSPAPlugin::StreamOut(ostream &s) { s<GetFilename()<<" "; - s<<((LADSPAPluginGUI*)m_GUI)->GetLabel()<<" "; + s<GetFilename()<<" "; - s<<((LADSPAPluginGUI*)m_GUI)->GetLabel()<<" "; + s<::iterator i=m_PortMin.begin(); @@ -194,8 +283,8 @@ void LADSPAPlugin::StreamOut(ostream &s) case 1: { s<GetFilename()<<" "; - s<<((LADSPAPluginGUI*)m_GUI)->GetLabel()<<" "; + s<SetMinMax(n,m_PortMin[n],m_PortMax[n],m_PortClamp[n]); + m_CurrentPlugin.Ports[n].Min=m_PortMin[n]; + m_CurrentPlugin.Ports[n].Max=m_PortMax[n]; + m_CurrentPlugin.Ports[n].Clamped=m_PortClamp[n]; } } break; @@ -279,10 +372,14 @@ void LADSPAPlugin::StreamIn(istream &s) { UpdatePlugin(Filename.c_str(), Label.c_str(), false); } - + + m_CurrentPlugin.Ports.reserve(PortCount); + for (int n=0; nSetMinMax(n,m_PortMin[n],m_PortMax[n],m_PortClamp[n]); + m_CurrentPlugin.Ports[n].Min=m_PortMin[n]; + m_CurrentPlugin.Ports[n].Max=m_PortMax[n]; + m_CurrentPlugin.Ports[n].Clamped=m_PortClamp[n]; } } break; @@ -303,7 +400,12 @@ void LADSPAPlugin::StreamIn(istream &s) } } -bool LADSPAPlugin::UpdatePlugin(const char * filename, const char * label, bool PortClampReset) +bool LADSPAPlugin::UpdatePlugin(int n) +{ + return UpdatePlugin(m_LADSPAList[n].Filename.c_str(),m_LADSPAList[n].Label.c_str()); +} + +bool LADSPAPlugin::UpdatePlugin(const char * filename, const char * label, bool PortClampReset=true) { // first call with same info, to clear the ports UpdatePluginInfoWithHost(); @@ -385,11 +487,13 @@ bool LADSPAPlugin::UpdatePlugin(const char * filename, const char * label, bool ////////////////////////////// // Update the GUI stuff - ((LADSPAPluginGUI*)m_GUI)->SetName(PlugDesc->Name); - ((LADSPAPluginGUI*)m_GUI)->SetMaker(PlugDesc->Maker); + m_CurrentPlugin.Name=PlugDesc->Name; + m_CurrentPlugin.Maker=PlugDesc->Maker; + m_CurrentPlugin.Filename=filename; + m_CurrentPlugin.Label=label; + m_CurrentPlugin.Ports.clear(); m_PluginInfo.PortTips.clear(); - ((LADSPAPluginGUI*)m_GUI)->ClearPortInfo(); string desc; c=0; @@ -400,7 +504,11 @@ bool LADSPAPlugin::UpdatePlugin(const char * filename, const char * label, bool desc = string(PlugDesc->PortNames[i]) + (LADSPA_IS_PORT_CONTROL(PlugDesc->PortDescriptors[i]) ? " (CV)" : " (AU)"); m_PluginInfo.PortTips.push_back(desc.c_str()); - ((LADSPAPluginGUI*)m_GUI)->AddPortInfo(m_PluginInfo.PortTips[c].c_str()); + + LPluginInfo::LPortDetails PortDetails; + PortDetails.Name=m_PluginInfo.PortTips[c].c_str(); + m_CurrentPlugin.Ports.push_back(PortDetails); + c++; } } @@ -415,10 +523,7 @@ bool LADSPAPlugin::UpdatePlugin(const char * filename, const char * label, bool m_PluginInfo.PortTips.push_back(desc.c_str()); } } - - ((LADSPAPluginGUI*)m_GUI)->SetFilename(filename); - ((LADSPAPluginGUI*)m_GUI)->SetLabel(label); - + UpdatePluginInfoWithHost(); if (PortClampReset) @@ -455,8 +560,10 @@ bool LADSPAPlugin::UpdatePlugin(const char * filename, const char * label, bool m_PortMax.push_back(Max); // PortClamp defaults to true m_PortClamp.push_back(true); - - ((LADSPAPluginGUI*)m_GUI)->SetMinMax(n, Min, Max, true); + + m_CurrentPlugin.Ports[n].Min=Min; + m_CurrentPlugin.Ports[n].Max=Max; + m_CurrentPlugin.Ports[n].Clamped=true; } } return true; diff --git a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.h b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.h index 22aba89..28d3609 100644 --- a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.h +++ b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.h @@ -19,12 +19,42 @@ #include "../SpiralPlugin.h" #include #include "ladspa.h" +#include "utils.h" #ifndef LADSPAPLUGIN #define LADSPAPLUGIN static const unsigned int NUM_PORTS = 8; +class LPluginInfo { +public: + string Filename; + string Label; + string Name; + string Maker; + + struct LPortDetails + { + string Name; + float Min,Max; + bool Clamped; + }; + + vector Ports; + + bool operator<(const LPluginInfo & li) { return (Name < li.Name); } + bool operator==(const LPluginInfo& li) { return (Name == li.Name); } +}; + +// For sorting vectors of LPluginInfo's +struct LPluginInfoSortAsc +{ + bool operator()(const LPluginInfo & begin, const LPluginInfo & end) + { + return begin.Name < end.Name; + } +}; + class LADSPAPlugin : public SpiralPlugin { public: @@ -34,24 +64,36 @@ public: virtual PluginInfo &Initialise(const HostInfo *Host); virtual SpiralGUIType *CreateGUI(); virtual void Execute(); + virtual void ExecuteCommands(); virtual void StreamOut(ostream &s); virtual void StreamIn(istream &s); - - // has to be defined in the plugin - virtual void UpdateGUI() { Fl::check(); } - - void SetGain(float s) { m_Gain=s; } + float GetGain() { return m_Gain; } - void SetMin(int n,float min) { m_PortMin[n]=min; } - void SetMax(int n,float max) { m_PortMax[n]=max; } - void SetPortClamp(int n,bool i) { m_PortClamp[n]=i; } - void SetAmped(bool s) { m_Amped=s; } bool GetAmped() { return m_Amped; } - bool UpdatePlugin(const char * filename, const char * label, bool PortClampReset=true); - const LADSPA_Descriptor * GetPlugDesc(void) { return PlugDesc; } - + enum GUICommands{NONE,SETMIN,SETMAX,SETCLAMP,UPDATEPLUGIN}; + struct GUIArgs + { + int Num; + float Value; + bool Clamp; + char Filename[256]; + char Label[256]; + }; + private: + + GUIArgs m_GUIArgs; + + void SetMin(int n,float min) { m_PortMin[n]=min; } + void SetMax(int n,float max) { m_PortMax[n]=max; } + void SetPortClamp(int n,bool i) { m_PortClamp[n]=i; } + bool UpdatePlugin(int n); + bool UpdatePlugin(const char * filename, const char * label, bool PortClampReset=true); + + friend void describePluginLibrary(const char * pcFullFilename, void * pvPluginHandle, LADSPA_Descriptor_Function pfDescriptorFunction); + void LoadPluginList(void); + void * PlugHandle; const LADSPA_Descriptor * PlugDesc; @@ -62,6 +104,10 @@ private: vector m_PortMax; vector m_PortClamp; + // our database of ladspa plugins + vector m_LADSPAList; + LPluginInfo m_CurrentPlugin; + float m_Gain; bool m_Amped; }; diff --git a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.C b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.C index 0e711af..384b630 100644 --- a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.C +++ b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.C @@ -25,97 +25,30 @@ #include #include #include -#include #include "utils.h" static const int GUI_COLOUR = 179; static const int GUIBG_COLOUR = 144; static const int GUIBG2_COLOUR = 145; -//////////////////////////////////////////// - -/* FIXME: No matter what, I can't let this as it!! */ -static LADSPAPluginGUI * lg = NULL; - -void describePluginLibrary(const char * pcFullFilename, void * pvPluginHandle, - LADSPA_Descriptor_Function pfDescriptorFunction) { - const LADSPA_Descriptor * psDescriptor; - long lIndex; - unsigned long lPluginIndex; - unsigned long lPortIndex; - unsigned long lLength; - LADSPA_PortRangeHintDescriptor iHintDescriptor; - LADSPA_Data fBound; - -#define testcond(c,s) { \ - if (!(c)) { \ - cerr << (s); \ - failure = 1; \ - } \ -} - for (lIndex = 0; (psDescriptor = pfDescriptorFunction(lIndex)) != NULL; lIndex++) { - int failure = 0; - testcond(!LADSPA_IS_REALTIME(psDescriptor->Properties), "ERROR: PLUGIN MUST RUN REAL TIME.\n"); - testcond(psDescriptor->instantiate, "ERROR: PLUGIN HAS NO INSTANTIATE FUNCTION.\n"); - testcond(psDescriptor->connect_port, "ERROR: PLUGIN HAS NO CONNECT_PORT FUNCTION.\n"); - testcond(psDescriptor->run, "ERROR: PLUGIN HAS NO RUN FUNCTION.\n"); - testcond(!(psDescriptor->run_adding != 0 && psDescriptor->set_run_adding_gain == 0), - "ERROR: PLUGIN HAS RUN_ADDING FUNCTION BUT NOT SET_RUN_ADDING_GAIN.\n"); - testcond(!(psDescriptor->run_adding == 0 && psDescriptor->set_run_adding_gain != 0), - "ERROR: PLUGIN HAS SET_RUN_ADDING_GAIN FUNCTION BUT NOT RUN_ADDING.\n"); - testcond(psDescriptor->cleanup, "ERROR: PLUGIN HAS NO CLEANUP FUNCTION.\n"); - testcond(!LADSPA_IS_INPLACE_BROKEN(psDescriptor->Properties), - "ERROR: THIS PLUGIN CANNOT USE IN-PLACE PROCESSING.\n"); - testcond(psDescriptor->PortCount, "ERROR: PLUGIN HAS NO PORTS.\n"); - - if (!failure) { - LPluginInfo pi; - pi.Filename = pcFullFilename; - pi.Label = psDescriptor->Label; - pi.Name = psDescriptor->Name; - /* ARGH! I really can't stand this ugly hack */ - lg->PluginList.push_back(pi); - } else { - cerr << "Plugin ignored...\n\n"; - } - } - - dlclose(pvPluginHandle); -} - -void LADSPAPluginGUI::refreshPluginList(void) -{ - PluginList.clear(); - CurrentPlugin.Name = ""; - CurrentPlugin.Filename = ""; - CurrentPlugin.Label = ""; - - lg = this; - LADSPAPluginSearch(describePluginLibrary); - lg = NULL; - - m_Browser->clear(); - - sort(PluginList.begin(), PluginList.end(), LPluginInfoSortAsc()); - - for (vector::iterator i = PluginList.begin(); i != PluginList.end(); i++) - { - m_Browser->add((*i).Name.c_str()); - } -} - -LADSPAPluginGUI::LADSPAPluginGUI(int w, int h,LADSPAPlugin *o,const HostInfo *Info) : -SpiralPluginGUI(w,h,o) +LADSPAPluginGUI::LADSPAPluginGUI(int w, int h,LADSPAPlugin *o, ChannelHandler *ch,const HostInfo *Info, const vector &PVec) : +SpiralPluginGUI(w,h,o,ch) { + PluginList=PVec; + m_Filename="None"; - m_Plugin=o; - int Width=20; int Height=100; m_Browser= new Fl_Hold_Browser(5,20,290,260,"LADSPA Plugins"); m_Browser->callback((Fl_Callback*)cb_Select); + + for (vector::iterator i=PluginList.begin(); + i!=PluginList.end(); i++) + { + m_Browser->add((*i).Name.c_str()); + } m_InputScroll = new Fl_Scroll(300,80,290,150," Value Min Max Clamp?"); m_InputScroll->align(FL_ALIGN_TOP_LEFT); @@ -165,10 +98,6 @@ SpiralPluginGUI(w,h,o) m_PowerAmp->callback((Fl_Callback*)cb_PowerAmp); add(m_PowerAmp); - inited = 0; - refreshPluginList(); - inited = 1; - end(); } @@ -280,21 +209,24 @@ void LADSPAPluginGUI::AddPortInfo(const char *Info) } -void LADSPAPluginGUI::UpdateValues() +void LADSPAPluginGUI::UpdateValues(SpiralPlugin *o) { - m_OutputGain->value(m_Plugin->GetGain()); + LADSPAPlugin* Plugin = (LADSPAPlugin*)o; + m_OutputGain->value(Plugin->GetGain()); } inline void LADSPAPluginGUI::cb_Gain_i(Fl_Knob* o, void* v) -{ m_Plugin->SetGain(o->value()); } +{ m_GUICH->Set("Gain",(float)(o->value())); } void LADSPAPluginGUI::cb_Gain(Fl_Knob* o, void* v) { ((LADSPAPluginGUI*)(o->parent()))->cb_Gain_i(o,v); } inline void LADSPAPluginGUI::cb_Select_i(Fl_Hold_Browser* o) { m_Filename=PluginList[o->value()-1].Filename; - m_Label=PluginList[o->value()-1].Label; - m_Plugin->UpdatePlugin(m_Filename.c_str(), m_Label.c_str()); + m_Label=PluginList[o->value()-1].Label; + + m_GUICH->Set("Num",o->value()-1); + m_GUICH->SetCommand(LADSPAPlugin::UPDATEPLUGIN); } void LADSPAPluginGUI::cb_Select(Fl_Hold_Browser* o) { ((LADSPAPluginGUI*)(o->parent()))->cb_Select_i(o);} @@ -305,21 +237,21 @@ inline void LADSPAPluginGUI::cb_MinMax_i(Fl_Button* o, void* v) for (vector::iterator i=m_PortMin.begin(); i!=m_PortMin.end(); i++) { - m_Plugin->SetMin(n,atof((*i)->value())); + m_GUICH->Set("Min",(float)(n,atof((*i)->value()))); n++; } n=0; for (vector::iterator i=m_PortMax.begin(); i!=m_PortMax.end(); i++) { - m_Plugin->SetMax(n,atof((*i)->value())); + m_GUICH->Set("Max",(n,atof((*i)->value()))); n++; } n=0; for (vector::iterator i=m_PortClamp.begin(); i!=m_PortClamp.end(); i++) { - m_Plugin->SetPortClamp(n,(*i)->value()); + m_GUICH->Set("Clamp",(bool)(n,(*i)->value())); n++; } } @@ -328,7 +260,7 @@ void LADSPAPluginGUI::cb_MinMax(Fl_Button* o, void* v) inline void LADSPAPluginGUI::cb_PowerAmp_i(Fl_Button* o, void* v) { - m_Plugin->SetAmped(o->value()); + m_GUICH->Set("Amped",(bool)(o->value())); } void LADSPAPluginGUI::cb_PowerAmp(Fl_Button* o, void* v) { ((LADSPAPluginGUI*)(o->parent()))->cb_PowerAmp_i(o,v);} diff --git a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.h b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.h index 5c20424..cb517ea 100644 --- a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.h +++ b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.h @@ -31,7 +31,6 @@ #include "../Widgets/Fl_Knob.H" #include -#include "ladspa.h" #include #include "LADSPAPlugin.h" @@ -40,39 +39,18 @@ #ifndef LADSPAGUI #define LADSPAGUI -#include "ladspa.h" #include #include #include #include -#include "utils.h" - -class LPluginInfo { -public: - string Filename; - string Label; - string Name; - bool operator<(const LPluginInfo & li) { return (Name < li.Name); } - bool operator==(const LPluginInfo& li) { return (Name == li.Name); } -}; - -// For sorting vectors of LPluginInfo's -struct LPluginInfoSortAsc -{ - bool operator()(const LPluginInfo & begin, const LPluginInfo & end) - { - return begin.Name < end.Name; - } -}; class LADSPAPluginGUI : public SpiralPluginGUI { public: - LADSPAPluginGUI(int w, int h, LADSPAPlugin *o,const HostInfo *Info); + LADSPAPluginGUI(int w, int h, LADSPAPlugin *o, ChannelHandler *ch, const HostInfo *Info, const vector &PVec); ~LADSPAPluginGUI(); - virtual void UpdateValues(); - virtual SpiralPlugin* GetPlugin() { return m_Plugin; } + virtual void UpdateValues(SpiralPlugin *o); void SetName(const char *s); void SetMaker(const char *s); @@ -87,14 +65,9 @@ public: string GetLabel() { return m_Label; } void SetFilename(string s) { m_Filename=s; } void SetLabel(string s) { m_Label=s; } - - LADSPAPlugin *m_Plugin; - + private: - vector PluginList; - LPluginInfo CurrentPlugin; - friend void describePluginLibrary(const char * pcFullFilename, void * pvPluginHandle, LADSPA_Descriptor_Function pfDescriptorFunction); - void refreshPluginList(void); + LPluginInfo m_CurrentPlugin; Fl_Scroll *m_InputScroll; Fl_Pack *m_InputPack; @@ -110,6 +83,8 @@ private: vector m_PortMax; vector m_PortClamp; + vector PluginList; + // this is needed as fltk seems to crash if you delete // the pack, is won't delete the children properly??? vector m_PackVec; diff --git a/SpiralSound/Plugins/LADSPAPlugin/Makefile.in b/SpiralSound/Plugins/LADSPAPlugin/Makefile.in index d168d58..b7e3988 100644 --- a/SpiralSound/Plugins/LADSPAPlugin/Makefile.in +++ b/SpiralSound/Plugins/LADSPAPlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -52,6 +53,7 @@ HEADERS = ../SpiralPlugin.h \ utils.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -63,6 +65,7 @@ SOURCES = ../SpiralPlugin.C \ search.c OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -190,3 +193,5 @@ misc.o: misc.c \ search.o: search.c \ utils.h +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/LFOPlugin/LFOPlugin.C b/SpiralSound/Plugins/LFOPlugin/LFOPlugin.C index 4c05c4b..2cdf1ad 100644 --- a/SpiralSound/Plugins/LFOPlugin/LFOPlugin.C +++ b/SpiralSound/Plugins/LFOPlugin/LFOPlugin.C @@ -45,6 +45,9 @@ m_TableLength (DEFAULT_TABLE_LEN) { m_PluginInfo.PortTips.push_back ("Output"); m_PluginInfo.PortTips.push_back ("'Cosine' Output"); m_PluginInfo.PortTips.push_back ("Inverted Output"); + + m_AudioCH->Register("Freq",&m_Freq); + m_AudioCH->Register("Type",(char*)&m_Type); } LFOPlugin::~LFOPlugin() { @@ -59,9 +62,7 @@ PluginInfo &LFOPlugin::Initialise (const HostInfo *Host) { } SpiralGUIType *LFOPlugin::CreateGUI() { - m_GUI = new LFOPluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, this, m_HostInfo); - m_GUI->hide(); - return m_GUI; + return new LFOPluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, this, m_AudioCH, m_HostInfo); } void LFOPlugin::WriteWaves() { diff --git a/SpiralSound/Plugins/LFOPlugin/LFOPlugin.h b/SpiralSound/Plugins/LFOPlugin/LFOPlugin.h index d18f631..192f853 100644 --- a/SpiralSound/Plugins/LFOPlugin/LFOPlugin.h +++ b/SpiralSound/Plugins/LFOPlugin/LFOPlugin.h @@ -34,16 +34,16 @@ class LFOPlugin : public SpiralPlugin { virtual void Execute(); virtual void StreamOut (ostream &s); virtual void StreamIn (istream &s); - // has to be defined in the plugin - virtual void UpdateGUI() { Fl::check(); } + enum Type {SINE, TRIANGLE, SQUARE, SAW}; + void WriteWaves(); void NoteTrigger (int V, int s, int v); - void SetFreq (float s) { m_Freq=s; } float GetFreq() { return m_Freq; } - void SetType (Type t) { m_Type=t; } Type GetType() { return m_Type; } + private: + float AdjustPos (float pos); // Voice specific parameter int m_Note; diff --git a/SpiralSound/Plugins/LFOPlugin/LFOPluginGUI.C b/SpiralSound/Plugins/LFOPlugin/LFOPluginGUI.C index 87455be..7631dbc 100644 --- a/SpiralSound/Plugins/LFOPlugin/LFOPluginGUI.C +++ b/SpiralSound/Plugins/LFOPlugin/LFOPluginGUI.C @@ -124,15 +124,13 @@ static unsigned char *image_Saw[] = { (unsigned char*)" ", (unsigned char*)" "}; -LFOPluginGUI::LFOPluginGUI(int w, int h,LFOPlugin *o,const HostInfo *Info) : -SpiralPluginGUI(w,h,o), +LFOPluginGUI::LFOPluginGUI(int w, int h,LFOPlugin *o,ChannelHandler *ch,const HostInfo *Info) : +SpiralPluginGUI(w,h,o,ch), pixmap_Sine(image_Sine), pixmap_Tri(image_Tri), pixmap_Square(image_Square), pixmap_Saw(image_Saw) { - m_Plugin=o; - ShapeSine = new Fl_Check_Button (5, 15, 55, 30); ShapeSine->type (FL_RADIO_BUTTON); ShapeSine->down_box (FL_DIAMOND_DOWN_BOX); @@ -196,18 +194,20 @@ pixmap_Saw(image_Saw) { end(); } -void LFOPluginGUI::UpdateValues() { +void LFOPluginGUI::UpdateValues(SpiralPlugin *o) { + LFOPlugin* Plugin = (LFOPlugin*)o; + ShapeSine->value (0); ShapeTri->value (0); ShapeSquare->value (0); ShapeSaw->value (0); - switch (m_Plugin->GetType()) { + switch (Plugin->GetType()) { case LFOPlugin::SINE : ShapeSine->value (1); break; case LFOPlugin::TRIANGLE : ShapeTri->value (1); break; case LFOPlugin::SQUARE : ShapeSquare->value (1); break; case LFOPlugin::SAW : ShapeSaw->value (1); break; } - float x = m_Plugin->GetFreq(); + float x = Plugin->GetFreq(); NumFreq->value (x); x = 1 / x; Perd->value (x); @@ -217,8 +217,7 @@ void LFOPluginGUI::UpdateValues() { // Callbacks for knobs and counters inline void LFOPluginGUI::cb_Perd_i (Fl_Knob* o, void* v) { - m_Plugin->SetFreq (1 / o->value()); - UpdateValues(); + m_GUICH->Set("Freq",(float)(1.0f / o->value())); } void LFOPluginGUI::cb_Perd (Fl_Knob* o, void* v) { ((LFOPluginGUI*)(o->parent()))->cb_Perd_i (o, v); @@ -226,8 +225,7 @@ void LFOPluginGUI::cb_Perd (Fl_Knob* o, void* v) { inline void LFOPluginGUI::cb_NumPerd_i (Fl_Knob* o, void* v) { - m_Plugin->SetFreq (1 / o->value()); - UpdateValues(); + m_GUICH->Set("Freq",(float)(1.0f / o->value())); } void LFOPluginGUI::cb_NumPerd (Fl_Knob* o, void* v) { ((LFOPluginGUI*)(o->parent()))->cb_NumPerd_i (o, v); @@ -235,8 +233,7 @@ void LFOPluginGUI::cb_NumPerd (Fl_Knob* o, void* v) { inline void LFOPluginGUI::cb_NumFreq_i (Fl_Knob* o, void* v) { - m_Plugin->SetFreq (o->value()); - UpdateValues(); + m_GUICH->Set("Freq",(float)(o->value())); } void LFOPluginGUI::cb_NumFreq (Fl_Knob* o, void* v) { @@ -246,7 +243,7 @@ void LFOPluginGUI::cb_NumFreq (Fl_Knob* o, void* v) { // Callbacks for waveform buttons inline void LFOPluginGUI::cb_Sine_i (Fl_Check_Button* o, void* v) { - m_Plugin->SetType (LFOPlugin::SINE); + m_GUICH->Set("Type",(char)(LFOPlugin::SINE)); } void LFOPluginGUI::cb_Sine(Fl_Check_Button* o, void* v) { ((LFOPluginGUI*)(o->parent()))->cb_Sine_i (o, v); @@ -254,7 +251,7 @@ void LFOPluginGUI::cb_Sine(Fl_Check_Button* o, void* v) { inline void LFOPluginGUI::cb_Tri_i (Fl_Check_Button* o, void* v) { - m_Plugin->SetType (LFOPlugin::TRIANGLE); + m_GUICH->Set("Type",(char)(LFOPlugin::TRIANGLE)); } void LFOPluginGUI::cb_Tri (Fl_Check_Button* o, void* v) { ((LFOPluginGUI*)(o->parent()))->cb_Tri_i (o, v); @@ -262,7 +259,7 @@ void LFOPluginGUI::cb_Tri (Fl_Check_Button* o, void* v) { inline void LFOPluginGUI::cb_Square_i (Fl_Check_Button* o, void* v) { - m_Plugin->SetType (LFOPlugin::SQUARE); + m_GUICH->Set("Type",(char)(LFOPlugin::SQUARE)); } void LFOPluginGUI::cb_Square (Fl_Check_Button* o, void* v) { ((LFOPluginGUI*)(o->parent()))->cb_Square_i (o, v); @@ -270,7 +267,7 @@ void LFOPluginGUI::cb_Square (Fl_Check_Button* o, void* v) { inline void LFOPluginGUI::cb_Saw_i (Fl_Check_Button* o, void* v) { - m_Plugin->SetType (LFOPlugin::SAW); + m_GUICH->Set("Type",(LFOPlugin::SAW)); } void LFOPluginGUI::cb_Saw (Fl_Check_Button* o, void* v) { ((LFOPluginGUI*)(o->parent()))->cb_Saw_i (o, v); diff --git a/SpiralSound/Plugins/LFOPlugin/LFOPluginGUI.h b/SpiralSound/Plugins/LFOPlugin/LFOPluginGUI.h index f0bd36a..09c89c3 100644 --- a/SpiralSound/Plugins/LFOPlugin/LFOPluginGUI.h +++ b/SpiralSound/Plugins/LFOPlugin/LFOPluginGUI.h @@ -28,11 +28,10 @@ class LFOPluginGUI : public SpiralPluginGUI { public: - LFOPluginGUI(int w, int h, LFOPlugin *o,const HostInfo *Info); - virtual void UpdateValues(); - virtual SpiralPlugin* GetPlugin() { return m_Plugin; } - LFOPlugin *m_Plugin; - private: + LFOPluginGUI(int w, int h, LFOPlugin *o,ChannelHandler *ch,const HostInfo *Info); + virtual void UpdateValues(SpiralPlugin *o); + + private: Fl_Check_Button* ShapeSine; Fl_Pixmap pixmap_Sine; Fl_Check_Button* ShapeTri; diff --git a/SpiralSound/Plugins/LFOPlugin/Makefile b/SpiralSound/Plugins/LFOPlugin/Makefile index 0bb3b8b..1f33560 100644 --- a/SpiralSound/Plugins/LFOPlugin/Makefile +++ b/SpiralSound/Plugins/LFOPlugin/Makefile @@ -10,8 +10,8 @@ CC = gcc CXX = g++ -CFLAGS = -pipe -Wall -O3 -ffast-math -DNO_DEBUG -Wno-unused -CXXFLAGS= -pipe -Wall -O3 -ffast-math -DNO_DEBUG -Wno-unused +CFLAGS = -pipe -Wall -O3 -ffast-math -DNO_DEBUG -Wno-unused -fPIC +CXXFLAGS= -pipe -Wall -O3 -ffast-math -DNO_DEBUG -Wno-unused -fPIC -fPIC INCPATH = -I/usr/X11R6/include LINK = g++ -shared LFLAGS = @@ -44,6 +44,7 @@ mandir = ${prefix}/man HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -51,6 +52,7 @@ HEADERS = ../SpiralPlugin.h \ LFOPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -58,6 +60,7 @@ SOURCES = ../SpiralPlugin.C \ LFOPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -165,3 +168,5 @@ LFOPluginGUI.o: LFOPluginGUI.C \ ../../SpiralInfo.h \ ../../Sample.h +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/LFOPlugin/Makefile.in b/SpiralSound/Plugins/LFOPlugin/Makefile.in index 542db95..32891c8 100644 --- a/SpiralSound/Plugins/LFOPlugin/Makefile.in +++ b/SpiralSound/Plugins/LFOPlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \ LFOPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \ LFOPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -164,3 +167,5 @@ LFOPluginGUI.o: LFOPluginGUI.C \ ../../SpiralInfo.h \ ../../Sample.h +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/MatrixPlugin/Makefile.in b/SpiralSound/Plugins/MatrixPlugin/Makefile.in index 8ef6738..327b4e2 100644 --- a/SpiralSound/Plugins/MatrixPlugin/Makefile.in +++ b/SpiralSound/Plugins/MatrixPlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../Widgets/Fl_LED_Button.H \ @@ -51,6 +52,7 @@ HEADERS = ../SpiralPlugin.h \ MatrixPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../Widgets/Fl_LED_Button.cxx \ @@ -59,6 +61,7 @@ SOURCES = ../SpiralPlugin.C \ MatrixPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../Widgets/Fl_LED_Button.o \ @@ -174,3 +177,5 @@ MatrixPluginGUI.o: MatrixPluginGUI.C \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_LED_Button.H +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.C b/SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.C index d65d06a..574572e 100644 --- a/SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.C +++ b/SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.C @@ -101,6 +101,18 @@ m_CopyPattern(0) m_TriggerLevel[n]=0; } + + m_AudioCH->Register("NoteCut",&m_NoteCut,ChannelHandler::INPUT); + m_AudioCH->Register("Current",&m_Current,ChannelHandler::INPUT); + m_AudioCH->Register("StepTime",&m_StepTime,ChannelHandler::INPUT); + m_AudioCH->Register("Num",&m_GUIArgs.Num,ChannelHandler::INPUT); + m_AudioCH->Register("Length",&m_GUIArgs.Length,ChannelHandler::INPUT); + m_AudioCH->Register("Speed",&m_GUIArgs.Speed,ChannelHandler::INPUT); + m_AudioCH->Register("X",&m_GUIArgs.X,ChannelHandler::INPUT); + m_AudioCH->Register("Y",&m_GUIArgs.Y,ChannelHandler::INPUT); + m_AudioCH->Register("Octave",&m_GUIArgs.Octave,ChannelHandler::INPUT); + m_AudioCH->Register("Step",&m_Step,ChannelHandler::OUTPUT); + m_AudioCH->RegisterData("Matrix",ChannelHandler::OUTPUT_REQUEST,&m_Matrix,sizeof(m_Matrix)); } MatrixPlugin::~MatrixPlugin() @@ -116,11 +128,9 @@ PluginInfo &MatrixPlugin::Initialise(const HostInfo *Host) SpiralGUIType *MatrixPlugin::CreateGUI() { - m_GUI = new MatrixPluginGUI(m_PluginInfo.Width, + return new MatrixPluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, - this,m_HostInfo); - m_GUI->hide(); - return m_GUI; + this,m_AudioCH,m_HostInfo); } void MatrixPlugin::Execute() @@ -157,7 +167,7 @@ void MatrixPlugin::Execute() // make it so the next note to trigger // will be the first one - if (m_GUI) ((MatrixPluginGUI*)m_GUI)->UpdateValues(); + //if (m_GUI) ((MatrixPluginGUI*)m_GUI)->UpdateValues(); m_Time=m_StepTime*(1/m_Matrix[m_Current].Speed); m_Step=-1; @@ -206,7 +216,7 @@ void MatrixPlugin::Execute() if (m_Step >= m_Matrix[m_Current].Length) m_Step=0; - if (m_GUI) ((MatrixPluginGUI*)m_GUI)->SetLED(m_Step); + //if (m_GUI) ((MatrixPluginGUI*)m_GUI)->SetLED(m_Step); // Reset the values m_CurrentTriggerCV=0; @@ -236,10 +246,52 @@ void MatrixPlugin::Execute() } } } -void MatrixPlugin::PastePattern() { -cerr<IsCommandWaiting()) + { + switch (m_AudioCH->GetCommand()) + { + case MAT_LENGTH : + cerr<type(1); @@ -142,25 +141,39 @@ SpiralPluginGUI(w,h,o) end(); } -void MatrixPluginGUI::UpdateValues() +void MatrixPluginGUI::draw() +{ + SpiralPluginGUI::draw(); + + for(int x=0; xvalue(0); + } + + m_Flash[m_GUICH->GetInt("Step")]->value(1); +} + +void MatrixPluginGUI::UpdateValues(SpiralPlugin *o) { - m_Pattern->value(m_Plugin->GetCurrent()); - m_Length->value(m_Plugin->GetPattern()->Length); - m_Speed->value(m_Plugin->GetPattern()->Speed); + MatrixPlugin *Plugin = (MatrixPlugin*)o; + + m_Pattern->value(Plugin->GetCurrent()); + m_Length->value(Plugin->GetPattern()->Length); + m_Speed->value(Plugin->GetPattern()->Speed); m_SpeedVal->value((int)m_Speed->value()); - m_Octave->value(m_Plugin->GetPattern()->Octave); + m_Octave->value(Plugin->GetPattern()->Octave); for(int x=0; xvalue(m_Plugin->GetPattern()->Matrix[x][y]); + m_Matrix[x][y]->value(Plugin->GetPattern()->Matrix[x][y]); } - if (m_Plugin->CanTransposeUp()) m_TransUpBtn->activate(); else m_TransUpBtn->deactivate(); - if (m_Plugin->CanTransposeDown()) m_TransDnBtn->activate(); else m_TransDnBtn->deactivate(); + //if (Plugin->CanTransposeUp()) m_TransUpBtn->activate(); else m_TransUpBtn->deactivate(); + //if (Plugin->CanTransposeDown()) m_TransDnBtn->activate(); else m_TransDnBtn->deactivate(); } -void MatrixPluginGUI::SetLED(int n) +/*void MatrixPluginGUI::SetLED(int n) { for (int i=0; ivalue(true); -} +}*/ +void MatrixPluginGUI::UpdateMatrix() +{ + m_GUICH->RequestChannelAndWait("Matrix"); + m_GUICH->GetData("Matrix",(void*)m_GUIMatrix); + for(int x=0; xvalue(m_GUIMatrix[(int)m_Pattern->value()].Matrix[x][y]); + } + +} + inline void MatrixPluginGUI::cb_NoteCut_i(Fl_Button* o, void* v) { - m_Plugin->SetNoteCut(o->value()); + m_GUICH->Set("NoteCut",o->value()); } void MatrixPluginGUI::cb_NoteCut(Fl_Button* o, void* v) { ((MatrixPluginGUI*)(o->parent()))->cb_NoteCut_i(o,v);} inline void MatrixPluginGUI::cb_Matrix_i(Fl_Button* o, void* v) { - m_Plugin->GetPattern()->Matrix[*(int*)v/MATY][*(int*)v%MATY]=o->value(); - UpdateValues(); + m_GUICH->Set("X",*(int*)v/MATY); + m_GUICH->Set("Y",*(int*)v%MATY); + + if (o->value()) m_GUICH->SetCommand(MatrixPlugin::MAT_ACTIVATE); + else m_GUICH->SetCommand(MatrixPlugin::MAT_DEACTIVATE); } void MatrixPluginGUI::cb_Matrix(Fl_Button* o, void* v) { ((MatrixPluginGUI*)(o->parent()))->cb_Matrix_i(o,v);} @@ -190,8 +218,8 @@ inline void MatrixPluginGUI::cb_Pattern_i(Fl_Counter* o, void* v) { if (o->value()<0) o->value(0); if (o->value()>NUM_PATTERNS-1) o->value(NUM_PATTERNS-1); - m_Plugin->SetCurrent((int)o->value()); - UpdateValues(); + m_GUICH->Set("Current",(int)o->value()); + UpdateMatrix(); } void MatrixPluginGUI::cb_Pattern(Fl_Counter* o, void* v) { ((MatrixPluginGUI*)(o->parent()))->cb_Pattern_i(o,v);} @@ -200,7 +228,13 @@ inline void MatrixPluginGUI::cb_Length_i(Fl_Counter* o, void* v) { if (o->value()<1) o->value(1); if (o->value()>64) o->value(64); - m_Plugin->GetPattern()->Length=(int)o->value(); + //m_GUICH->GetPattern()->Length=(int)o->value(); + + cerr<<(int)o->value()<Set("Length",(int)o->value()); + m_GUICH->SetCommand(MatrixPlugin::MAT_LENGTH); + } void MatrixPluginGUI::cb_Length(Fl_Counter* o, void* v) { ((MatrixPluginGUI*)(o->parent()))->cb_Length_i(o,v);} @@ -209,8 +243,10 @@ inline void MatrixPluginGUI::cb_Speed_i(Fl_Knob* o, void* v) { // Round off value, but it should be a float for tweaking float value=o->value()+((int)o->value()-o->value()); - m_Plugin->GetPattern()->Speed=o->value(); m_SpeedVal->value(value); + + m_GUICH->Set("Speed",(float)value); + m_GUICH->SetCommand(MatrixPlugin::MAT_SPEED); } void MatrixPluginGUI::cb_Speed(Fl_Knob* o, void* v) { ((MatrixPluginGUI*)(o->parent()))->cb_Speed_i(o,v);} @@ -218,16 +254,17 @@ void MatrixPluginGUI::cb_Speed(Fl_Knob* o, void* v) inline void MatrixPluginGUI::cb_Octave_i(Fl_Counter* o, void* v) { if (o->value()<0) o->value(0); - if (o->value()>6) o->value(6); - m_Plugin->GetPattern()->Octave=(int)o->value(); + if (o->value()>6) o->value(6); + + m_GUICH->Set("Octave",(int)o->value()); + m_GUICH->SetCommand(MatrixPlugin::MAT_OCTAVE); } void MatrixPluginGUI::cb_Octave(Fl_Counter* o, void* v) { ((MatrixPluginGUI*)(o->parent()))->cb_Octave_i(o,v);} inline void MatrixPluginGUI::cb_SpeedVal_i (Fl_Counter* o, void* v) { - m_Speed->value (o->value()); - m_Plugin->GetPattern()->Speed = (float)o->value() * 0.1; + m_Speed->value(o->value()); } void MatrixPluginGUI::cb_SpeedVal (Fl_Counter* o, void* v) @@ -238,7 +275,7 @@ void MatrixPluginGUI::cb_SpeedVal (Fl_Counter* o, void* v) inline void MatrixPluginGUI::cb_CopyBtn_i (Fl_Button* o, void* v) { m_PasteBtn->activate(); - m_Plugin->CopyPattern(); + m_GUICH->SetCommand(MatrixPlugin::COPY); } void MatrixPluginGUI::cb_CopyBtn (Fl_Button* o, void* v) @@ -248,8 +285,8 @@ void MatrixPluginGUI::cb_CopyBtn (Fl_Button* o, void* v) inline void MatrixPluginGUI::cb_PasteBtn_i (Fl_Button* o, void* v) { - m_Plugin->PastePattern(); - UpdateValues(); + m_GUICH->SetCommand(MatrixPlugin::PASTE); + UpdateMatrix(); } void MatrixPluginGUI::cb_PasteBtn (Fl_Button* o, void* v) @@ -259,8 +296,8 @@ void MatrixPluginGUI::cb_PasteBtn (Fl_Button* o, void* v) inline void MatrixPluginGUI::cb_ClearBtn_i (Fl_Button* o, void* v) { - m_Plugin->ClearPattern(); - UpdateValues(); + m_GUICH->SetCommand(MatrixPlugin::CLEAR); + UpdateMatrix(); } void MatrixPluginGUI::cb_ClearBtn (Fl_Button* o, void* v) @@ -270,8 +307,8 @@ void MatrixPluginGUI::cb_ClearBtn (Fl_Button* o, void* v) inline void MatrixPluginGUI::cb_TransUpBtn_i (Fl_Button* o, void* v) { - m_Plugin->TransposeUp(); - UpdateValues(); + m_GUICH->SetCommand(MatrixPlugin::TUP); + UpdateMatrix(); } void MatrixPluginGUI::cb_TransUpBtn (Fl_Button* o, void* v) @@ -281,8 +318,8 @@ void MatrixPluginGUI::cb_TransUpBtn (Fl_Button* o, void* v) inline void MatrixPluginGUI::cb_TransDnBtn_i (Fl_Button* o, void* v) { - m_Plugin->TransposeDown(); - UpdateValues(); + m_GUICH->SetCommand(MatrixPlugin::TDOWN); + UpdateMatrix(); } void MatrixPluginGUI::cb_TransDnBtn (Fl_Button* o, void* v) diff --git a/SpiralSound/Plugins/MatrixPlugin/MatrixPluginGUI.h b/SpiralSound/Plugins/MatrixPlugin/MatrixPluginGUI.h index 8774553..5585a38 100644 --- a/SpiralSound/Plugins/MatrixPlugin/MatrixPluginGUI.h +++ b/SpiralSound/Plugins/MatrixPlugin/MatrixPluginGUI.h @@ -33,21 +33,19 @@ #ifndef MatrixGUI #define MatrixGUI - class MatrixPluginGUI : public SpiralPluginGUI { public: - MatrixPluginGUI(int w, int h, MatrixPlugin *o,const HostInfo *Info); - - virtual void UpdateValues(); - virtual SpiralPlugin* GetPlugin() { return m_Plugin; } + MatrixPluginGUI(int w, int h, MatrixPlugin *o,ChannelHandler *ch,const HostInfo *Info); + virtual void draw(); + virtual void UpdateValues(SpiralPlugin *o); - void SetLED(int n); - - MatrixPlugin *m_Plugin; private: + void UpdateMatrix(); + int Numbers[MATX*MATY]; + Pattern m_GUIMatrix[NUM_PATTERNS]; Fl_Button* m_NoteCut; Fl_Counter* m_Pattern; diff --git a/SpiralSound/Plugins/MeterPlugin/Makefile b/SpiralSound/Plugins/MeterPlugin/Makefile index 0f899c9..1e458ca 100644 --- a/SpiralSound/Plugins/MeterPlugin/Makefile +++ b/SpiralSound/Plugins/MeterPlugin/Makefile @@ -7,8 +7,8 @@ CC = gcc CXX = g++ -CFLAGS = -pipe -Wall -O3 -ffast-math -DNO_DEBUG -Wno-unused -CXXFLAGS= -pipe -Wall -O3 -ffast-math -DNO_DEBUG -Wno-unused +CFLAGS = -pipe -Wall -O3 -ffast-math -DNO_DEBUG -Wno-unused -fPIC +CXXFLAGS= -pipe -Wall -O3 -ffast-math -DNO_DEBUG -Wno-unused -fPIC -fPIC INCPATH = -I/usr/X11R6/include LINK = g++ -shared LFLAGS = diff --git a/SpiralSound/Plugins/MidiPlugin/Makefile.in b/SpiralSound/Plugins/MidiPlugin/Makefile.in index 6c7e590..0959752 100644 --- a/SpiralSound/Plugins/MidiPlugin/Makefile.in +++ b/SpiralSound/Plugins/MidiPlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -51,6 +52,7 @@ HEADERS = ../SpiralPlugin.h \ MidiPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -59,6 +61,7 @@ SOURCES = ../SpiralPlugin.C \ MidiPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -175,3 +178,5 @@ MidiPluginGUI.o: MidiPluginGUI.C \ ../SpiralPluginGUI.h \ ../Widgets/Fl_DragBar.H +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/MidiPlugin/MidiPlugin.C b/SpiralSound/Plugins/MidiPlugin/MidiPlugin.C index 26470d0..7492402 100644 --- a/SpiralSound/Plugins/MidiPlugin/MidiPlugin.C +++ b/SpiralSound/Plugins/MidiPlugin/MidiPlugin.C @@ -73,6 +73,12 @@ m_CurrentNote(0) m_PluginInfo.PortTips.push_back("Aftertouch CV"); for (int n=0; n<128; n++) m_ControlLevel[n]=0; + + m_AudioCH->Register("DeviceNum",&m_DeviceNum); + m_AudioCH->Register("NoteCut",&m_NoteCut); + m_AudioCH->Register("CC",&m_GUIArgs.s); + m_AudioCH->RegisterData("Name",ChannelHandler::INPUT, + &m_GUIArgs.Name,sizeof(m_GUIArgs.Name)); } MidiPlugin::~MidiPlugin() @@ -91,16 +97,14 @@ PluginInfo &MidiPlugin::Initialise(const HostInfo *Host) SpiralGUIType *MidiPlugin::CreateGUI() { - m_GUI = new MidiPluginGUI(m_PluginInfo.Width, + return new MidiPluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, - this,m_HostInfo); -// m_GUI->show(); - m_GUI->hide(); - return m_GUI; + this,m_AudioCH,m_HostInfo); } void MidiPlugin::Execute() { + // Done to clear IsEmpty field... GetOutputBuf(0)->Zero(); GetOutputBuf(1)->Zero(); @@ -229,6 +233,19 @@ void MidiPlugin::Execute() if (Triggered && !m_ContinuousNotes) SetOutput(1,0,0); } +void MidiPlugin::ExecuteCommands() +{ + // Process any commands from the GUI + if (m_AudioCH->IsCommandWaiting()) + { + switch (m_AudioCH->GetCommand()) + { + case (ADDCONTROL) : AddControl(m_GUIArgs.s,m_GUIArgs.Name); break; + case (DELCONTROL) : DeleteControl(); + }; + } +} + void MidiPlugin::AddControl(int s, const string &Name) { m_ControlList.push_back(s); diff --git a/SpiralSound/Plugins/MidiPlugin/MidiPlugin.h b/SpiralSound/Plugins/MidiPlugin/MidiPlugin.h index 2cab207..79e33ee 100644 --- a/SpiralSound/Plugins/MidiPlugin/MidiPlugin.h +++ b/SpiralSound/Plugins/MidiPlugin/MidiPlugin.h @@ -31,22 +31,29 @@ public: virtual PluginInfo& Initialise(const HostInfo *Host); virtual SpiralGUIType* CreateGUI(); virtual void Execute(); + virtual void ExecuteCommands(); virtual void StreamOut(ostream &s); virtual void StreamIn(istream &s); // has to be defined in the plugin virtual void UpdateGUI() { Fl::check(); } - void SetDeviceNum(int s) { m_DeviceNum=s; } int GetDeviceNum() { return m_DeviceNum; } - void SetNoteCut(bool s) { m_NoteCut=s; } bool GetNoteCut() { return m_NoteCut; } - void SetContinuousNotes(bool s) { m_ContinuousNotes=s; } bool GetContinuousNotes() { return m_ContinuousNotes; } - void AddControl(int s,const string &Name); - void DeleteControl(); + enum GUICommands{NONE,ADDCONTROL,DELCONTROL}; + struct GUIArgs + { + int s; + char Name[256]; + }; + private: + GUIArgs m_GUIArgs; + + void AddControl(int s,const string &Name); + void DeleteControl(); int m_DeviceNum; diff --git a/SpiralSound/Plugins/MidiPlugin/MidiPluginGUI.C b/SpiralSound/Plugins/MidiPlugin/MidiPluginGUI.C index 6db805a..c4c27ac 100644 --- a/SpiralSound/Plugins/MidiPlugin/MidiPluginGUI.C +++ b/SpiralSound/Plugins/MidiPlugin/MidiPluginGUI.C @@ -74,11 +74,9 @@ int OptionsList(const vector &List) //////////////////////////////////////////////////////////////////////// -MidiPluginGUI::MidiPluginGUI(int w, int h,MidiPlugin *o,const HostInfo *Info) : -SpiralPluginGUI(w,h,o) +MidiPluginGUI::MidiPluginGUI(int w, int h,MidiPlugin *o,ChannelHandler *ch,const HostInfo *Info) : +SpiralPluginGUI(w,h,o,ch) { - m_Plugin=o; - m_DeviceNum = new Fl_Counter(20,30,40,20,"Channel"); m_DeviceNum->type(FL_SIMPLE_COUNTER); m_DeviceNum->step(1); @@ -103,24 +101,25 @@ SpiralPluginGUI(w,h,o) m_RemoveControl->callback((Fl_Callback*)cb_RemoveControl, NULL); } -void MidiPluginGUI::UpdateValues() +void MidiPluginGUI::UpdateValues(SpiralPlugin *o) { - m_DeviceNum->value(m_Plugin->GetDeviceNum()); + MidiPlugin *Plugin = (MidiPlugin*)o; + m_DeviceNum->value(Plugin->GetDeviceNum()); } //// Callbacks //// inline void MidiPluginGUI::cb_DeviceNum_i(Fl_Counter* o, void* v) -{ m_Plugin->SetDeviceNum((int)o->value()); } +{ m_GUICH->Set("DeviceNum",(int)o->value()); } void MidiPluginGUI::cb_DeviceNum(Fl_Counter* o, void* v) { ((MidiPluginGUI*)(o->parent()))->cb_DeviceNum_i(o,v);} inline void MidiPluginGUI::cb_NoteCut_i(Fl_Button* o, void* v) -{ m_Plugin->SetNoteCut(o->value()); } +{ m_GUICH->Set("NoteCut",o->value()); } void MidiPluginGUI::cb_NoteCut(Fl_Button* o, void* v) { ((MidiPluginGUI*)(o->parent()))->cb_NoteCut_i(o,v);} inline void MidiPluginGUI::cb_ContinuousNotes_i(Fl_Button* o, void* v) -{ m_Plugin->SetContinuousNotes(o->value()); } +{ m_GUICH->Set("ContinuousNotes",o->value()); } void MidiPluginGUI::cb_ContinuousNotes(Fl_Button* o, void* v) { ((MidiPluginGUI*)(o->parent()))->cb_ContinuousNotes_i(o,v);} @@ -258,12 +257,23 @@ inline void MidiPluginGUI::cb_AddControl_i(Fl_Button* o, void* v) List.push_back("127 Poly Operation"); int c=OptionsList(List)-1; - if (c>-1) m_Plugin->AddControl(c,List[c]); + if (c>-1) + { + m_GUICH->Set("CC",c); + char Temp[256]; + sprintf(Temp,"%s",List[c].c_str()); + m_GUICH->SetData("Name",Temp); + m_GUICH->SetCommand(MidiPlugin::ADDCONTROL); + + //m_Plugin->AddControl(c,List[c]); + } } void MidiPluginGUI::cb_AddControl(Fl_Button* o, void* v) { ((MidiPluginGUI*)(o->parent()))->cb_AddControl_i(o,v);} inline void MidiPluginGUI::cb_RemoveControl_i(Fl_Button* o, void* v) -{ m_Plugin->DeleteControl(); } +{ + m_GUICH->SetCommand(MidiPlugin::DELCONTROL); +} void MidiPluginGUI::cb_RemoveControl(Fl_Button* o, void* v) { ((MidiPluginGUI*)(o->parent()))->cb_RemoveControl_i(o,v);} diff --git a/SpiralSound/Plugins/MidiPlugin/MidiPluginGUI.h b/SpiralSound/Plugins/MidiPlugin/MidiPluginGUI.h index c2063fc..7732ee2 100644 --- a/SpiralSound/Plugins/MidiPlugin/MidiPluginGUI.h +++ b/SpiralSound/Plugins/MidiPlugin/MidiPluginGUI.h @@ -36,12 +36,9 @@ int OptionsList(const vector &List); class MidiPluginGUI : public SpiralPluginGUI { public: - MidiPluginGUI(int w, int h, MidiPlugin *o,const HostInfo *Info); + MidiPluginGUI(int w, int h, MidiPlugin *o,ChannelHandler *ch,const HostInfo *Info); - virtual void UpdateValues(); - virtual SpiralPlugin* GetPlugin() { return m_Plugin; } - - MidiPlugin *m_Plugin; + virtual void UpdateValues(SpiralPlugin *o); private: diff --git a/SpiralSound/Plugins/MixerPlugin/Makefile.in b/SpiralSound/Plugins/MixerPlugin/Makefile.in index 0fd661b..00ecaab 100644 --- a/SpiralSound/Plugins/MixerPlugin/Makefile.in +++ b/SpiralSound/Plugins/MixerPlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \ MixerPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \ MixerPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -162,3 +165,5 @@ MixerPluginGUI.o: MixerPluginGUI.C \ ../SpiralPluginGUI.h \ ../Widgets/Fl_DragBar.H +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/MixerPlugin/MixerPlugin.C b/SpiralSound/Plugins/MixerPlugin/MixerPlugin.C index 79c4da8..0b3c495 100644 --- a/SpiralSound/Plugins/MixerPlugin/MixerPlugin.C +++ b/SpiralSound/Plugins/MixerPlugin/MixerPlugin.C @@ -56,6 +56,9 @@ MixerPlugin::MixerPlugin() { m_ChannelVal[n]=1.0f; } + + m_AudioCH->Register("Value",&m_GUIArgs.Value); + m_AudioCH->Register("Num",&m_GUIArgs.Num); } MixerPlugin::~MixerPlugin() @@ -69,11 +72,9 @@ PluginInfo &MixerPlugin::Initialise(const HostInfo *Host) SpiralGUIType *MixerPlugin::CreateGUI() { - m_GUI = new MixerPluginGUI(m_PluginInfo.Width, + return new MixerPluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, - this,m_HostInfo); - m_GUI->hide(); - return m_GUI; + this,m_AudioCH,m_HostInfo); } void MixerPlugin::Execute() @@ -88,6 +89,17 @@ void MixerPlugin::Execute() } } +void MixerPlugin::ExecuteCommands() +{ + if (m_AudioCH->IsCommandWaiting()) + { + switch (m_AudioCH->GetCommand()) + { + case (SETCH) : SetChannel(m_GUIArgs.Num,m_GUIArgs.Value); break; + } + } +} + void MixerPlugin::StreamOut(ostream &s) { s<value(2.0f-m_Plugin->GetChannel(n)); + m_Chan[n]->value(2.0f-Plugin->GetChannel(n)); } } inline void MixerPluginGUI::cb_Chan_i(Fl_Slider* o, void* v) -{ m_Plugin->SetChannel(*(int*)(v),2.0f-o->value()); } +{ + m_GUICH->Set("Num",(*(int*)(v))); + m_GUICH->Set("Value",(float)(2.0f-o->value())); + m_GUICH->SetCommand(MixerPlugin::SETCH); +} + void MixerPluginGUI::cb_Chan(Fl_Slider* o, void* v) { ((MixerPluginGUI*)(o->parent()))->cb_Chan_i(o,v);} diff --git a/SpiralSound/Plugins/MixerPlugin/MixerPluginGUI.h b/SpiralSound/Plugins/MixerPlugin/MixerPluginGUI.h index 365563b..61957fb 100644 --- a/SpiralSound/Plugins/MixerPlugin/MixerPluginGUI.h +++ b/SpiralSound/Plugins/MixerPlugin/MixerPluginGUI.h @@ -31,12 +31,10 @@ class MixerPluginGUI : public SpiralPluginGUI { public: - MixerPluginGUI(int w, int h, MixerPlugin *o,const HostInfo *Info); + MixerPluginGUI(int w, int h, MixerPlugin *o,ChannelHandler *ch,const HostInfo *Info); - virtual void UpdateValues(); - virtual SpiralPlugin* GetPlugin() { return m_Plugin; } - - MixerPlugin *m_Plugin; + virtual void UpdateValues(SpiralPlugin *o); + private: int Numbers[NUM_CHANNELS]; diff --git a/SpiralSound/Plugins/MoogFilterPlugin/Makefile.in b/SpiralSound/Plugins/MoogFilterPlugin/Makefile.in index e4932ab..507e895 100644 --- a/SpiralSound/Plugins/MoogFilterPlugin/Makefile.in +++ b/SpiralSound/Plugins/MoogFilterPlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \ MoogFilterPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \ MoogFilterPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -164,3 +167,6 @@ MoogFilterPluginGUI.o: MoogFilterPluginGUI.C \ ../Widgets/Fl_DragBar.H \ ../Widgets/Fl_Knob.H +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h + diff --git a/SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPlugin.C b/SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPlugin.C index 996f204..0cbafb6 100644 --- a/SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPlugin.C +++ b/SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPlugin.C @@ -71,6 +71,9 @@ t2(0.0f) m_PluginInfo.PortTips.push_back("LowPass output"); m_PluginInfo.PortTips.push_back("BandPass output"); m_PluginInfo.PortTips.push_back("HighPass output"); + + m_AudioCH->Register("Cutoff",&Cutoff); + m_AudioCH->Register("Resonance",&Resonance); } MoogFilterPlugin::~MoogFilterPlugin() @@ -86,11 +89,9 @@ PluginInfo &MoogFilterPlugin::Initialise(const HostInfo *Host) SpiralGUIType *MoogFilterPlugin::CreateGUI() { - m_GUI = new MoogFilterPluginGUI(m_PluginInfo.Width, + return new MoogFilterPluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, - this,m_HostInfo); - m_GUI->hide(); - return m_GUI; + this,m_AudioCH,m_HostInfo); } void MoogFilterPlugin::Execute() diff --git a/SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPlugin.h b/SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPlugin.h index 54ff9ee..ef48524 100644 --- a/SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPlugin.h +++ b/SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPlugin.h @@ -34,11 +34,6 @@ public: virtual void StreamOut(ostream &s); virtual void StreamIn(istream &s); - // has to be defined in the plugin - virtual void UpdateGUI() { Fl::check(); } - - void SetCutoff(float s) { Cutoff=s; } - void SetResonance(float s) { Resonance=s; } float GetCutoff() { return Cutoff; } float GetResonance() { return Resonance; } diff --git a/SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPluginGUI.C b/SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPluginGUI.C index fe30d80..dfb2f76 100644 --- a/SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPluginGUI.C +++ b/SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPluginGUI.C @@ -26,11 +26,9 @@ static const int GUIBG2_COLOUR = 145; //////////////////////////////////////////// -MoogFilterPluginGUI::MoogFilterPluginGUI(int w, int h,MoogFilterPlugin *o,const HostInfo *Info) : -SpiralPluginGUI(w,h,o) +MoogFilterPluginGUI::MoogFilterPluginGUI(int w, int h,MoogFilterPlugin *o,ChannelHandler *ch,const HostInfo *Info) : +SpiralPluginGUI(w,h,o,ch) { - m_Plugin=o; - Cutoff = new Fl_Slider(15, 20, 20, 70, "Cutoff"); Cutoff->type(4); Cutoff->selection_color(GUI_COLOUR); @@ -52,22 +50,24 @@ SpiralPluginGUI(w,h,o) end(); } -void MoogFilterPluginGUI::UpdateValues() +void MoogFilterPluginGUI::UpdateValues(SpiralPlugin *o) { - Cutoff->value(1.0f-m_Plugin->GetCutoff()); - Resonance->value(m_Plugin->GetResonance()); + MoogFilterPlugin *Plugin = (MoogFilterPlugin*)o; + + Cutoff->value(1.0f-Plugin->GetCutoff()); + Resonance->value(Plugin->GetResonance()); } inline void MoogFilterPluginGUI::cb_Cutoff_i(Fl_Slider* o, void* v) { float value=1.0f-o->value(); // m_Plugin->SetCutoff((value*value)+10.0f); - m_Plugin->SetCutoff(value); + m_GUICH->Set("Cutoff",value); } void MoogFilterPluginGUI::cb_Cutoff(Fl_Slider* o, void* v) { ((MoogFilterPluginGUI*)(o->parent()))->cb_Cutoff_i(o,v); } inline void MoogFilterPluginGUI::cb_Resonance_i(Fl_Knob* o, void* v) -{ m_Plugin->SetResonance(o->value()); } +{ m_GUICH->Set("Resonance",o->value()); } void MoogFilterPluginGUI::cb_Resonance(Fl_Knob* o, void* v) { ((MoogFilterPluginGUI*)(o->parent()))->cb_Resonance_i(o,v); } diff --git a/SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPluginGUI.h b/SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPluginGUI.h index 5a51a5f..2c41550 100644 --- a/SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPluginGUI.h +++ b/SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPluginGUI.h @@ -32,12 +32,9 @@ class MoogFilterPluginGUI : public SpiralPluginGUI { public: - MoogFilterPluginGUI(int w, int h, MoogFilterPlugin *o,const HostInfo *Info); + MoogFilterPluginGUI(int w, int h, MoogFilterPlugin *o,ChannelHandler *ch,const HostInfo *Info); - virtual void UpdateValues(); - virtual SpiralPlugin* GetPlugin() { return m_Plugin; } - - MoogFilterPlugin *m_Plugin; + virtual void UpdateValues(SpiralPlugin *o); private: diff --git a/SpiralSound/Plugins/NoteSnapPlugin/Makefile.in b/SpiralSound/Plugins/NoteSnapPlugin/Makefile.in index 9ad0250..85a47c7 100644 --- a/SpiralSound/Plugins/NoteSnapPlugin/Makefile.in +++ b/SpiralSound/Plugins/NoteSnapPlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \ NoteSnapPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \ NoteSnapPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -148,3 +151,5 @@ NoteSnapPlugin.o: NoteSnapPlugin.C \ NoteSnapPluginGUI.o: NoteSnapPluginGUI.C +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPlugin.C b/SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPlugin.C index 3fab738..79743d5 100644 --- a/SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPlugin.C +++ b/SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPlugin.C @@ -62,8 +62,7 @@ PluginInfo &NoteSnapPlugin::Initialise(const HostInfo *Host) SpiralGUIType *NoteSnapPlugin::CreateGUI() { - m_GUI=NULL; - return m_GUI; + return NULL; } void NoteSnapPlugin::Execute() diff --git a/SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPlugin.h b/SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPlugin.h index b2eb52c..c465e1b 100644 --- a/SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPlugin.h +++ b/SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPlugin.h @@ -33,9 +33,6 @@ public: virtual void Execute(); virtual void StreamOut(ostream &s) {} virtual void StreamIn(istream &s) {} - - // has to be defined in the plugin - virtual void UpdateGUI() { Fl::check(); } private: }; diff --git a/SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPluginGUI.C b/SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPluginGUI.C index 7ce1b6d..69448ed 100644 --- a/SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPluginGUI.C +++ b/SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPluginGUI.C @@ -26,16 +26,15 @@ static const int GUIBG2_COLOUR = 145; //////////////////////////////////////////// -NoteSnapPluginGUI::NoteSnapPluginGUI(int w, int h,NoteSnapPlugin *o,const HostInfo *Info) : -SpiralPluginGUI(w,h,o) +NoteSnapPluginGUI::NoteSnapPluginGUI(int w, int h,NoteSnapPlugin *o,ChannelHandler *ch,const HostInfo *Info) : +SpiralPluginGUI(w,h,o,ch) { - m_Plugin=o; end(); } -void NoteSnapPluginGUI::UpdateValues() +void NoteSnapPluginGUI::UpdateValues(SpiralPlugin *o) { } diff --git a/SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPluginGUI.h b/SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPluginGUI.h index e81717f..8ee4855 100644 --- a/SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPluginGUI.h +++ b/SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPluginGUI.h @@ -33,12 +33,10 @@ class NoteSnapPluginGUI : public SpiralPluginGUI { public: - NoteSnapPluginGUI(int w, int h, NoteSnapPlugin *o,const HostInfo *Info); + NoteSnapPluginGUI(int w, int h, NoteSnapPlugin *o,ChannelHandler *ch,const HostInfo *Info); - virtual void UpdateValues(); - virtual SpiralPlugin* GetPlugin() { return m_Plugin; } + virtual void UpdateValues(SpiralPlugin *o); - NoteSnapPlugin *m_Plugin; private: //// Callbacks //// diff --git a/SpiralSound/Plugins/OscillatorPlugin/Makefile.in b/SpiralSound/Plugins/OscillatorPlugin/Makefile.in index bef604c..08fd52d 100644 --- a/SpiralSound/Plugins/OscillatorPlugin/Makefile.in +++ b/SpiralSound/Plugins/OscillatorPlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \ OscillatorPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \ OscillatorPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -164,3 +167,5 @@ OscillatorPluginGUI.o: OscillatorPluginGUI.C \ ../../SpiralInfo.h \ ../../Sample.h +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/OscillatorPlugin/OscillatorPlugin.C b/SpiralSound/Plugins/OscillatorPlugin/OscillatorPlugin.C index 1d4e875..c45e6ee 100644 --- a/SpiralSound/Plugins/OscillatorPlugin/OscillatorPlugin.C +++ b/SpiralSound/Plugins/OscillatorPlugin/OscillatorPlugin.C @@ -71,6 +71,13 @@ m_SHModBuf(NULL) m_PluginInfo.PortTips.push_back("PulseWidth CV"); m_PluginInfo.PortTips.push_back("Sample & Hold length CV"); m_PluginInfo.PortTips.push_back("Output"); + + m_AudioCH->Register("Octave",&m_Octave); + m_AudioCH->Register("FineFreq",&m_FineFreq); + m_AudioCH->Register("PulseWidth",&m_PulseWidth); + m_AudioCH->Register("Type",(char*)&m_Type); + m_AudioCH->Register("SHLen",&m_SHLen); + m_AudioCH->Register("ModAmount",&m_ModAmount); } OscillatorPlugin::~OscillatorPlugin() @@ -84,11 +91,9 @@ PluginInfo &OscillatorPlugin::Initialise(const HostInfo *Host) SpiralGUIType *OscillatorPlugin::CreateGUI() { - m_GUI = new OscillatorPluginGUI(m_PluginInfo.Width, + return new OscillatorPluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, - this,m_HostInfo); - m_GUI->hide(); - return m_GUI; + this,m_AudioCH,m_HostInfo); } void OscillatorPlugin::Execute() diff --git a/SpiralSound/Plugins/OscillatorPlugin/OscillatorPlugin.h b/SpiralSound/Plugins/OscillatorPlugin/OscillatorPlugin.h index 1757dd8..8b66dd0 100644 --- a/SpiralSound/Plugins/OscillatorPlugin/OscillatorPlugin.h +++ b/SpiralSound/Plugins/OscillatorPlugin/OscillatorPlugin.h @@ -34,9 +34,6 @@ public: virtual void StreamOut(ostream &s); virtual void StreamIn(istream &s); - // has to be defined in the plugin - virtual void UpdateGUI() { Fl::check(); } - enum Type{NONE,SQUARE,SAW,NOISE}; void ModulateFreq(Sample *data) {m_FreqModBuf=data;} @@ -44,12 +41,6 @@ public: void ModulateSHLen(Sample *data) {m_SHModBuf=data;} void NoteTrigger(int V,int s,int v); - void SetOctave(int o) {m_Octave=o;} - void SetFineFreq(float s) {m_FineFreq=s;} - void SetPulseWidth(float p) {m_PulseWidth=p;} - void SetType(Type t) {m_Type=t;} - void SetSHLen(float s) {m_SHLen=s;} - void SetModAmount(float s) {m_ModAmount=s;} int GetOctave() {return m_Octave;} float GetFineFreq() {return m_FineFreq;} float GetPulseWidth() {return m_PulseWidth;} diff --git a/SpiralSound/Plugins/OscillatorPlugin/OscillatorPluginGUI.C b/SpiralSound/Plugins/OscillatorPlugin/OscillatorPluginGUI.C index 2b41ab0..102a7ff 100644 --- a/SpiralSound/Plugins/OscillatorPlugin/OscillatorPluginGUI.C +++ b/SpiralSound/Plugins/OscillatorPlugin/OscillatorPluginGUI.C @@ -100,14 +100,12 @@ static unsigned char *image_Saw[] = { (unsigned char*)" "}; -OscillatorPluginGUI::OscillatorPluginGUI(int w, int h,OscillatorPlugin *o,const HostInfo *Info) : -SpiralPluginGUI(w,h,o), +OscillatorPluginGUI::OscillatorPluginGUI(int w, int h,OscillatorPlugin *o,ChannelHandler *ch,const HostInfo *Info) : +SpiralPluginGUI(w,h,o,ch), pixmap_Square(image_Square), pixmap_Noise(image_Noise), pixmap_Saw(image_Saw) { - m_Plugin=o; - ShapeSquare = new Fl_Check_Button(5, 15, 55, 30); ShapeSquare->type(102); ShapeSquare->down_box(FL_DIAMOND_DOWN_BOX); @@ -224,13 +222,15 @@ pixmap_Saw(image_Saw) extern "C" int sprintf(char *,const char *,...); -void OscillatorPluginGUI::UpdateValues() +void OscillatorPluginGUI::UpdateValues(SpiralPlugin *o) { + OscillatorPlugin *Plugin = (OscillatorPlugin*)o; + ShapeSquare->value(0); ShapeNoise->value(0); ShapeSaw->value(0); - switch (m_Plugin->GetType()) + switch (Plugin->GetType()) { case OscillatorPlugin::SQUARE : ShapeSquare->value(1); break; case OscillatorPlugin::NOISE : ShapeNoise->value(1); break; @@ -238,25 +238,25 @@ void OscillatorPluginGUI::UpdateValues() case OscillatorPlugin::NONE : break; } - Freq->value(m_Plugin->GetOctave()+3); - ModAmount->value(m_Plugin->GetModAmount()); - FineTune->value(sqrt(m_Plugin->GetFineFreq())); - PulseWidth->value(m_Plugin->GetPulseWidth()); + Freq->value(Plugin->GetOctave()+3); + ModAmount->value(Plugin->GetModAmount()); + FineTune->value(sqrt(Plugin->GetFineFreq())); + PulseWidth->value(Plugin->GetPulseWidth()); - SHLen->value(0.2f-m_Plugin->GetSHLen()); + SHLen->value(0.2f-Plugin->GetSHLen()); char str[10]; - float fr = 110.0f * m_Plugin->GetFineFreq(); - int oc = m_Plugin->GetOctave(); + float fr = 110.0f * Plugin->GetFineFreq(); + int oc = Plugin->GetOctave(); if (oc > 0) fr *= 1 << oc; if (oc < 0) fr /= 1 << (-oc); sprintf(str,"%4.1f Hz", fr); m_out_freq->value(str); - sprintf(str,"%4.0f %%", 100*m_Plugin->GetPulseWidth()); + sprintf(str,"%4.0f %%", 100*Plugin->GetPulseWidth()); m_out_pulseW->value(str); - sprintf(str,"%4.0f %%", 100*m_Plugin->GetModAmount()); + sprintf(str,"%4.0f %%", 100*Plugin->GetModAmount()); m_out_mod->value(str); - sprintf(str,"%4.3f s", m_Plugin->GetSHLen()); + sprintf(str,"%4.3f s", Plugin->GetSHLen()); m_out_SHlen->value(str); } @@ -266,13 +266,13 @@ void OscillatorPluginGUI::UpdateValues() inline void OscillatorPluginGUI::cb_Freq_i(Fl_Knob* o, void* v) { char str[10]; - m_Plugin->SetOctave((int)o->value()-3); - float fr = 110.0f * m_Plugin->GetFineFreq(); - int oc = m_Plugin->GetOctave(); - if (oc > 0) fr *= 1 << oc; - if (oc < 0) fr /= 1 << (-oc); - sprintf(str,"%4.1f Hz", fr); - m_out_freq->value(str); + m_GUICH->Set("Octave",(int)o->value()-3); + //float fr = 110.0f * m_Plugin->GetFineFreq(); + //int oc = m_Plugin->GetOctave(); + //if (oc > 0) fr *= 1 << oc; + //if (oc < 0) fr /= 1 << (-oc); + //sprintf(str,"%4.1f Hz", fr); + //m_out_freq->value(str); } void OscillatorPluginGUI::cb_Freq(Fl_Knob* o, void* v) @@ -281,13 +281,13 @@ void OscillatorPluginGUI::cb_Freq(Fl_Knob* o, void* v) inline void OscillatorPluginGUI::cb_FineTune_i(Fl_Knob* o, void* v) { char str[10]; - m_Plugin->SetFineFreq(o->value()*o->value()); - float fr = 110.0f * m_Plugin->GetFineFreq(); - int oc = m_Plugin->GetOctave(); - if (oc > 0) fr *= 1 << oc; - if (oc < 0) fr /= 1 << (-oc); - sprintf(str,"%4.1f Hz", fr); - m_out_freq->value(str); + m_GUICH->Set("FineFreq",o->value()*o->value()); + //float fr = 110.0f * m_Plugin->GetFineFreq(); + //int oc = m_Plugin->GetOctave(); + //if (oc > 0) fr *= 1 << oc; + //if (oc < 0) fr /= 1 << (-oc); + //sprintf(str,"%4.1f Hz", fr); + //m_out_freq->value(str); } void OscillatorPluginGUI::cb_FineTune(Fl_Knob* o, void* v) @@ -296,7 +296,7 @@ void OscillatorPluginGUI::cb_FineTune(Fl_Knob* o, void* v) inline void OscillatorPluginGUI::cb_PulseWidth_i(Fl_Slider* o, void* v) { char str[10]; - m_Plugin->SetPulseWidth(o->value()); + m_GUICH->Set("PulseWidth",o->value()); sprintf(str,"%4.0f %%", 100*o->value()); m_out_pulseW->value(str); } @@ -305,24 +305,24 @@ void OscillatorPluginGUI::cb_PulseWidth(Fl_Slider* o, void* v) { ((OscillatorPluginGUI*)(o->parent()))->cb_PulseWidth_i(o,v);} inline void OscillatorPluginGUI::cb_Square_i(Fl_Check_Button* o, void* v) -{ m_Plugin->SetType(OscillatorPlugin::SQUARE); } +{ m_GUICH->Set("Type",(char)OscillatorPlugin::SQUARE); } void OscillatorPluginGUI::cb_Square(Fl_Check_Button* o, void* v) { ((OscillatorPluginGUI*)(o->parent()))->cb_Square_i(o,v); } inline void OscillatorPluginGUI::cb_Saw_i(Fl_Check_Button* o, void* v) -{ m_Plugin->SetType(OscillatorPlugin::SAW); } +{ m_GUICH->Set("Type",(char)OscillatorPlugin::SAW); } void OscillatorPluginGUI::cb_Saw(Fl_Check_Button* o, void* v) { ((OscillatorPluginGUI*)(o->parent()))->cb_Saw_i(o,v); } inline void OscillatorPluginGUI::cb_Noise_i(Fl_Check_Button* o, void* v) -{ m_Plugin->SetType(OscillatorPlugin::NOISE); } +{ m_GUICH->Set("Type",(char)OscillatorPlugin::NOISE); } void OscillatorPluginGUI::cb_Noise(Fl_Check_Button* o, void* v) { ((OscillatorPluginGUI*)(o->parent()))->cb_Noise_i(o,v); } inline void OscillatorPluginGUI::cb_SHLen_i(Fl_Slider* o, void* v) { char str[10]; - m_Plugin->SetSHLen(0.2f-o->value()); + m_GUICH->Set("SHLen",0.2f-o->value()); sprintf(str,"%4.3f s", 0.2f-o->value()); m_out_SHlen->value(str); } @@ -333,7 +333,7 @@ void OscillatorPluginGUI::cb_SHLen(Fl_Slider* o, void* v) inline void OscillatorPluginGUI::cb_ModAmount_i(Fl_Knob* o, void* v) { char str[10]; - m_Plugin->SetModAmount(o->value()); + m_GUICH->Set("ModAmount",o->value()); sprintf(str,"%4.0f %%", 100*o->value()); m_out_mod->value(str); } diff --git a/SpiralSound/Plugins/OscillatorPlugin/OscillatorPluginGUI.h b/SpiralSound/Plugins/OscillatorPlugin/OscillatorPluginGUI.h index 671252e..bd602f0 100644 --- a/SpiralSound/Plugins/OscillatorPlugin/OscillatorPluginGUI.h +++ b/SpiralSound/Plugins/OscillatorPlugin/OscillatorPluginGUI.h @@ -33,13 +33,10 @@ class OscillatorPluginGUI : public SpiralPluginGUI { public: - OscillatorPluginGUI(int w, int h, OscillatorPlugin *o,const HostInfo *Info); + OscillatorPluginGUI(int w, int h, OscillatorPlugin *o,ChannelHandler *ch,const HostInfo *Info); - virtual void UpdateValues(); - virtual SpiralPlugin* GetPlugin() { return m_Plugin; } + virtual void UpdateValues(SpiralPlugin *o); - OscillatorPlugin *m_Plugin; - private: Fl_Check_Button *ShapeSquare; diff --git a/SpiralSound/Plugins/OutputPlugin/Makefile.in b/SpiralSound/Plugins/OutputPlugin/Makefile.in index fba73f0..4fa5eb5 100644 --- a/SpiralSound/Plugins/OutputPlugin/Makefile.in +++ b/SpiralSound/Plugins/OutputPlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -51,6 +52,7 @@ HEADERS = ../SpiralPlugin.h \ OutputPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -59,6 +61,7 @@ SOURCES = ../SpiralPlugin.C \ OutputPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -176,3 +179,5 @@ OutputPluginGUI.o: OutputPluginGUI.C \ ../SpiralPluginGUI.h \ ../Widgets/Fl_DragBar.H +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/OutputPlugin/OutputPlugin.C b/SpiralSound/Plugins/OutputPlugin/OutputPlugin.C index ac908a0..38bd95a 100644 --- a/SpiralSound/Plugins/OutputPlugin/OutputPlugin.C +++ b/SpiralSound/Plugins/OutputPlugin/OutputPlugin.C @@ -63,7 +63,8 @@ int OutputPlugin::m_NoExecuted=0; return; \ } -extern "C" { +extern "C" +{ SpiralPlugin* CreateInstance() { return new OutputPlugin; @@ -97,6 +98,8 @@ OutputPlugin::OutputPlugin() m_PluginInfo.PortTips.push_back("Left In"); m_PluginInfo.PortTips.push_back("Right In"); + m_AudioCH->Register("Mode",(char*)&m_Mode,ChannelHandler::INPUT); + m_Mode=OUTPUT; } @@ -119,11 +122,11 @@ PluginInfo &OutputPlugin::Initialise(const HostInfo *Host) SpiralGUIType *OutputPlugin::CreateGUI() { - m_GUI = new OutputPluginGUI(m_PluginInfo.Width, + return new OutputPluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, - this,m_HostInfo); - m_GUI->hide(); - return m_GUI; + this, + m_AudioCH, + m_HostInfo); } void OutputPlugin::Execute() @@ -472,6 +475,3 @@ void OSSOutput::OpenReadWrite() result = ioctl(m_Dspfd,SNDCTL_DSP_SPEED,&val); CHECK_AND_REPORT_ERROR; } - - - diff --git a/SpiralSound/Plugins/OutputPlugin/OutputPlugin.h b/SpiralSound/Plugins/OutputPlugin/OutputPlugin.h index bab0d21..976b3b1 100644 --- a/SpiralSound/Plugins/OutputPlugin/OutputPlugin.h +++ b/SpiralSound/Plugins/OutputPlugin/OutputPlugin.h @@ -74,16 +74,13 @@ public: virtual ~OutputPlugin(); virtual PluginInfo& Initialise(const HostInfo *Host); - virtual SpiralGUIType* CreateGUI(); + virtual SpiralGUIType* CreateGUI(); virtual void Execute(); virtual void StreamOut(ostream &s) {} virtual void StreamIn(istream &s) {} - // has to be defined in the plugin - virtual void UpdateGUI() { Fl::check(); } - - void SetMode(Mode s) { m_Mode=s; } - + Mode GetMode() { return m_Mode; } + private: static int m_RefCount; static int m_NoExecuted; diff --git a/SpiralSound/Plugins/OutputPlugin/OutputPluginGUI.C b/SpiralSound/Plugins/OutputPlugin/OutputPluginGUI.C index 46f56d4..6df63ff 100644 --- a/SpiralSound/Plugins/OutputPlugin/OutputPluginGUI.C +++ b/SpiralSound/Plugins/OutputPlugin/OutputPluginGUI.C @@ -24,11 +24,9 @@ static const int GUI_COLOUR = 179; static const int GUIBG_COLOUR = 144; static const int GUIBG2_COLOUR = 145; -OutputPluginGUI::OutputPluginGUI(int w, int h,OutputPlugin *o,const HostInfo *Info) : -SpiralPluginGUI(w,h,o) +OutputPluginGUI::OutputPluginGUI(int w, int h, SpiralPlugin *o, ChannelHandler *ch,const HostInfo *Info) : +SpiralPluginGUI(w,h,o,ch) { - m_Plugin=o; - Volume = new Fl_Knob(30, 22, 40, 40, "Volume"); Volume->color(GUI_COLOUR); Volume->type(Fl_Knob::DOTLIN); @@ -65,7 +63,7 @@ SpiralPluginGUI(w,h,o) end(); } -void OutputPluginGUI::UpdateValues() +void OutputPluginGUI::UpdateValues(SpiralPlugin *o) { Volume->value(OSSOutput::Get()->GetVolume()); } @@ -108,7 +106,7 @@ inline void OutputPluginGUI::cb_OpenRead_i(Fl_Button* o, void* v) OpenWrite->value(0); OSSOutput::Get()->Close(); OSSOutput::Get()->OpenRead(); - m_Plugin->SetMode(OutputPlugin::INPUT); + m_GUICH->Set("Mode",(char)OutputPlugin::INPUT); } else { @@ -126,7 +124,7 @@ inline void OutputPluginGUI::cb_OpenDuplex_i(Fl_Button* o, void* v) OpenRead->value(0); OSSOutput::Get()->Close(); OSSOutput::Get()->OpenReadWrite(); - m_Plugin->SetMode(OutputPlugin::DUPLEX); + m_GUICH->Set("Mode",(char)OutputPlugin::DUPLEX); } else { @@ -144,7 +142,7 @@ inline void OutputPluginGUI::cb_OpenWrite_i(Fl_Button* o, void* v) OpenRead->value(0); OSSOutput::Get()->Close(); OSSOutput::Get()->OpenWrite(); - m_Plugin->SetMode(OutputPlugin::OUTPUT); + m_GUICH->Set("Mode",(char)OutputPlugin::OUTPUT); } else { diff --git a/SpiralSound/Plugins/OutputPlugin/OutputPluginGUI.h b/SpiralSound/Plugins/OutputPlugin/OutputPluginGUI.h index 4c4885f..7f52b8c 100644 --- a/SpiralSound/Plugins/OutputPlugin/OutputPluginGUI.h +++ b/SpiralSound/Plugins/OutputPlugin/OutputPluginGUI.h @@ -33,12 +33,9 @@ class OutputPluginGUI : public SpiralPluginGUI { public: - OutputPluginGUI(int w, int h, OutputPlugin *o,const HostInfo *Info); + OutputPluginGUI(int w, int h, SpiralPlugin *o, ChannelHandler *ch, const HostInfo *Info); - virtual void UpdateValues(); - virtual SpiralPlugin* GetPlugin() { return m_Plugin; } - - OutputPlugin *m_Plugin; + virtual void UpdateValues(SpiralPlugin *o); private: diff --git a/SpiralSound/Plugins/PoshSamplerPlugin/Makefile.in b/SpiralSound/Plugins/PoshSamplerPlugin/Makefile.in index 6232853..a88a83e 100644 --- a/SpiralSound/Plugins/PoshSamplerPlugin/Makefile.in +++ b/SpiralSound/Plugins/PoshSamplerPlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -51,6 +52,7 @@ HEADERS = ../SpiralPlugin.h \ PoshSamplerPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -59,6 +61,7 @@ SOURCES = ../SpiralPlugin.C \ PoshSamplerPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -174,3 +177,5 @@ PoshSamplerPluginGUI.o: PoshSamplerPluginGUI.C \ ../Widgets/Fl_DragBar.H \ ../Widgets/Fl_Knob.H +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPlugin.C b/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPlugin.C index bbf29b6..25eb1fe 100644 --- a/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPlugin.C +++ b/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPlugin.C @@ -118,6 +118,20 @@ m_Recording(false) } m_Version=3; + m_Current = 0; + + m_AudioCH->Register("Num",&m_GUIArgs.Num); + m_AudioCH->Register("Value",&m_GUIArgs.Value); + m_AudioCH->Register("Bool",&m_GUIArgs.Boole); + m_AudioCH->Register("Int",&m_GUIArgs.Int); + m_AudioCH->Register("Start",&m_GUIArgs.Start); + m_AudioCH->Register("End",&m_GUIArgs.End); + m_AudioCH->Register("LoopStart",&m_GUIArgs.LoopStart); + m_AudioCH->RegisterData("Name",ChannelHandler::INPUT,&m_GUIArgs.Name,sizeof(m_GUIArgs.Name)); + m_AudioCH->Register("PlayPos",&m_CurrentPlayPos,ChannelHandler::OUTPUT); + m_AudioCH->RegisterData("SampleBuffer",ChannelHandler::OUTPUT_REQUEST,&m_SampleBuffer,TRANSBUF_SIZE); + m_AudioCH->Register("SampleSize",&m_SampleSize,ChannelHandler::OUTPUT_REQUEST); + } PoshSamplerPlugin::~PoshSamplerPlugin() @@ -142,11 +156,9 @@ PluginInfo &PoshSamplerPlugin::Initialise(const HostInfo *Host) SpiralGUIType *PoshSamplerPlugin::CreateGUI() { - m_GUI = new PoshSamplerPluginGUI(m_PluginInfo.Width, + return new PoshSamplerPluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, - this,m_HostInfo); - m_GUI->hide(); - return m_GUI; + this,m_AudioCH,m_HostInfo); } void PoshSamplerPlugin::Execute() @@ -249,14 +261,12 @@ void PoshSamplerPlugin::Execute() } } } - - PoshSamplerPluginGUI *GUI=(PoshSamplerPluginGUI *)m_GUI; - + // record static int LastRecording=false; if(m_Recording && InputExists(REC_INPUT)) { - int s=GUI->GetCurrentSample(); + int s=0;//GUI->GetCurrentSample(); if (!LastRecording) m_SampleVec[s]->Clear(); @@ -279,13 +289,49 @@ void PoshSamplerPlugin::Execute() } LastRecording=m_Recording; - if (m_SampleDescVec[GUI->GetCurrentSample()]->SamplePos>0) + if (m_SampleDescVec[m_Current]->SamplePos>0) { - GUI->SetPlayPos((int)m_SampleDescVec[GUI->GetCurrentSample()]->SamplePos); + m_CurrentPlayPos=(long)m_SampleDescVec[m_Current]->SamplePos; } } -#include +void PoshSamplerPlugin::ExecuteCommands() +{ + if (m_AudioCH->IsCommandWaiting()) + { + switch(m_AudioCH->GetCommand()) + { + case (LOAD) : LoadSample(m_GUIArgs.Num,m_GUIArgs.Name); break; + case (SAVE) : SaveSample(m_GUIArgs.Num,m_GUIArgs.Name); break; + case (SETVOL) : SetVolume(m_GUIArgs.Num,m_GUIArgs.Value); break; + case (SETPITCH) : SetPitch(m_GUIArgs.Num,m_GUIArgs.Value); break; + case (SETLOOP) : SetLoop(m_GUIArgs.Num,m_GUIArgs.Boole); break; + case (SETPING) : SetPingPong(m_GUIArgs.Num,m_GUIArgs.Boole); break; + case (SETNOTE) : SetNote(m_GUIArgs.Num,m_GUIArgs.Int); break; + case (SETOCT) : SetOctave(m_GUIArgs.Num,m_GUIArgs.Int); break; + case (SETPLAYPOINTS): + { + SetPlayStart(m_GUIArgs.Num,m_GUIArgs.Start); + SetLoopStart(m_GUIArgs.Num,m_GUIArgs.LoopStart); + SetLoopEnd(m_GUIArgs.Num,m_GUIArgs.End); + } break; + case (SETREC) : SetRecord(m_GUIArgs.Boole); break; + case (CUT) : Cut(m_GUIArgs.Num,m_GUIArgs.Start,m_GUIArgs.End); break; + case (COPY) : Copy(m_GUIArgs.Num,m_GUIArgs.Start,m_GUIArgs.End); break; + case (PASTE) : Paste(m_GUIArgs.Num,m_GUIArgs.Start,m_GUIArgs.End); break; + case (MIX) : Mix(m_GUIArgs.Num,m_GUIArgs.Start,m_GUIArgs.End); break; + case (CROP) : Crop(m_GUIArgs.Num,m_GUIArgs.Start,m_GUIArgs.End); break; + case (REV) : Reverse(m_GUIArgs.Num,m_GUIArgs.Start,m_GUIArgs.End); break; + case (AMP) : Amp(m_GUIArgs.Num,m_GUIArgs.Start,m_GUIArgs.End); break; + case (SETCURRENT) : m_Current = m_GUIArgs.Num; break; + case (GETSAMPLE) : + { + m_AudioCH->SetupBulkTransfer((void*)m_SampleVec[m_Current]->GetBuffer()); + m_SampleSize=m_SampleVec[m_Current]->GetLengthInBytes(); + } break; + }; + } +} void PoshSamplerPlugin::StreamOut(ostream &s) { @@ -334,8 +380,6 @@ void PoshSamplerPlugin::StreamIn(istream &s) s.get(Buf,size+1); } } - - ((PoshSamplerPluginGUI*)m_GUI)->UpdateValues(); } void PoshSamplerPlugin::LoadSample(int n, const string &Name) @@ -349,7 +393,7 @@ void PoshSamplerPlugin::LoadSample(int n, const string &Name) m_SampleDescVec[n]->SampleRate=Wav.GetSamplerate(); m_SampleDescVec[n]->Stereo=Wav.IsStereo(); m_SampleDescVec[n]->Pitch *= m_SampleDescVec[n]->SampleRate/(float)m_HostInfo->SAMPLERATE; - m_SampleDescVec[n]->LoopEnd=m_SampleVec[n]->GetLength()-1; + m_SampleDescVec[n]->LoopEnd=m_SampleVec[n]->GetLength()-1; } } diff --git a/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPlugin.h b/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPlugin.h index dbf6ca7..b06957b 100644 --- a/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPlugin.h +++ b/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPlugin.h @@ -23,6 +23,7 @@ #define PoshSamplerPLUGIN static const int NUM_SAMPLES = 8; +static const int TRANSBUF_SIZE = 0x10000; struct SampleDesc { @@ -53,39 +54,61 @@ public: virtual PluginInfo &Initialise(const HostInfo *Host); virtual SpiralGUIType *CreateGUI(); virtual void Execute(); + virtual void ExecuteCommands(); virtual void StreamOut(ostream &s); virtual void StreamIn(istream &s); virtual bool SaveExternalFiles(const string &Dir); virtual void LoadExternalFiles(const string &Dir); + enum GUICommands{NONE,LOAD,SAVE,SETVOL,SETPITCH,SETLOOP,SETPING,SETNOTE,SETOCT, + SETPLAYPOINTS,SETREC,CUT,COPY,PASTE,CROP,MIX,REV,AMP,SETCURRENT, + GETSAMPLE}; + + struct GUIArgs + { + int Num; + float Value; + bool Boole; + int Int; + long Start; + long End; + long LoopStart; + char Name[256]; + }; + void LoadSample(int n, const string &Name); void SaveSample(int n, const string &Name); Sample* GetSample(int n) { return m_SampleVec[n]; } - void SetVolume(int n, float s) { m_SampleDescVec[n]->Volume=s; } float GetVolume(int n) { return m_SampleDescVec[n]->Volume; } - void SetPitch(int n, float s) { m_SampleDescVec[n]->PitchMod=s; } float GetPitch(int n) { return m_SampleDescVec[n]->PitchMod; } - void SetLoop(int n, bool s) { m_SampleDescVec[n]->Loop=s; } bool GetLoop(int n) { return m_SampleDescVec[n]->Loop; } - void SetPingPong(int n, bool s){ m_SampleDescVec[n]->PingPong=s; } bool GetPingPong(int n) { return m_SampleDescVec[n]->PingPong; } - void SetNote(int n, int s) { m_SampleDescVec[n]->Note=s; } int GetNote(int n) { return m_SampleDescVec[n]->Note; } - void SetOctave(int n, int s) { m_SampleDescVec[n]->Octave=s-6; } int GetOctave(int n) { return m_SampleDescVec[n]->Octave+6; } - //void SetSampleNum(int n, int s){ m_SampleDescVec[n]->Note=s; } - //int GetSampleNum(int n) { return m_SampleDescVec[n]->Note; } - void SetPlayStart(int n, long s) { m_SampleDescVec[n]->PlayStart=s; } long GetPlayStart(int n) { return m_SampleDescVec[n]->PlayStart; } - void SetLoopStart(int n, long s) { m_SampleDescVec[n]->LoopStart=s; } long GetLoopStart(int n) { return m_SampleDescVec[n]->LoopStart; } - void SetLoopEnd(int n, long s) { m_SampleDescVec[n]->LoopEnd=s; } long GetLoopEnd(int n) { return m_SampleDescVec[n]->LoopEnd; } + + vector m_SampleVec; + vector m_SampleDescVec; + +private: + + void SetVolume(int n, float s) { m_SampleDescVec[n]->Volume=s; } + void SetPitch(int n, float s) { m_SampleDescVec[n]->PitchMod=s; } + void SetLoop(int n, bool s) { m_SampleDescVec[n]->Loop=s; } + void SetPingPong(int n, bool s){ m_SampleDescVec[n]->PingPong=s; } + void SetNote(int n, int s) { m_SampleDescVec[n]->Note=s; } + void SetOctave(int n, int s) { m_SampleDescVec[n]->Octave=s-6; } + + void SetPlayStart(int n, long s) { m_SampleDescVec[n]->PlayStart=s; } + void SetLoopStart(int n, long s) { m_SampleDescVec[n]->LoopStart=s; } + void SetLoopEnd(int n, long s) { m_SampleDescVec[n]->LoopEnd=s; } void SetRecord(bool s) { m_Recording=s; } - + void Cut(int n, long s, long e); void Copy(int n, long s, long e); void Paste(int n, long s, long e); @@ -93,13 +116,18 @@ public: void Crop(int n, long s, long e); void Reverse(int n, long s, long e); void Amp(int n, long s, long e); - - vector m_SampleVec; - vector m_SampleDescVec; - -private: + + int m_Current; + + GUIArgs m_GUIArgs; + Sample m_CopyBuffer; bool m_Recording; + + char m_SampleBuffer[TRANSBUF_SIZE]; + long m_SampleSize; + + long m_CurrentPlayPos; }; #endif diff --git a/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPluginGUI.C b/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPluginGUI.C index 8ad2d08..599f186 100644 --- a/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPluginGUI.C +++ b/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPluginGUI.C @@ -46,6 +46,12 @@ Fl_WaveDisplay::~Fl_WaveDisplay() { } +void Fl_WaveDisplay::SetSample(const float* s, long len) +{ + if (m_Sample) delete m_Sample; + m_Sample = new Sample(s,len); +} + void Fl_WaveDisplay::draw() { int ho=h()/2; @@ -131,6 +137,8 @@ int Fl_WaveDisplay::handle(int event) static int Holding=0; static int GrabDist=10; + if (!m_Sample || m_Sample->GetLength()==0) return 1; + if (event==FL_PUSH) { GrabDist=(int)((m_ViewEnd-m_ViewStart)*0.03f); @@ -255,11 +263,9 @@ int Fl_WaveDisplay::handle(int event) //////////////////////////////////////////// -PoshSamplerPluginGUI::PoshSamplerPluginGUI(int w, int h,PoshSamplerPlugin *o,const HostInfo *Info) : -SpiralPluginGUI(w,h,o) +PoshSamplerPluginGUI::PoshSamplerPluginGUI(int w, int h,PoshSamplerPlugin *o,ChannelHandler *ch,const HostInfo *Info) : +SpiralPluginGUI(w,h,o,ch) { - m_Plugin=o; - int n=0; m_Load = new Fl_Button(5, 20, 70, 20, "Load"); @@ -346,7 +352,6 @@ SpiralPluginGUI(w,h,o) add(m_SampleNum); m_Display = new Fl_WaveDisplay(5,85,w-10,100,""); - m_Display->SetSample(m_Plugin->GetSample(0)); m_Display->callback((Fl_Callback*)cb_WaveDisplay); int bx=5,by=190,bw=w/7-2,bh=20,bs=w/7-2; @@ -385,16 +390,44 @@ SpiralPluginGUI(w,h,o) redraw(); } -void PoshSamplerPluginGUI::UpdateValues() +void PoshSamplerPluginGUI::UpdateSampleDisplay(int num) +{ + m_GUICH->SetCommand(PoshSamplerPlugin::GETSAMPLE); + m_GUICH->Wait(); + m_GUICH->RequestChannelAndWait("SampleSize"); + long SampleSize=m_GUICH->GetLong("SampleSize"); + + if (SampleSize) + { + char *TempBuf = new char[SampleSize]; + m_GUICH->BulkTransfer("SampleBuffer",(void*)TempBuf,SampleSize); + m_Display->SetSample((float*)TempBuf,SampleSize/sizeof(float)); + delete[] TempBuf; + } +} + +void PoshSamplerPluginGUI::draw() +{ + SpiralPluginGUI::draw(); + SetPlayPos(m_GUICH->GetLong("PlayPos")); +} + +void PoshSamplerPluginGUI::UpdateValues(SpiralPlugin *o) { - m_Volume->value(m_Plugin->GetVolume((int)m_SampleNum->value())); - m_Pitch->value(m_Plugin->GetPitch((int)m_SampleNum->value())); - m_Note->value(m_Plugin->GetNote((int)m_SampleNum->value())); - m_Loop->value(m_Plugin->GetLoop((int)m_SampleNum->value())); - m_Display->SetSample(m_Plugin->GetSample((int)m_SampleNum->value())); - m_Display->SetPlayStart(m_Plugin->GetPlayStart((int)m_SampleNum->value())); - m_Display->SetLoopStart(m_Plugin->GetLoopStart((int)m_SampleNum->value())); - m_Display->SetLoopEnd(m_Plugin->GetLoopEnd((int)m_SampleNum->value())); + PoshSamplerPlugin *Plugin = (PoshSamplerPlugin*)o; + + m_Volume->value(Plugin->GetVolume((int)m_SampleNum->value())); + m_Pitch->value(Plugin->GetPitch((int)m_SampleNum->value())); + m_Note->value(Plugin->GetNote((int)m_SampleNum->value())); + m_Loop->value(Plugin->GetLoop((int)m_SampleNum->value())); + Sample *sample = Plugin->GetSample((int)m_SampleNum->value()); + if (sample->GetLength()) + { + m_Display->SetSample(sample->GetBuffer(),sample->GetLength()); + } + m_Display->SetPlayStart(Plugin->GetPlayStart((int)m_SampleNum->value())); + m_Display->SetLoopStart(Plugin->GetLoopStart((int)m_SampleNum->value())); + m_Display->SetLoopEnd(Plugin->GetLoopEnd((int)m_SampleNum->value())); m_Display->redraw(); } @@ -404,9 +437,14 @@ inline void PoshSamplerPluginGUI::cb_Load_i(Fl_Button* o, void* v) if (fn && fn!='\0') { - m_Plugin->LoadSample((int)m_SampleNum->value(),fn); - m_Display->SetSample(m_Plugin->GetSample((int)m_SampleNum->value())); - UpdateValues(); + strcpy(m_TextBuf,fn); + m_GUICH->SetData("Name",m_TextBuf); + m_GUICH->Set("Num",(int)m_SampleNum->value()); + m_GUICH->SetCommand(PoshSamplerPlugin::LOAD); + + m_GUICH->Wait(); // wait for the sample to load + + UpdateSampleDisplay((int)m_SampleNum->value()); m_Display->redraw(); redraw(); } @@ -419,41 +457,65 @@ inline void PoshSamplerPluginGUI::cb_Save_i(Fl_Button* o, void* v) char *fn=fl_file_chooser("Save sample", "{*.wav,*.WAV}", NULL); if (fn && fn!='\0') - { - m_Plugin->SaveSample((int)m_SampleNum->value(),fn); + { + strcpy(m_TextBuf,fn); + m_GUICH->Set("Name",m_TextBuf); + m_GUICH->Set("Num",(int)m_SampleNum->value()); + m_GUICH->SetCommand(PoshSamplerPlugin::SAVE); } } void PoshSamplerPluginGUI::cb_Save(Fl_Button* o, void* v) { ((PoshSamplerPluginGUI*)(o->parent()))->cb_Save_i(o,v);} inline void PoshSamplerPluginGUI::cb_Volume_i(Fl_Knob* o, void* v) -{ m_Plugin->SetVolume((int)m_SampleNum->value(),o->value()); } +{ + m_GUICH->Set("Value",(float)o->value()); + m_GUICH->Set("Num",(int)m_SampleNum->value()); + m_GUICH->SetCommand(PoshSamplerPlugin::SETVOL); +} void PoshSamplerPluginGUI::cb_Volume(Fl_Knob* o, void* v) { ((PoshSamplerPluginGUI*)(o->parent()))->cb_Volume_i(o,v);} inline void PoshSamplerPluginGUI::cb_Pitch_i(Fl_Knob* o, void* v) -{ m_Plugin->SetPitch((int)m_SampleNum->value(),o->value()); } +{ + m_GUICH->Set("Value",(float)o->value()); + m_GUICH->Set("Num",(int)m_SampleNum->value()); + m_GUICH->SetCommand(PoshSamplerPlugin::SETPITCH); +} void PoshSamplerPluginGUI::cb_Pitch(Fl_Knob* o, void* v) { ((PoshSamplerPluginGUI*)(o->parent()))->cb_Pitch_i(o,v);} inline void PoshSamplerPluginGUI::cb_Octave_i(Fl_Knob* o, void* v) -{ m_Plugin->SetOctave((int)m_SampleNum->value(), (int)o->value()); } +{ + m_GUICH->Set("Int",(int)o->value()); + m_GUICH->Set("Num",(int)m_SampleNum->value()); + m_GUICH->SetCommand(PoshSamplerPlugin::SETOCT); +} void PoshSamplerPluginGUI::cb_Octave(Fl_Knob* o, void* v) { ((PoshSamplerPluginGUI*)(o->parent()))->cb_Octave_i(o,v);} inline void PoshSamplerPluginGUI::cb_Loop_i(Fl_Button* o, void* v) -{ m_Plugin->SetLoop((int)m_SampleNum->value(),o->value()); } +{ + m_GUICH->Set("Bool",(bool)o->value()); + m_GUICH->Set("Num",(int)m_SampleNum->value()); + m_GUICH->SetCommand(PoshSamplerPlugin::SETLOOP); +} void PoshSamplerPluginGUI::cb_Loop(Fl_Button* o, void* v) { ((PoshSamplerPluginGUI*)(o->parent()))->cb_Loop_i(o,v);} inline void PoshSamplerPluginGUI::cb_PingPong_i(Fl_Button* o, void* v) -{ m_Plugin->SetPingPong((int)m_SampleNum->value(), o->value()); } +{ + m_GUICH->Set("Bool",(bool)o->value()); + m_GUICH->Set("Num",(int)m_SampleNum->value()); + m_GUICH->SetCommand(PoshSamplerPlugin::SETPING); +} void PoshSamplerPluginGUI::cb_PingPong(Fl_Button* o, void* v) { ((PoshSamplerPluginGUI*)(o->parent()))->cb_PingPong_i(o,v);} inline void PoshSamplerPluginGUI::cb_Record_i(Fl_Button* o, void* v) { - m_Plugin->SetRecord(o->value()); + m_GUICH->Set("Bool",(bool)o->value()); + m_GUICH->SetCommand(PoshSamplerPlugin::SETREC); redraw(); } void PoshSamplerPluginGUI::cb_Record(Fl_Button* o, void* v) @@ -465,7 +527,11 @@ void PoshSamplerPluginGUI::cb_PosMarker(Fl_Button* o, void* v) { ((PoshSamplerPluginGUI*)(o->parent()))->cb_PosMarker_i(o,v);} inline void PoshSamplerPluginGUI::cb_Note_i(Fl_Counter* o, void* v) -{ m_Plugin->SetNote((int)m_SampleNum->value(),(int)o->value()); } +{ + m_GUICH->Set("Int",(int)o->value()); + m_GUICH->Set("Num",(int)m_SampleNum->value()); + m_GUICH->SetCommand(PoshSamplerPlugin::SETNOTE); +} void PoshSamplerPluginGUI::cb_Note(Fl_Counter* o, void* v) { ((PoshSamplerPluginGUI*)(o->parent()))->cb_Note_i(o,v);} @@ -473,31 +539,46 @@ inline void PoshSamplerPluginGUI::cb_SampleNum_i(Fl_Counter* o, void* v) { if (m_SampleNum->value()<0) m_SampleNum->value(0); if (m_SampleNum->value()>7) m_SampleNum->value(7); - UpdateValues(); + m_GUICH->Set("Num",(int)m_SampleNum->value()); + m_GUICH->SetCommand(PoshSamplerPlugin::SETCURRENT); + m_GUICH->Wait(); + UpdateSampleDisplay((int)m_SampleNum->value()); } void PoshSamplerPluginGUI::cb_SampleNum(Fl_Counter* o, void* v) { ((PoshSamplerPluginGUI*)(o->parent()))->cb_SampleNum_i(o,v);} inline void PoshSamplerPluginGUI::cb_Cut_i(Fl_Button* o, void* v) -{ - m_Plugin->Cut((int)m_SampleNum->value(),m_Display->GetRangeStart(),m_Display->GetRangeEnd()); +{ + m_GUICH->Set("Start",(long)m_Display->GetRangeStart()); + m_GUICH->Set("End",(long)m_Display->GetRangeEnd()); + m_GUICH->Set("Num",(int)m_SampleNum->value()); + m_GUICH->SetCommand(PoshSamplerPlugin::CUT); + m_GUICH->Wait(); + UpdateSampleDisplay((int)m_SampleNum->value()); m_Display->redraw(); } void PoshSamplerPluginGUI::cb_Cut(Fl_Button* o, void* v) { ((PoshSamplerPluginGUI*)(o->parent()))->cb_Cut_i(o,v);} inline void PoshSamplerPluginGUI::cb_Copy_i(Fl_Button* o, void* v) -{ - m_Plugin->Copy((int)m_SampleNum->value(),m_Display->GetRangeStart(),m_Display->GetRangeEnd()); - m_Display->redraw(); +{ + m_GUICH->Set("Start",(long)m_Display->GetRangeStart()); + m_GUICH->Set("End",(long)m_Display->GetRangeEnd()); + m_GUICH->Set("Num",(int)m_SampleNum->value()); + m_GUICH->SetCommand(PoshSamplerPlugin::COPY); } void PoshSamplerPluginGUI::cb_Copy(Fl_Button* o, void* v) { ((PoshSamplerPluginGUI*)(o->parent()))->cb_Copy_i(o,v);} inline void PoshSamplerPluginGUI::cb_Paste_i(Fl_Button* o, void* v) { - m_Plugin->Paste((int)m_SampleNum->value(),m_Display->GetRangeStart(),m_Display->GetRangeEnd()); + m_GUICH->Set("Start",(long)m_Display->GetRangeStart()); + m_GUICH->Set("End",(long)m_Display->GetRangeEnd()); + m_GUICH->Set("Num",(int)m_SampleNum->value()); + m_GUICH->SetCommand(PoshSamplerPlugin::PASTE); + m_GUICH->Wait(); + UpdateSampleDisplay((int)m_SampleNum->value()); m_Display->redraw(); } void PoshSamplerPluginGUI::cb_Paste(Fl_Button* o, void* v) @@ -505,7 +586,12 @@ void PoshSamplerPluginGUI::cb_Paste(Fl_Button* o, void* v) inline void PoshSamplerPluginGUI::cb_Mix_i(Fl_Button* o, void* v) { - m_Plugin->Mix((int)m_SampleNum->value(),m_Display->GetRangeStart(),m_Display->GetRangeEnd()); + m_GUICH->Set("Start",(long)m_Display->GetRangeStart()); + m_GUICH->Set("End",(long)m_Display->GetRangeEnd()); + m_GUICH->Set("Num",(int)m_SampleNum->value()); + m_GUICH->SetCommand(PoshSamplerPlugin::MIX); + m_GUICH->Wait(); + UpdateSampleDisplay((int)m_SampleNum->value()); m_Display->redraw(); } void PoshSamplerPluginGUI::cb_Mix(Fl_Button* o, void* v) @@ -513,15 +599,25 @@ void PoshSamplerPluginGUI::cb_Mix(Fl_Button* o, void* v) inline void PoshSamplerPluginGUI::cb_Crop_i(Fl_Button* o, void* v) { - m_Plugin->Crop((int)m_SampleNum->value(),m_Display->GetRangeStart(),m_Display->GetRangeEnd()); + m_GUICH->Set("Start",(long)m_Display->GetRangeStart()); + m_GUICH->Set("End",(long)m_Display->GetRangeEnd()); + m_GUICH->Set("Num",(int)m_SampleNum->value()); + m_GUICH->SetCommand(PoshSamplerPlugin::CROP); + m_GUICH->Wait(); + UpdateSampleDisplay((int)m_SampleNum->value()); m_Display->redraw(); } void PoshSamplerPluginGUI::cb_Crop(Fl_Button* o, void* v) { ((PoshSamplerPluginGUI*)(o->parent()))->cb_Crop_i(o,v);} inline void PoshSamplerPluginGUI::cb_Reverse_i(Fl_Button* o, void* v) -{ - m_Plugin->Reverse((int)m_SampleNum->value(),m_Display->GetRangeStart(),m_Display->GetRangeEnd()); +{ + m_GUICH->Set("Start",(long)m_Display->GetRangeStart()); + m_GUICH->Set("End",(long)m_Display->GetRangeEnd()); + m_GUICH->Set("Num",(int)m_SampleNum->value()); + m_GUICH->SetCommand(PoshSamplerPlugin::REV); + m_GUICH->Wait(); + UpdateSampleDisplay((int)m_SampleNum->value()); m_Display->redraw(); } void PoshSamplerPluginGUI::cb_Reverse(Fl_Button* o, void* v) @@ -529,7 +625,12 @@ void PoshSamplerPluginGUI::cb_Reverse(Fl_Button* o, void* v) inline void PoshSamplerPluginGUI::cb_Amp_i(Fl_Button* o, void* v) { - m_Plugin->Amp((int)m_SampleNum->value(),m_Display->GetRangeStart(),m_Display->GetRangeEnd()); + m_GUICH->Set("Start",(long)m_Display->GetRangeStart()); + m_GUICH->Set("End",(long)m_Display->GetRangeEnd()); + m_GUICH->Set("Num",(int)m_SampleNum->value()); + m_GUICH->SetCommand(PoshSamplerPlugin::AMP); + m_GUICH->Wait(); + UpdateSampleDisplay((int)m_SampleNum->value()); m_Display->redraw(); } void PoshSamplerPluginGUI::cb_Amp(Fl_Button* o, void* v) @@ -537,9 +638,11 @@ void PoshSamplerPluginGUI::cb_Amp(Fl_Button* o, void* v) inline void PoshSamplerPluginGUI::cb_WaveDisplay_i(Fl_WaveDisplay* o, void* v) { - m_Plugin->SetPlayStart((int)m_SampleNum->value(),o->GetPlayStart()); - m_Plugin->SetLoopStart((int)m_SampleNum->value(),o->GetLoopStart()); - m_Plugin->SetLoopEnd((int)m_SampleNum->value(),o->GetLoopEnd()); + m_GUICH->Set("Start",(long)o->GetPlayStart()); + m_GUICH->Set("End",(long)o->GetLoopEnd()); + m_GUICH->Set("LoopStart",(long)o->GetLoopStart()); + m_GUICH->Set("Num",(int)m_SampleNum->value()); + m_GUICH->SetCommand(PoshSamplerPlugin::SETPLAYPOINTS); } void PoshSamplerPluginGUI::cb_WaveDisplay(Fl_WaveDisplay* o, void* v) { ((PoshSamplerPluginGUI*)(o->parent()))->cb_WaveDisplay_i(o,v);} diff --git a/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPluginGUI.h b/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPluginGUI.h index a5c614d..00678f8 100644 --- a/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPluginGUI.h +++ b/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPluginGUI.h @@ -35,7 +35,7 @@ class Fl_WaveDisplay : public Fl_Widget ~Fl_WaveDisplay(); virtual void draw(); virtual int handle(int event); - void SetSample(Sample* s) { m_Sample=s; } + void SetSample(const float* s, long len); long GetRangeStart() { return m_StartPos; } long GetRangeEnd() { return m_EndPos; } long GetViewStart() { return m_ViewStart; } @@ -52,6 +52,7 @@ class Fl_WaveDisplay : public Fl_Widget void SetPosMarker(bool s) { m_PosMarker=s; } private: + Sample *m_Sample; long m_StartPos; long m_EndPos; @@ -70,17 +71,19 @@ class Fl_WaveDisplay : public Fl_Widget class PoshSamplerPluginGUI : public SpiralPluginGUI { public: - PoshSamplerPluginGUI(int w, int h, PoshSamplerPlugin *o,const HostInfo *Info); + PoshSamplerPluginGUI(int w, int h, PoshSamplerPlugin *o,ChannelHandler *ch, const HostInfo *Info); - virtual void UpdateValues(); - virtual SpiralPlugin* GetPlugin() { return m_Plugin; } + virtual void UpdateValues(SpiralPlugin *o); + virtual void draw(); void SetPlayPos(long s) { m_Display->SetPlayPos(s); } int GetCurrentSample() { return (int)m_SampleNum->value(); } - PoshSamplerPlugin *m_Plugin; private: - + + void UpdateSampleDisplay(int num); + + char m_TextBuf[256]; int Numbers[NUM_SAMPLES]; Fl_Button* m_Load; diff --git a/SpiralSound/Plugins/RingModPlugin/Makefile.in b/SpiralSound/Plugins/RingModPlugin/Makefile.in index 48c4ada..b8fad73 100644 --- a/SpiralSound/Plugins/RingModPlugin/Makefile.in +++ b/SpiralSound/Plugins/RingModPlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \ RingModPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \ RingModPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -164,3 +167,5 @@ RingModPluginGUI.o: RingModPluginGUI.C \ ../Widgets/Fl_DragBar.H \ ../Widgets/Fl_Knob.H +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/RingModPlugin/RingModPlugin.C b/SpiralSound/Plugins/RingModPlugin/RingModPlugin.C index a571bb8..0bc8ca7 100644 --- a/SpiralSound/Plugins/RingModPlugin/RingModPlugin.C +++ b/SpiralSound/Plugins/RingModPlugin/RingModPlugin.C @@ -51,6 +51,8 @@ m_Amount(1.0f) m_PluginInfo.PortTips.push_back("Input 1"); m_PluginInfo.PortTips.push_back("Input 2"); m_PluginInfo.PortTips.push_back("Output"); + + m_AudioCH->Register("Amount",&m_Amount); } RingModPlugin::~RingModPlugin() @@ -64,11 +66,9 @@ PluginInfo &RingModPlugin::Initialise(const HostInfo *Host) SpiralGUIType *RingModPlugin::CreateGUI() { - m_GUI = new RingModPluginGUI(m_PluginInfo.Width, + return new RingModPluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, - this,m_HostInfo); - m_GUI->hide(); - return m_GUI; + this,m_AudioCH,m_HostInfo); } void RingModPlugin::Execute() diff --git a/SpiralSound/Plugins/RingModPlugin/RingModPlugin.h b/SpiralSound/Plugins/RingModPlugin/RingModPlugin.h index d33c361..9a4946e 100644 --- a/SpiralSound/Plugins/RingModPlugin/RingModPlugin.h +++ b/SpiralSound/Plugins/RingModPlugin/RingModPlugin.h @@ -33,11 +33,7 @@ public: virtual void Execute(); virtual void StreamOut(ostream &s); virtual void StreamIn(istream &s); - - // has to be defined in the plugin - virtual void UpdateGUI() { Fl::check(); } - - void SetAmount(float s) { m_Amount=s; } + float GetAmount() { return m_Amount; } void Randomise(); diff --git a/SpiralSound/Plugins/RingModPlugin/RingModPluginGUI.C b/SpiralSound/Plugins/RingModPlugin/RingModPluginGUI.C index d30e042..7e645ce 100644 --- a/SpiralSound/Plugins/RingModPlugin/RingModPluginGUI.C +++ b/SpiralSound/Plugins/RingModPlugin/RingModPluginGUI.C @@ -26,11 +26,9 @@ static const int GUIBG2_COLOUR = 145; //////////////////////////////////////////// -RingModPluginGUI::RingModPluginGUI(int w, int h,RingModPlugin *o,const HostInfo *Info) : -SpiralPluginGUI(w,h,o) +RingModPluginGUI::RingModPluginGUI(int w, int h,RingModPlugin *o,ChannelHandler *ch,const HostInfo *Info) : +SpiralPluginGUI(w,h,o,ch) { - m_Plugin=o; - m_Amount = new Fl_Knob(34, 24, 50, 50, "Amount"); m_Amount->color(GUI_COLOUR); m_Amount->type(Fl_Knob::DOTLIN); @@ -43,14 +41,15 @@ SpiralPluginGUI(w,h,o) end(); } -void RingModPluginGUI::UpdateValues() +void RingModPluginGUI::UpdateValues(SpiralPlugin *o) { - m_Amount->value(m_Plugin->GetAmount()); + RingModPlugin* Plugin = (RingModPlugin*)o; + m_Amount->value(Plugin->GetAmount()); } inline void RingModPluginGUI::cb_Amount_i(Fl_Knob* o, void* v) { - m_Plugin->SetAmount(o->value()); + m_GUICH->Set("Amount",o->value()); } void RingModPluginGUI::cb_Amount(Fl_Knob* o, void* v) { ((RingModPluginGUI*)(o->parent()))->cb_Amount_i(o,v); } diff --git a/SpiralSound/Plugins/RingModPlugin/RingModPluginGUI.h b/SpiralSound/Plugins/RingModPlugin/RingModPluginGUI.h index 5120d43..bffd487 100644 --- a/SpiralSound/Plugins/RingModPlugin/RingModPluginGUI.h +++ b/SpiralSound/Plugins/RingModPlugin/RingModPluginGUI.h @@ -32,12 +32,9 @@ class RingModPluginGUI : public SpiralPluginGUI { public: - RingModPluginGUI(int w, int h, RingModPlugin *o,const HostInfo *Info); + RingModPluginGUI(int w, int h, RingModPlugin *o,ChannelHandler *ch,const HostInfo *Info); - virtual void UpdateValues(); - virtual SpiralPlugin* GetPlugin() { return m_Plugin; } - - RingModPlugin *m_Plugin; + virtual void UpdateValues(SpiralPlugin *o); private: diff --git a/SpiralSound/Plugins/SVFilterPlugin/Makefile.in b/SpiralSound/Plugins/SVFilterPlugin/Makefile.in index f475e82..4b2c3c7 100644 --- a/SpiralSound/Plugins/SVFilterPlugin/Makefile.in +++ b/SpiralSound/Plugins/SVFilterPlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \ SVFilterPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \ SVFilterPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -164,3 +167,5 @@ SVFilterPluginGUI.o: SVFilterPluginGUI.C \ ../Widgets/Fl_DragBar.H \ ../Widgets/Fl_Knob.H +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/SVFilterPlugin/SVFilterPlugin.C b/SpiralSound/Plugins/SVFilterPlugin/SVFilterPlugin.C index 58889b6..31cade0 100644 --- a/SpiralSound/Plugins/SVFilterPlugin/SVFilterPlugin.C +++ b/SpiralSound/Plugins/SVFilterPlugin/SVFilterPlugin.C @@ -73,6 +73,9 @@ m_n(1.0f) m_PluginInfo.PortTips.push_back("HighPass output"); m_PluginInfo.PortTips.push_back("Notch output"); m_PluginInfo.PortTips.push_back("Peaking output"); + + m_AudioCH->Register("Cutoff",&Cutoff); + m_AudioCH->Register("Resonance",&Resonance); } SVFilterPlugin::~SVFilterPlugin() @@ -88,11 +91,9 @@ PluginInfo &SVFilterPlugin::Initialise(const HostInfo *Host) SpiralGUIType *SVFilterPlugin::CreateGUI() { - m_GUI = new SVFilterPluginGUI(m_PluginInfo.Width, + return new SVFilterPluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, - this,m_HostInfo); - m_GUI->hide(); - return m_GUI; + this,m_AudioCH,m_HostInfo); } void SVFilterPlugin::Execute() diff --git a/SpiralSound/Plugins/SVFilterPlugin/SVFilterPlugin.h b/SpiralSound/Plugins/SVFilterPlugin/SVFilterPlugin.h index 02b409c..2a11586 100644 --- a/SpiralSound/Plugins/SVFilterPlugin/SVFilterPlugin.h +++ b/SpiralSound/Plugins/SVFilterPlugin/SVFilterPlugin.h @@ -37,11 +37,6 @@ public: virtual void StreamOut(ostream &s); virtual void StreamIn(istream &s); - // has to be defined in the plugin - virtual void UpdateGUI() { Fl::check(); } - - void SetCutoff(float s) { Cutoff=s; } - void SetResonance(float s) { Resonance=s; } float GetCutoff() { return Cutoff; } float GetResonance() { return Resonance; } diff --git a/SpiralSound/Plugins/SVFilterPlugin/SVFilterPluginGUI.C b/SpiralSound/Plugins/SVFilterPlugin/SVFilterPluginGUI.C index 19024cc..0d9e15c 100644 --- a/SpiralSound/Plugins/SVFilterPlugin/SVFilterPluginGUI.C +++ b/SpiralSound/Plugins/SVFilterPlugin/SVFilterPluginGUI.C @@ -26,11 +26,9 @@ static const int GUIBG2_COLOUR = 145; //////////////////////////////////////////// -SVFilterPluginGUI::SVFilterPluginGUI(int w, int h,SVFilterPlugin *o,const HostInfo *Info) : -SpiralPluginGUI(w,h,o) +SVFilterPluginGUI::SVFilterPluginGUI(int w, int h,SVFilterPlugin *o,ChannelHandler *ch,const HostInfo *Info) : +SpiralPluginGUI(w,h,o,ch) { - m_Plugin=o; - Cutoff = new Fl_Slider(15, 20, 20, 70, "Cutoff"); Cutoff->type(4); Cutoff->selection_color(GUI_COLOUR); @@ -56,27 +54,29 @@ SpiralPluginGUI(w,h,o) end(); } -void SVFilterPluginGUI::UpdateValues() +void SVFilterPluginGUI::UpdateValues(SpiralPlugin *o) { - Cutoff->value(100.0f-sqrt(m_Plugin->GetCutoff()-10.0f)); - Resonance->value(m_Plugin->GetResonance()-1.0f); + SVFilterPlugin *Plugin = (SVFilterPlugin*)o; + + Cutoff->value(100.0f-sqrt(Plugin->GetCutoff()-10.0f)); + Resonance->value(Plugin->GetResonance()-1.0f); } inline void SVFilterPluginGUI::cb_Cutoff_i(Fl_Slider* o, void* v) { float value=1.0f-o->value(); // m_Plugin->SetCutoff((value*value)+10.0f); - m_Plugin->SetCutoff(value); + 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_Plugin->SetResonance(o->value()); } +{ m_GUICH->Set("Resonance",o->value()); } void SVFilterPluginGUI::cb_Resonance(Fl_Knob* o, void* v) { ((SVFilterPluginGUI*)(o->parent()))->cb_Resonance_i(o,v); } inline void SVFilterPluginGUI::cb_Reset_i(Fl_Button* o, void* v) -{ m_Plugin->Clear(); } +{ } void SVFilterPluginGUI::cb_Reset(Fl_Button* o, void* v) { ((SVFilterPluginGUI*)(o->parent()))->cb_Reset_i(o,v); } diff --git a/SpiralSound/Plugins/SVFilterPlugin/SVFilterPluginGUI.h b/SpiralSound/Plugins/SVFilterPlugin/SVFilterPluginGUI.h index 031b795..3f69328 100644 --- a/SpiralSound/Plugins/SVFilterPlugin/SVFilterPluginGUI.h +++ b/SpiralSound/Plugins/SVFilterPlugin/SVFilterPluginGUI.h @@ -32,12 +32,9 @@ class SVFilterPluginGUI : public SpiralPluginGUI { public: - SVFilterPluginGUI(int w, int h, SVFilterPlugin *o,const HostInfo *Info); + SVFilterPluginGUI(int w, int h, SVFilterPlugin *o,ChannelHandler *ch,const HostInfo *Info); - virtual void UpdateValues(); - virtual SpiralPlugin* GetPlugin() { return m_Plugin; } - - SVFilterPlugin *m_Plugin; + virtual void UpdateValues(SpiralPlugin *o); private: diff --git a/SpiralSound/Plugins/SampleHoldPlugin/Makefile.in b/SpiralSound/Plugins/SampleHoldPlugin/Makefile.in index 2ad9cc0..c243479 100644 --- a/SpiralSound/Plugins/SampleHoldPlugin/Makefile.in +++ b/SpiralSound/Plugins/SampleHoldPlugin/Makefile.in @@ -44,6 +44,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -51,6 +52,7 @@ HEADERS = ../SpiralPlugin.h \ SampleHoldPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -58,6 +60,7 @@ SOURCES = ../SpiralPlugin.C \ SampleHoldPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -167,3 +170,5 @@ SampleHoldPluginGUI.o: SampleHoldPluginGUI.C \ ../SpiralPluginGUI.h \ ../Widgets/Fl_DragBar.H +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/SampleHoldPlugin/SampleHoldPlugin.C b/SpiralSound/Plugins/SampleHoldPlugin/SampleHoldPlugin.C index e5b189e..14c45bb 100644 --- a/SpiralSound/Plugins/SampleHoldPlugin/SampleHoldPlugin.C +++ b/SpiralSound/Plugins/SampleHoldPlugin/SampleHoldPlugin.C @@ -65,8 +65,7 @@ PluginInfo &SampleHoldPlugin::Initialise(const HostInfo *Host) SpiralGUIType *SampleHoldPlugin::CreateGUI() { - m_GUI=NULL; - return m_GUI; + return NULL; } void SampleHoldPlugin::Execute() diff --git a/SpiralSound/Plugins/SampleHoldPlugin/SampleHoldPlugin.h b/SpiralSound/Plugins/SampleHoldPlugin/SampleHoldPlugin.h index 8cf6372..c4150b2 100644 --- a/SpiralSound/Plugins/SampleHoldPlugin/SampleHoldPlugin.h +++ b/SpiralSound/Plugins/SampleHoldPlugin/SampleHoldPlugin.h @@ -34,9 +34,6 @@ public: virtual void StreamOut(ostream &s) {} virtual void StreamIn(istream &s) {} - // has to be defined in the plugin - virtual void UpdateGUI() { Fl::check(); } - private: float m_val; short m_flag; diff --git a/SpiralSound/Plugins/SampleHoldPlugin/SampleHoldPluginGUI.C b/SpiralSound/Plugins/SampleHoldPlugin/SampleHoldPluginGUI.C index 0b12fa7..aaf1428 100644 --- a/SpiralSound/Plugins/SampleHoldPlugin/SampleHoldPluginGUI.C +++ b/SpiralSound/Plugins/SampleHoldPlugin/SampleHoldPluginGUI.C @@ -26,16 +26,15 @@ static const int GUIBG2_COLOUR = 145; //////////////////////////////////////////// -SampleHoldPluginGUI::SampleHoldPluginGUI(int w, int h,SampleHoldPlugin *o,const HostInfo *Info) : -SpiralPluginGUI(w,h,o) +SampleHoldPluginGUI::SampleHoldPluginGUI(int w, int h,SampleHoldPlugin *o,ChannelHandler *ch,const HostInfo *Info) : +SpiralPluginGUI(w,h,o,ch) { - m_Plugin=o; end(); } -void SampleHoldPluginGUI::UpdateValues() +void SampleHoldPluginGUI::UpdateValues(SpiralPlugin *o) { } diff --git a/SpiralSound/Plugins/SampleHoldPlugin/SampleHoldPluginGUI.h b/SpiralSound/Plugins/SampleHoldPlugin/SampleHoldPluginGUI.h index 0ae1fbf..339088d 100644 --- a/SpiralSound/Plugins/SampleHoldPlugin/SampleHoldPluginGUI.h +++ b/SpiralSound/Plugins/SampleHoldPlugin/SampleHoldPluginGUI.h @@ -33,12 +33,10 @@ class SampleHoldPluginGUI : public SpiralPluginGUI { public: - SampleHoldPluginGUI(int w, int h, SampleHoldPlugin *o,const HostInfo *Info); + SampleHoldPluginGUI(int w, int h, SampleHoldPlugin *o,ChannelHandler *ch,const HostInfo *Info); - virtual void UpdateValues(); - virtual SpiralPlugin* GetPlugin() { return m_Plugin; } - - SampleHoldPlugin *m_Plugin; + virtual void UpdateValues(SpiralPlugin *o); + private: //// Callbacks //// diff --git a/SpiralSound/Plugins/SamplerPlugin/Makefile.in b/SpiralSound/Plugins/SamplerPlugin/Makefile.in index 2651a11..030a363 100644 --- a/SpiralSound/Plugins/SamplerPlugin/Makefile.in +++ b/SpiralSound/Plugins/SamplerPlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -51,6 +52,7 @@ HEADERS = ../SpiralPlugin.h \ SamplerPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -59,6 +61,7 @@ SOURCES = ../SpiralPlugin.C \ SamplerPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -174,3 +177,5 @@ SamplerPluginGUI.o: SamplerPluginGUI.C \ ../Widgets/Fl_DragBar.H \ ../Widgets/Fl_Knob.H +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/ScopePlugin/Makefile.in b/SpiralSound/Plugins/ScopePlugin/Makefile.in index ed84711..eaa5072 100644 --- a/SpiralSound/Plugins/ScopePlugin/Makefile.in +++ b/SpiralSound/Plugins/ScopePlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \ ScopePluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \ ScopePluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -166,3 +169,5 @@ ScopePluginGUI.o: ScopePluginGUI.C \ ../SpiralPluginGUI.h \ ../Widgets/Fl_DragBar.H +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/ScopePlugin/ScopePlugin.C b/SpiralSound/Plugins/ScopePlugin/ScopePlugin.C index ce662a0..d71766b 100644 --- a/SpiralSound/Plugins/ScopePlugin/ScopePlugin.C +++ b/SpiralSound/Plugins/ScopePlugin/ScopePlugin.C @@ -20,8 +20,8 @@ #include #include "SpiralIcon.xpm" - -extern "C" { +extern "C" +{ SpiralPlugin* CreateInstance() { return new ScopePlugin; @@ -58,16 +58,18 @@ ScopePlugin::~ScopePlugin() PluginInfo &ScopePlugin::Initialise(const HostInfo *Host) { PluginInfo& Info = SpiralPlugin::Initialise(Host); + m_Data = new float[Host->BUFSIZE]; + m_AudioCH->RegisterData("AudioData",ChannelHandler::OUTPUT,m_Data,Host->BUFSIZE*sizeof(float)); return Info; } SpiralGUIType *ScopePlugin::CreateGUI() { - m_GUI = new ScopePluginGUI(m_PluginInfo.Width, + return new ScopePluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, - this,m_HostInfo); - m_GUI->hide(); - return m_GUI; + this, + m_AudioCH, + m_HostInfo); } void ScopePlugin::Execute() @@ -76,6 +78,9 @@ void ScopePlugin::Execute() if (GetOutputBuf(0)) GetOutputBuf(0)->Zero(); if (GetInput(0)) GetOutputBuf(0)->Mix(*GetInput(0),0); - m_GUI->redraw(); + if (GetInput(0)) + { + //cerr<<1<<" "<BUFSIZE<GetBuffer(),m_HostInfo->BUFSIZE*sizeof(float)); + } } - diff --git a/SpiralSound/Plugins/ScopePlugin/ScopePlugin.h b/SpiralSound/Plugins/ScopePlugin/ScopePlugin.h index 2a40534..584fd0c 100644 --- a/SpiralSound/Plugins/ScopePlugin/ScopePlugin.h +++ b/SpiralSound/Plugins/ScopePlugin/ScopePlugin.h @@ -29,15 +29,14 @@ public: virtual ~ScopePlugin(); virtual PluginInfo& Initialise(const HostInfo *Host); - virtual SpiralGUIType* CreateGUI(); + virtual SpiralGUIType* CreateGUI(); virtual void Execute(); virtual void StreamOut(ostream &s) {} virtual void StreamIn(istream &s) {} - // has to be defined in the plugin - virtual void UpdateGUI() { Fl::check(); } - private: + + float *m_Data; }; #endif diff --git a/SpiralSound/Plugins/ScopePlugin/ScopePluginGUI.C b/SpiralSound/Plugins/ScopePlugin/ScopePluginGUI.C index 9843eff..340217e 100644 --- a/SpiralSound/Plugins/ScopePlugin/ScopePluginGUI.C +++ b/SpiralSound/Plugins/ScopePlugin/ScopePluginGUI.C @@ -30,8 +30,13 @@ m_Data(NULL), m_Channels(1), m_Bufsize(BUFSIZE) { + m_Data = new float[BUFSIZE]; } +ScopeWidget::~ScopeWidget() +{ + delete[] m_Data; +} void ScopeWidget::draw() { @@ -44,14 +49,14 @@ void ScopeWidget::draw() float Value=0,NextValue=0; fl_color(FL_WHITE); - for(int n=0; nBUFSIZE); Bypass = new Fl_Button(175, 107, 40, 16, "Bypass"); Bypass->labelsize(10); @@ -75,25 +78,20 @@ m_Bypass(false) void ScopePluginGUI::Display(const float *data) { - m_Scope->m_Data=data; + //m_Scope->m_Data=data; if (!m_Bypass) m_Scope->redraw(); } void ScopePluginGUI::draw() { SpiralGUIType::draw(); - - if (m_Plugin->GetInput(0)!=NULL) - { - Display(m_Plugin->GetInput(0)->GetBuffer()); - } - else - { - Display(NULL); - } + const float *data; + //cerr<<"getting and drawing..."<GetData("AudioData",(void*)m_Scope->m_Data); + Display(data); } -void ScopePluginGUI::UpdateValues() +void ScopePluginGUI::UpdateValues(SpiralPlugin* o) { } diff --git a/SpiralSound/Plugins/ScopePlugin/ScopePluginGUI.h b/SpiralSound/Plugins/ScopePlugin/ScopePluginGUI.h index 9895a5e..3c587b7 100644 --- a/SpiralSound/Plugins/ScopePlugin/ScopePluginGUI.h +++ b/SpiralSound/Plugins/ScopePlugin/ScopePluginGUI.h @@ -33,6 +33,7 @@ class ScopeWidget : public Fl_Widget { public: ScopeWidget(int x,int y,int w,int h,const char *l, int BUFSIZE); + ~ScopeWidget(); void draw(); void SetNumChannels(int s) {m_Channels=s;} @@ -50,14 +51,12 @@ private: class ScopePluginGUI : public SpiralPluginGUI { public: - ScopePluginGUI(int w, int h, ScopePlugin *o,const HostInfo *Info); + ScopePluginGUI(int w, int h, SpiralPlugin *o, ChannelHandler *ch, const HostInfo *Info); - virtual void UpdateValues(); + virtual void UpdateValues(SpiralPlugin* o); virtual void draw(); void Display(const float *data); - virtual SpiralPlugin* GetPlugin() { return m_Plugin; } - ScopePlugin *m_Plugin; private: bool m_Bypass; diff --git a/SpiralSound/Plugins/SeqPlugin/Makefile.in b/SpiralSound/Plugins/SeqPlugin/Makefile.in index 3a0ff1c..fe2d54f 100644 --- a/SpiralSound/Plugins/SeqPlugin/Makefile.in +++ b/SpiralSound/Plugins/SeqPlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../Widgets/Fl_EventMap.h \ @@ -53,6 +54,7 @@ HEADERS = ../SpiralPlugin.h \ SeqPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../Widgets/Fl_EventMap.C \ @@ -63,6 +65,7 @@ SOURCES = ../SpiralPlugin.C \ SeqPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../Widgets/Fl_EventMap.o \ @@ -192,3 +195,5 @@ SeqPluginGUI.o: SeqPluginGUI.C \ ../Widgets/Fl_DragBar.H \ ../Widgets/Fl_Knob.H +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/SeqSelectorPlugin/Makefile.in b/SpiralSound/Plugins/SeqSelectorPlugin/Makefile.in index 671bf54..83973a1 100644 --- a/SpiralSound/Plugins/SeqSelectorPlugin/Makefile.in +++ b/SpiralSound/Plugins/SeqSelectorPlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -51,6 +52,7 @@ HEADERS = ../SpiralPlugin.h \ SeqSelectorPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -59,6 +61,7 @@ SOURCES = ../SpiralPlugin.C \ SeqSelectorPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -171,3 +174,5 @@ SeqSelectorPluginGUI.o: SeqSelectorPluginGUI.C \ ../SpiralPluginGUI.h \ ../Widgets/Fl_DragBar.H +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/SmoothPlugin/Makefile.in b/SpiralSound/Plugins/SmoothPlugin/Makefile.in index 1a3bda3..411b6b0 100644 --- a/SpiralSound/Plugins/SmoothPlugin/Makefile.in +++ b/SpiralSound/Plugins/SmoothPlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \ SmoothPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \ SmoothPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -166,3 +169,5 @@ SmoothPluginGUI.o: SmoothPluginGUI.C \ ../SpiralPluginGUI.h \ ../Widgets/Fl_DragBar.H +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/SmoothPlugin/SmoothPlugin.C b/SpiralSound/Plugins/SmoothPlugin/SmoothPlugin.C index a94e6a9..a0f390e 100644 --- a/SpiralSound/Plugins/SmoothPlugin/SmoothPlugin.C +++ b/SpiralSound/Plugins/SmoothPlugin/SmoothPlugin.C @@ -51,6 +51,9 @@ m_Value(0) m_PluginInfo.NumOutputs=1; m_PluginInfo.PortTips.push_back("Input"); m_PluginInfo.PortTips.push_back("Output"); + + m_AudioCH->Register("Up",&m_Up); + m_AudioCH->Register("Down",&m_Down); } SmoothPlugin::~SmoothPlugin() @@ -64,11 +67,9 @@ PluginInfo &SmoothPlugin::Initialise(const HostInfo *Host) SpiralGUIType *SmoothPlugin::CreateGUI() { - m_GUI = new SmoothPluginGUI(m_PluginInfo.Width, + return new SmoothPluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, - this,m_HostInfo); - m_GUI->hide(); - return m_GUI; + this,m_AudioCH,m_HostInfo); } void SmoothPlugin::Execute() diff --git a/SpiralSound/Plugins/SmoothPlugin/SmoothPlugin.h b/SpiralSound/Plugins/SmoothPlugin/SmoothPlugin.h index 3bee0f5..6edbeed 100644 --- a/SpiralSound/Plugins/SmoothPlugin/SmoothPlugin.h +++ b/SpiralSound/Plugins/SmoothPlugin/SmoothPlugin.h @@ -34,13 +34,8 @@ public: virtual void StreamOut(ostream &s); virtual void StreamIn(istream &s); - // has to be defined in the plugin - virtual void UpdateGUI() { Fl::check(); } - - void SetUp(float v) { m_Up=v; } float GetUp() { return m_Up; } - void SetDown(float v) { m_Down=v; } - float GetDown() { return m_Down; } + float GetDown() { return m_Down; } private: diff --git a/SpiralSound/Plugins/SmoothPlugin/SmoothPluginGUI.C b/SpiralSound/Plugins/SmoothPlugin/SmoothPluginGUI.C index 2dd97be..099420f 100644 --- a/SpiralSound/Plugins/SmoothPlugin/SmoothPluginGUI.C +++ b/SpiralSound/Plugins/SmoothPlugin/SmoothPluginGUI.C @@ -26,11 +26,9 @@ static const int GUIBG2_COLOUR = 145; //////////////////////////////////////////// -SmoothPluginGUI::SmoothPluginGUI(int w, int h,SmoothPlugin *o,const HostInfo *Info) : -SpiralPluginGUI(w,h,o) +SmoothPluginGUI::SmoothPluginGUI(int w, int h,SmoothPlugin *o,ChannelHandler *ch,const HostInfo *Info) : +SpiralPluginGUI(w,h,o,ch) { - m_Plugin=o; - m_Up = new Fl_Knob(20, 25, 40, 40, "Up"); m_Up->color(GUI_COLOUR); m_Up->type(Fl_Knob::DOTLIN); @@ -56,18 +54,20 @@ SpiralPluginGUI(w,h,o) -void SmoothPluginGUI::UpdateValues() +void SmoothPluginGUI::UpdateValues(SpiralPlugin *o) { - m_Up->value(m_Plugin->GetUp()); - m_Down->value(m_Plugin->GetDown()); + SmoothPlugin *Plugin = (SmoothPlugin*)o; + + m_Up->value(Plugin->GetUp()); + m_Down->value(Plugin->GetDown()); } inline void SmoothPluginGUI::cb_Down_i(Fl_Knob* o, void* v) -{ m_Plugin->SetDown(o->value()); } +{ m_GUICH->Set("Down",o->value()); } void SmoothPluginGUI::cb_Down(Fl_Knob* o, void* v) { ((SmoothPluginGUI*)(o->parent()))->cb_Down_i(o,v);} inline void SmoothPluginGUI::cb_Up_i(Fl_Knob* o, void* v) -{ m_Plugin->SetUp(o->value()); } +{ m_GUICH->Set("Up",o->value()); } void SmoothPluginGUI::cb_Up(Fl_Knob* o, void* v) { ((SmoothPluginGUI*)(o->parent()))->cb_Up_i(o,v);} diff --git a/SpiralSound/Plugins/SmoothPlugin/SmoothPluginGUI.h b/SpiralSound/Plugins/SmoothPlugin/SmoothPluginGUI.h index 4578f29..8ee9eef 100644 --- a/SpiralSound/Plugins/SmoothPlugin/SmoothPluginGUI.h +++ b/SpiralSound/Plugins/SmoothPlugin/SmoothPluginGUI.h @@ -33,12 +33,10 @@ class SmoothPluginGUI : public SpiralPluginGUI { public: - SmoothPluginGUI(int w, int h, SmoothPlugin *o,const HostInfo *Info); + SmoothPluginGUI(int w, int h, SmoothPlugin *o,ChannelHandler *ch,const HostInfo *Info); - virtual void UpdateValues(); - virtual SpiralPlugin* GetPlugin() { return m_Plugin; } - - SmoothPlugin *m_Plugin; + virtual void UpdateValues(SpiralPlugin *o); + private: Fl_Knob* m_Up; diff --git a/SpiralSound/Plugins/SpiralLoopPlugin/Makefile.in b/SpiralSound/Plugins/SpiralLoopPlugin/Makefile.in index 7222878..cb0bb88 100644 --- a/SpiralSound/Plugins/SpiralLoopPlugin/Makefile.in +++ b/SpiralSound/Plugins/SpiralLoopPlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -64,6 +65,7 @@ HEADERS = ../SpiralPlugin.h \ SpiralLoopPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -85,6 +87,7 @@ SOURCES = ../SpiralPlugin.C \ SpiralLoopPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -378,3 +381,5 @@ SpiralLoopPluginGUI.o: SpiralLoopPluginGUI.C \ ../Widgets/Fl_DragBar.H \ ../Widgets/Fl_Knob.H +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/SpiralPlugin.C b/SpiralSound/Plugins/SpiralPlugin.C index 7150f4c..4758628 100644 --- a/SpiralSound/Plugins/SpiralPlugin.C +++ b/SpiralSound/Plugins/SpiralPlugin.C @@ -18,11 +18,9 @@ #include "SpiralPlugin.h" -SpiralPlugin::SpiralPlugin(): -m_GUI(NULL) +SpiralPlugin::SpiralPlugin() { m_Version=1; - m_ValuesChanged=true; m_PluginInfo.Name="BasePlugin"; m_PluginInfo.Width=100; m_PluginInfo.Height=100; @@ -32,6 +30,8 @@ m_GUI(NULL) cb_Update=NULL; m_Parent=NULL; m_HostID=-1; + + m_AudioCH = new ChannelHandler; } SpiralPlugin::~SpiralPlugin() @@ -41,11 +41,7 @@ SpiralPlugin::~SpiralPlugin() delete m_Output[n]; } - //if (m_GUI) - //{ - // m_GUI->hide(); - // delete m_GUI; - //} + delete m_AudioCH; } PluginInfo &SpiralPlugin::Initialise(const HostInfo *Host) @@ -85,14 +81,9 @@ bool SpiralPlugin::SetInput(unsigned int n, const Sample *s) return true; } -bool SpiralPlugin::ValueChanged() -{ - if (m_ValuesChanged) - { - m_ValuesChanged=false; - return true; - } - return false; +void SpiralPlugin::UpdateChannelHandler() +{ + m_AudioCH->UpdateDataNow(); } void SpiralPlugin::AddOutput() diff --git a/SpiralSound/Plugins/SpiralPlugin.h b/SpiralSound/Plugins/SpiralPlugin.h index 055a647..fc11720 100644 --- a/SpiralSound/Plugins/SpiralPlugin.h +++ b/SpiralSound/Plugins/SpiralPlugin.h @@ -17,12 +17,14 @@ */ #include +#include #include #include -#include "../Sample.h" #include #include -#include +#include +#include "../Sample.h" +#include "../ChannelHandler.h" #ifndef SPIRALPLUGIN #define SPIRALPLUGIN @@ -31,6 +33,8 @@ static const float MAX_FREQ = 13000; +class ChannelHander; + struct PluginInfo { string Name; @@ -55,6 +59,10 @@ struct HostInfo int GUI_COLOUR; }; +///////////////////////////////////////////////////////////////////// + +class ChannelHandler; + class SpiralPlugin { public: @@ -62,7 +70,12 @@ public: virtual ~SpiralPlugin(); virtual PluginInfo& Initialise(const HostInfo *Host); + + // execute the audio virtual void Execute()=0; + // run the commands from the GUI + virtual void ExecuteCommands() {} + // create the GUI, do not store the pointer - it wont be threadsafe to use it virtual SpiralGUIType* CreateGUI()=0; // stream the plugins state @@ -72,25 +85,28 @@ public: // stuff here gets saved in filename_files directory // you must return true if this feature is used. virtual bool SaveExternalFiles(const string &Dir) { return false; } - virtual void LoadExternalFiles(const string &Dir) {} + virtual void LoadExternalFiles(const string &Dir) {} const HostInfo* GetHostInfo() { return m_HostInfo; } bool GetOutput(unsigned int n, Sample **s); bool SetInput(unsigned int n, const Sample *s); const Sample* GetInput(unsigned int n) { return m_Input[n]; } string GetName() { return m_PluginInfo.Name; } - - bool ValueChanged(); - void SetValueChanged(bool s) { m_ValuesChanged=s; } void UpdatePluginInfoWithHost(); void SetUpdateInfoCallback(int ID, void(*s)(int, void *)); void SetUpdateCallback(void (*s)(void*,bool m)) { cb_Update=s; } void SetParent(void *s) { m_Parent=s; } void SetInPortType(PluginInfo &pinfo, int port, Sample::SampleType type); - void SetOutPortType(PluginInfo &pinfo, int port, Sample::SampleType type); + void SetOutPortType(PluginInfo &pinfo, int port, Sample::SampleType type); + + void UpdateChannelHandler(); + + ChannelHandler *GetChannelHandler() { return m_AudioCH; } protected: + + ChannelHandler *m_AudioCH; void SetOutput(int n,int p, float s) { if (m_Output[n]) m_Output[n]->Set(p,s); } @@ -123,12 +139,10 @@ protected: Sample* GetOutputBuf(int n) { return m_Output[n]; } - SpiralGUIType *m_GUI; const HostInfo *m_HostInfo; PluginInfo m_PluginInfo; - bool m_ValuesChanged; - int m_Version; - + int m_Version; + // needed for jack void (*cb_Update)(void*o ,bool m); void *m_Parent; diff --git a/SpiralSound/Plugins/SpiralPluginGUI.C b/SpiralSound/Plugins/SpiralPluginGUI.C index cc483c1..5ee737d 100644 --- a/SpiralSound/Plugins/SpiralPluginGUI.C +++ b/SpiralSound/Plugins/SpiralPluginGUI.C @@ -25,14 +25,15 @@ static const int GUI_COLOUR = 154; static const int GUIBG_COLOUR = 144; static const int GUIBG2_COLOUR = 145; -SpiralPluginGUI::SpiralPluginGUI(int w, int h, SpiralPlugin* o) : +SpiralPluginGUI::SpiralPluginGUI(int w, int h, SpiralPlugin* o, ChannelHandler *ch) : SpiralGUIType(0,0,w,h,"") { Fl::visible_focus(false); + m_GUICH = ch; + box(FL_THIN_UP_BOX); - //clear_border(); - m_DragBar = new Fl_DragBar(0,0,w,20,o->GetName().c_str()); + m_DragBar = new Fl_DragBar(0,0,w,20,o->GetName().c_str()); m_DragBar->type(Fl_DragBar::FLDRAG); add(m_DragBar); @@ -48,17 +49,6 @@ SpiralPluginGUI::~SpiralPluginGUI() // Needed to properly remove the window. Fl::check(); } - -// This could be improved. -void SpiralPluginGUI::draw() -{ - if (GetPlugin()->ValueChanged()) - { - UpdateValues(); - } - - SpiralGUIType::draw(); -} //// Callbacks //// diff --git a/SpiralSound/Plugins/SpiralPluginGUI.h b/SpiralSound/Plugins/SpiralPluginGUI.h index cef8c05..523b471 100644 --- a/SpiralSound/Plugins/SpiralPluginGUI.h +++ b/SpiralSound/Plugins/SpiralPluginGUI.h @@ -17,32 +17,33 @@ */ #include -#include +#include #include #include #include #include "Widgets/Fl_DragBar.H" +#include "SpiralPlugin.h" // for the channel handler #ifndef SPIRALPLUGINGUI #define SPIRALPLUGINGUI #define SpiralGUIType Fl_Group - -class SpiralPlugin; - + class SpiralPluginGUI : public SpiralGUIType { public: - SpiralPluginGUI(int w, int h, SpiralPlugin* o); + SpiralPluginGUI(int w, int h, SpiralPlugin* o, ChannelHandler *ch); ~SpiralPluginGUI(); - // Draw also does the job of reassigning the - // data values to the widgets. This could be better. - virtual void draw(); - virtual void UpdateValues() = 0; - virtual SpiralPlugin* GetPlugin() = 0; - + // called while audio thread is suspended, so direct access to the + // spiralplugin is acceptable + virtual void UpdateValues(SpiralPlugin *o)=0; + +protected: + + ChannelHandler *m_GUICH; + private: Fl_DragBar* m_DragBar; Fl_Button* m_Hide; diff --git a/SpiralSound/Plugins/SplitterPlugin/Makefile.in b/SpiralSound/Plugins/SplitterPlugin/Makefile.in index 6c1f25b..9d08100 100644 --- a/SpiralSound/Plugins/SplitterPlugin/Makefile.in +++ b/SpiralSound/Plugins/SplitterPlugin/Makefile.in @@ -44,6 +44,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -51,6 +52,7 @@ HEADERS = ../SpiralPlugin.h \ SplitterPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -58,6 +60,7 @@ SOURCES = ../SpiralPlugin.C \ SplitterPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -167,3 +170,5 @@ SplitterPluginGUI.o: SplitterPluginGUI.C \ ../SpiralPluginGUI.h \ ../Widgets/Fl_DragBar.H +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/SplitterPlugin/SplitterPlugin.C b/SpiralSound/Plugins/SplitterPlugin/SplitterPlugin.C index 210cf36..a647927 100644 --- a/SpiralSound/Plugins/SplitterPlugin/SplitterPlugin.C +++ b/SpiralSound/Plugins/SplitterPlugin/SplitterPlugin.C @@ -64,8 +64,7 @@ PluginInfo &SplitterPlugin::Initialise(const HostInfo *Host) SpiralGUIType *SplitterPlugin::CreateGUI() { - m_GUI=NULL; - return m_GUI; + return NULL; } void SplitterPlugin::Execute() diff --git a/SpiralSound/Plugins/SplitterPlugin/SplitterPlugin.h b/SpiralSound/Plugins/SplitterPlugin/SplitterPlugin.h index d3a4757..9530a33 100644 --- a/SpiralSound/Plugins/SplitterPlugin/SplitterPlugin.h +++ b/SpiralSound/Plugins/SplitterPlugin/SplitterPlugin.h @@ -34,9 +34,6 @@ public: virtual void StreamOut(ostream &s) {} virtual void StreamIn(istream &s) {} - // has to be defined in the plugin - virtual void UpdateGUI() { Fl::check(); } - private: }; diff --git a/SpiralSound/Plugins/SplitterPlugin/SplitterPluginGUI.C b/SpiralSound/Plugins/SplitterPlugin/SplitterPluginGUI.C index e2850fc..f3868ec 100644 --- a/SpiralSound/Plugins/SplitterPlugin/SplitterPluginGUI.C +++ b/SpiralSound/Plugins/SplitterPlugin/SplitterPluginGUI.C @@ -26,16 +26,15 @@ static const int GUIBG2_COLOUR = 145; //////////////////////////////////////////// -SplitterPluginGUI::SplitterPluginGUI(int w, int h,SplitterPlugin *o,const HostInfo *Info) : -SpiralPluginGUI(w,h,o) +SplitterPluginGUI::SplitterPluginGUI(int w, int h,SplitterPlugin *o,ChannelHandler *ch,const HostInfo *Info) : +SpiralPluginGUI(w,h,o,ch) { - m_Plugin=o; end(); } -void SplitterPluginGUI::UpdateValues() +void SplitterPluginGUI::UpdateValues(SpiralPlugin *o) { } diff --git a/SpiralSound/Plugins/SplitterPlugin/SplitterPluginGUI.h b/SpiralSound/Plugins/SplitterPlugin/SplitterPluginGUI.h index f8dc168..83e220e 100644 --- a/SpiralSound/Plugins/SplitterPlugin/SplitterPluginGUI.h +++ b/SpiralSound/Plugins/SplitterPlugin/SplitterPluginGUI.h @@ -33,12 +33,10 @@ class SplitterPluginGUI : public SpiralPluginGUI { public: - SplitterPluginGUI(int w, int h, SplitterPlugin *o,const HostInfo *Info); + SplitterPluginGUI(int w, int h, SplitterPlugin *o, ChannelHandler *ch, const HostInfo *Info); - virtual void UpdateValues(); - virtual SpiralPlugin* GetPlugin() { return m_Plugin; } - - SplitterPlugin *m_Plugin; + virtual void UpdateValues(SpiralPlugin *o); + private: //// Callbacks //// diff --git a/SpiralSound/Plugins/StereoMixerPlugin/Makefile.in b/SpiralSound/Plugins/StereoMixerPlugin/Makefile.in index 806f476..bedf936 100644 --- a/SpiralSound/Plugins/StereoMixerPlugin/Makefile.in +++ b/SpiralSound/Plugins/StereoMixerPlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \ StereoMixerPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \ StereoMixerPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -166,3 +169,5 @@ StereoMixerPluginGUI.o: StereoMixerPluginGUI.C \ ../SpiralPluginGUI.h \ ../Widgets/Fl_DragBar.H +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/StereoMixerPlugin/StereoMixerPlugin.C b/SpiralSound/Plugins/StereoMixerPlugin/StereoMixerPlugin.C index 0f20407..a95d550 100644 --- a/SpiralSound/Plugins/StereoMixerPlugin/StereoMixerPlugin.C +++ b/SpiralSound/Plugins/StereoMixerPlugin/StereoMixerPlugin.C @@ -62,6 +62,9 @@ StereoMixerPlugin::StereoMixerPlugin() m_ChannelVal[n]=1.0f; m_Pan[n]=0.5f; } + + m_AudioCH->Register("Num",&m_GUIArgs.Num); + m_AudioCH->Register("Value",&m_GUIArgs.Value); } StereoMixerPlugin::~StereoMixerPlugin() @@ -75,11 +78,9 @@ PluginInfo &StereoMixerPlugin::Initialise(const HostInfo *Host) SpiralGUIType *StereoMixerPlugin::CreateGUI() { - m_GUI = new StereoMixerPluginGUI(m_PluginInfo.Width, + return new StereoMixerPluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, - this,m_HostInfo); - m_GUI->hide(); - return m_GUI; + this,m_AudioCH,m_HostInfo); } void StereoMixerPlugin::Execute() @@ -111,6 +112,18 @@ void StereoMixerPlugin::Execute() } } +void StereoMixerPlugin::ExecuteCommands() +{ + if (m_AudioCH->IsCommandWaiting()) + { + switch (m_AudioCH->GetCommand()) + { + case (SETCH) : SetChannel(m_GUIArgs.Num,m_GUIArgs.Value); break; + case (SETPAN) : SetPan(m_GUIArgs.Num,m_GUIArgs.Value); break; + } + } +} + void StereoMixerPlugin::StreamOut(ostream &s) { s<value (2.0f - m_Plugin->GetChannel (n)); - // This line used to be - // m_Pan[n]->value (m_Plugin->GetChannel (n)); - // And that definately fixes the problem - m_Pan[n]->value (m_Plugin->GetPan (n)); + m_Chan[n]->value (2.0f - Plugin->GetChannel (n)); + m_Pan[n]->value (Plugin->GetPan (n)); } } inline void StereoMixerPluginGUI::cb_Chan_i(Fl_Slider* o, void* v) { - m_Plugin->SetChannel(*(int*)(v),2.0f-o->value()); + m_GUICH->Set("Num",*(int*)(v)); + m_GUICH->Set("Value",(float)(2.0f-o->value())); + m_GUICH->SetCommand(StereoMixerPlugin::SETCH); } void StereoMixerPluginGUI::cb_Chan(Fl_Slider* o, void* v) { @@ -83,7 +83,9 @@ void StereoMixerPluginGUI::cb_Chan(Fl_Slider* o, void* v) { } inline void StereoMixerPluginGUI::cb_Pan_i(Fl_Knob* o, void* v) { - m_Plugin->SetPan(*(int*)(v),o->value()); + m_GUICH->Set("Num",*(int*)(v)); + m_GUICH->Set("Value",(float)(2.0f-o->value())); + m_GUICH->SetCommand(StereoMixerPlugin::SETPAN); } void StereoMixerPluginGUI::cb_Pan(Fl_Knob* o, void* v) { diff --git a/SpiralSound/Plugins/StereoMixerPlugin/StereoMixerPluginGUI.h b/SpiralSound/Plugins/StereoMixerPlugin/StereoMixerPluginGUI.h index 5a63ad9..262ae6a 100644 --- a/SpiralSound/Plugins/StereoMixerPlugin/StereoMixerPluginGUI.h +++ b/SpiralSound/Plugins/StereoMixerPlugin/StereoMixerPluginGUI.h @@ -32,12 +32,9 @@ class StereoMixerPluginGUI : public SpiralPluginGUI { public: - StereoMixerPluginGUI(int w, int h, StereoMixerPlugin *o,const HostInfo *Info); + StereoMixerPluginGUI(int w, int h, StereoMixerPlugin *o,ChannelHandler *ch,const HostInfo *Info); + virtual void UpdateValues(SpiralPlugin *o); - virtual void UpdateValues(); - virtual SpiralPlugin* GetPlugin() { return m_Plugin; } - - StereoMixerPlugin *m_Plugin; private: int Numbers[NUM_CHANNELS]; diff --git a/SpiralSound/Plugins/StreamPlugin/Makefile.in b/SpiralSound/Plugins/StreamPlugin/Makefile.in index 5cc2a52..832e931 100644 --- a/SpiralSound/Plugins/StreamPlugin/Makefile.in +++ b/SpiralSound/Plugins/StreamPlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../Widgets/Fl_SevenSeg.H \ @@ -52,6 +53,7 @@ HEADERS = ../SpiralPlugin.h \ StreamPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../Widgets/Fl_SevenSeg.cxx \ @@ -61,6 +63,7 @@ SOURCES = ../SpiralPlugin.C \ StreamPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../Widgets/Fl_SevenSeg.o \ @@ -182,3 +185,5 @@ StreamPluginGUI.o: StreamPluginGUI.C \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_SevenSeg.H +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/WaveShaperPlugin/Makefile.in b/SpiralSound/Plugins/WaveShaperPlugin/Makefile.in index 35f37ea..80c12ba 100644 --- a/SpiralSound/Plugins/WaveShaperPlugin/Makefile.in +++ b/SpiralSound/Plugins/WaveShaperPlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \ WaveShaperPluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \ WaveShaperPluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -168,3 +171,5 @@ WaveShaperPluginGUI.o: WaveShaperPluginGUI.C \ ../SpiralPluginGUI.h \ ../Widgets/Fl_DragBar.H +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/WaveTablePlugin/Makefile.in b/SpiralSound/Plugins/WaveTablePlugin/Makefile.in index d896548..8d00276 100644 --- a/SpiralSound/Plugins/WaveTablePlugin/Makefile.in +++ b/SpiralSound/Plugins/WaveTablePlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \ WaveTablePluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \ WaveTablePluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -164,3 +167,5 @@ WaveTablePluginGUI.o: WaveTablePluginGUI.C \ ../../SpiralInfo.h \ ../../Sample.h +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/WaveTablePlugin/WaveTablePlugin.C b/SpiralSound/Plugins/WaveTablePlugin/WaveTablePlugin.C index df66210..6ad46e2 100644 --- a/SpiralSound/Plugins/WaveTablePlugin/WaveTablePlugin.C +++ b/SpiralSound/Plugins/WaveTablePlugin/WaveTablePlugin.C @@ -26,7 +26,8 @@ static const int IN_SHLEN = 2; static const int OUT_MAIN = 0; -extern "C" { +extern "C" +{ SpiralPlugin* CreateInstance() { return new WaveTablePlugin; @@ -52,7 +53,6 @@ m_FineFreq(1.0f), m_ModAmount(1.0f), m_TableLength(DEFAULT_TABLE_LEN) { - m_CyclePos=0; m_Note=0; @@ -63,6 +63,11 @@ m_TableLength(DEFAULT_TABLE_LEN) m_PluginInfo.NumOutputs=1; m_PluginInfo.PortTips.push_back("Frequency CV"); m_PluginInfo.PortTips.push_back("Output"); + + m_AudioCH->Register("Octave",&m_Octave,ChannelHandler::INPUT); + m_AudioCH->Register("FineFreq",&m_FineFreq,ChannelHandler::INPUT); + m_AudioCH->Register("Type",(char*)&m_Type,ChannelHandler::INPUT); + m_AudioCH->Register("ModAmount",&m_ModAmount,ChannelHandler::INPUT); } WaveTablePlugin::~WaveTablePlugin() @@ -85,11 +90,7 @@ PluginInfo &WaveTablePlugin::Initialise(const HostInfo *Host) SpiralGUIType *WaveTablePlugin::CreateGUI() { - m_GUI = new WaveTablePluginGUI(m_PluginInfo.Width, - m_PluginInfo.Height, - this,m_HostInfo); - m_GUI->hide(); - return m_GUI; + return new WaveTablePluginGUI(m_PluginInfo.Width,m_PluginInfo.Height,this,m_AudioCH,m_HostInfo); } void WaveTablePlugin::WriteWaves() @@ -170,20 +171,23 @@ void WaveTablePlugin::Execute() { Freq=110; } - + Freq*=m_FineFreq; if (m_Octave>0) Freq*=1<<(m_Octave); if (m_Octave<0) Freq/=1<<(-m_Octave); - + Incr = Freq*(m_TableLength/(float)m_HostInfo->SAMPLERATE); m_CyclePos+=Incr; - while (m_CyclePos>=m_TableLength) m_CyclePos-=m_TableLength; + + while (m_CyclePos>=m_TableLength) + { + m_CyclePos-=m_TableLength; + } if (m_CyclePos<0 || m_CyclePos>=m_TableLength) m_CyclePos=0; SetOutput(OUT_MAIN,n,m_Table[m_Type][m_CyclePos]); } - } void WaveTablePlugin::StreamOut(ostream &s) diff --git a/SpiralSound/Plugins/WaveTablePlugin/WaveTablePlugin.h b/SpiralSound/Plugins/WaveTablePlugin/WaveTablePlugin.h index cd00a36..ed8bdcf 100644 --- a/SpiralSound/Plugins/WaveTablePlugin/WaveTablePlugin.h +++ b/SpiralSound/Plugins/WaveTablePlugin/WaveTablePlugin.h @@ -32,7 +32,7 @@ public: virtual ~WaveTablePlugin(); virtual PluginInfo &Initialise(const HostInfo *Host); - virtual SpiralGUIType *CreateGUI(); + virtual SpiralGUIType *CreateGUI(); virtual void Execute(); virtual void StreamOut(ostream &s); virtual void StreamIn(istream &s); @@ -43,16 +43,12 @@ public: enum Type{SINE,SQUARE,SAW,REVSAW,TRIANGLE,PULSE1,PULSE2,INVSINE}; void WriteWaves(); - void NoteTrigger(int V,int s,int v); - void SetOctave(int o) {m_Octave=o;} - void SetFineFreq(float s) {m_FineFreq=s;} - void SetType(Type t) {m_Type=t;} - void SetModAmount(float s) {m_ModAmount=s;} - int GetOctave() {return m_Octave;} - float GetFineFreq() {return m_FineFreq;} - Type GetType() {return m_Type;} - float GetModAmount() {return m_ModAmount;} + + Type GetType() { return m_Type; } + int GetOctave() { return m_Octave; } + float GetFinefreq() { return m_FineFreq; } + float GetModAmount(){ return m_ModAmount; } private: diff --git a/SpiralSound/Plugins/WaveTablePlugin/WaveTablePluginGUI.C b/SpiralSound/Plugins/WaveTablePlugin/WaveTablePluginGUI.C index 818bc9c..0a4df30 100644 --- a/SpiralSound/Plugins/WaveTablePlugin/WaveTablePluginGUI.C +++ b/SpiralSound/Plugins/WaveTablePlugin/WaveTablePluginGUI.C @@ -224,8 +224,8 @@ static unsigned char *image_InvSine[] = { (unsigned char*)" ", (unsigned char*)" "}; -WaveTablePluginGUI::WaveTablePluginGUI(int w, int h,WaveTablePlugin *o,const HostInfo *Info) : -SpiralPluginGUI(w,h,o), +WaveTablePluginGUI::WaveTablePluginGUI(int w, int h, SpiralPlugin *o, ChannelHandler *ch, const HostInfo *Info) : +SpiralPluginGUI(w,h,o,ch), pixmap_Square(image_Square), pixmap_Saw(image_Saw), pixmap_RevSaw(image_RevSaw), @@ -235,8 +235,6 @@ pixmap_Pulse1(image_Pulse1), pixmap_Pulse2(image_Pulse2), pixmap_InvSine(image_InvSine) { - m_Plugin=o; - ShapeSine = new Fl_Check_Button(5, 15, 55, 30); ShapeSine->type(102); ShapeSine->down_box(FL_DIAMOND_DOWN_BOX); @@ -325,7 +323,7 @@ pixmap_InvSine(image_InvSine) ModAmount->step(0.001); ModAmount->value(1.0); ModAmount->callback((Fl_Callback*)cb_ModAmount); - + m_pop = new Fl_Button(1,h-14, 13, 13, "@>"); m_pop->type(1); m_pop->box(FL_FLAT_BOX); @@ -350,14 +348,16 @@ pixmap_InvSine(image_InvSine) m_out_mod->textsize(10); m_out_mod->hide(); m_out_mod->set_output(); - + end(); } extern "C" int sprintf(char *,const char *,...); -void WaveTablePluginGUI::UpdateValues() +void WaveTablePluginGUI::UpdateValues(SpiralPlugin *o) { + WaveTablePlugin *Plugin = (WaveTablePlugin*)o; + ShapeSquare->value(0); ShapeRevSaw->value(0); ShapeSaw->value(0); @@ -367,7 +367,7 @@ void WaveTablePluginGUI::UpdateValues() Pulse2->value(0); ShapeInvSine->value(0); - switch (m_Plugin->GetType()) + switch (Plugin->GetType()) { case WaveTablePlugin::SQUARE : ShapeSquare->value(1); break; case WaveTablePlugin::SINE : ShapeSine->value(1); break; @@ -379,18 +379,18 @@ void WaveTablePluginGUI::UpdateValues() case WaveTablePlugin::INVSINE : ShapeInvSine->value(1); break; } - Freq->value(m_Plugin->GetOctave()+3); - ModAmount->value(m_Plugin->GetModAmount()); - FineTune->value(sqrt(m_Plugin->GetFineFreq())); + Freq->value(Plugin->GetOctave()); + ModAmount->value(Plugin->GetModAmount()); + FineTune->value(sqrt(Plugin->GetFinefreq())); char str[10]; - float fr = 110.0f * m_Plugin->GetFineFreq(); - int oc = m_Plugin->GetOctave(); + float fr = 110.0f * Plugin->GetFinefreq(); + int oc = Plugin->GetOctave(); if (oc > 0) fr *= 1 << oc; if (oc < 0) fr /= 1 << (-oc); sprintf(str,"%4.1f Hz", fr); m_out_freq->value(str); - sprintf(str,"%4.0f %%", 100*m_Plugin->GetModAmount()); + sprintf(str,"%4.0f %%", 100*Plugin->GetModAmount()); m_out_mod->value(str); } @@ -399,75 +399,76 @@ void WaveTablePluginGUI::UpdateValues() inline void WaveTablePluginGUI::cb_Freq_i(Fl_Knob* o, void* v) { -char str[10]; - m_Plugin->SetOctave((int)o->value()-3); - float fr = 110.0f * m_Plugin->GetFineFreq(); - int oc = m_Plugin->GetOctave(); - if (oc > 0) fr *= 1 << oc; - if (oc < 0) fr /= 1 << (-oc); - sprintf(str,"%4.1f Hz", fr); - m_out_freq->value(str); + char str[10]; + m_GUICH->Set("Octave",(int)o->value()-3); + //float fr = 110.0f * m_Plugin->GetFineFreq(); + //int oc = m_Plugin->GetOctave(); + //if (oc > 0) fr *= 1 << oc; + //if (oc < 0) fr /= 1 << (-oc); + //sprintf(str,"%4.1f Hz", fr); + //m_out_freq->value(str); } void WaveTablePluginGUI::cb_Freq(Fl_Knob* o, void* v) { ((WaveTablePluginGUI*)(o->parent()))->cb_Freq_i(o,v); } inline void WaveTablePluginGUI::cb_FineTune_i(Fl_Knob* o, void* v) -{ char str[10]; - m_Plugin->SetFineFreq(o->value()*o->value()); - float fr = 110.0f * m_Plugin->GetFineFreq(); - int oc = m_Plugin->GetOctave(); - if (oc > 0) fr *= 1 << oc; - if (oc < 0) fr /= 1 << (-oc); - sprintf(str,"%4.1f Hz", fr); - m_out_freq->value(str); +{ + char str[10]; + m_GUICH->Set("FineFreq",(float)(o->value()*o->value())); + //float fr = 110.0f * m_Plugin->GetFineFreq(); + //int oc = m_Plugin->GetOctave(); + //if (oc > 0) fr *= 1 << oc; + //if (oc < 0) fr /= 1 << (-oc); + //sprintf(str,"%4.1f Hz", fr); + //m_out_freq->value(str); } void WaveTablePluginGUI::cb_FineTune(Fl_Knob* o, void* v) { ((WaveTablePluginGUI*)(o->parent()))->cb_FineTune_i(o,v); } inline void WaveTablePluginGUI::cb_Square_i(Fl_Check_Button* o, void* v) -{ m_Plugin->SetType(WaveTablePlugin::SQUARE); } +{ m_GUICH->Set("Type",(char)WaveTablePlugin::SQUARE); } void WaveTablePluginGUI::cb_Square(Fl_Check_Button* o, void* v) { ((WaveTablePluginGUI*)(o->parent()))->cb_Square_i(o,v); } inline void WaveTablePluginGUI::cb_Saw_i(Fl_Check_Button* o, void* v) -{ m_Plugin->SetType(WaveTablePlugin::SAW); } +{ m_GUICH->Set("Type",(char)WaveTablePlugin::SAW); } void WaveTablePluginGUI::cb_Saw(Fl_Check_Button* o, void* v) { ((WaveTablePluginGUI*)(o->parent()))->cb_Saw_i(o,v); } inline void WaveTablePluginGUI::cb_Sine_i(Fl_Check_Button* o, void* v) -{ m_Plugin->SetType(WaveTablePlugin::SINE); } +{ m_GUICH->Set("Type",(char)WaveTablePlugin::SINE); } void WaveTablePluginGUI::cb_Sine(Fl_Check_Button* o, void* v) { ((WaveTablePluginGUI*)(o->parent()))->cb_Sine_i(o,v); } inline void WaveTablePluginGUI::cb_RevSaw_i(Fl_Check_Button* o, void* v) -{ m_Plugin->SetType(WaveTablePlugin::REVSAW); } +{ m_GUICH->Set("Type",(char)WaveTablePlugin::REVSAW); } void WaveTablePluginGUI::cb_RevSaw(Fl_Check_Button* o, void* v) { ((WaveTablePluginGUI*)(o->parent()))->cb_RevSaw_i(o,v); } inline void WaveTablePluginGUI::cb_Tri_i(Fl_Check_Button* o, void* v) -{ m_Plugin->SetType(WaveTablePlugin::TRIANGLE); } +{ m_GUICH->Set("Type",(char)WaveTablePlugin::TRIANGLE); } void WaveTablePluginGUI::cb_Tri(Fl_Check_Button* o, void* v) { ((WaveTablePluginGUI*)(o->parent()))->cb_Tri_i(o,v); } inline void WaveTablePluginGUI::cb_Pulse1_i(Fl_Check_Button* o, void* v) -{ m_Plugin->SetType(WaveTablePlugin::PULSE1); } +{ m_GUICH->Set("Type",(char)WaveTablePlugin::PULSE1); } void WaveTablePluginGUI::cb_Pulse1(Fl_Check_Button* o, void* v) { ((WaveTablePluginGUI*)(o->parent()))->cb_Pulse1_i(o,v); } inline void WaveTablePluginGUI::cb_Pulse2_i(Fl_Check_Button* o, void* v) -{ m_Plugin->SetType(WaveTablePlugin::PULSE2); } +{ m_GUICH->Set("Type",(char)WaveTablePlugin::PULSE2); } void WaveTablePluginGUI::cb_Pulse2(Fl_Check_Button* o, void* v) { ((WaveTablePluginGUI*)(o->parent()))->cb_Pulse2_i(o,v); } inline void WaveTablePluginGUI::cb_InvSine_i(Fl_Check_Button* o, void* v) -{ m_Plugin->SetType(WaveTablePlugin::INVSINE); } +{ m_GUICH->Set("Type",(char)WaveTablePlugin::INVSINE); } void WaveTablePluginGUI::cb_InvSine(Fl_Check_Button* o, void* v) { ((WaveTablePluginGUI*)(o->parent()))->cb_InvSine_i(o,v); } inline void WaveTablePluginGUI::cb_ModAmount_i(Fl_Knob* o, void* v) { char str[10]; - m_Plugin->SetModAmount(o->value()); + m_GUICH->Set("ModAmount",o->value()); sprintf(str,"%4.0f %%", 100*o->value()); m_out_mod->value(str); } @@ -480,20 +481,19 @@ inline void WaveTablePluginGUI::cb_pop_i(Fl_Button *o, void*) { { o->label("@2>"); m_out_freq->show(); - m_out_mod->show(); + m_out_mod->show(); redraw(); } else { o->label("@>"); m_out_freq->hide(); - m_out_mod->hide(); - redraw(); + m_out_mod->hide(); + redraw(); parent()->redraw(); - } } void WaveTablePluginGUI::cb_pop(Fl_Button* o, void* v) { - ((WaveTablePluginGUI*)(o->parent()))->cb_pop_i(o,v); + ((WaveTablePluginGUI*)o->parent())->cb_pop_i(o,v); } diff --git a/SpiralSound/Plugins/WaveTablePlugin/WaveTablePluginGUI.h b/SpiralSound/Plugins/WaveTablePlugin/WaveTablePluginGUI.h index e31722a..ce84290 100644 --- a/SpiralSound/Plugins/WaveTablePlugin/WaveTablePluginGUI.h +++ b/SpiralSound/Plugins/WaveTablePlugin/WaveTablePluginGUI.h @@ -32,13 +32,10 @@ class WaveTablePluginGUI : public SpiralPluginGUI { public: - WaveTablePluginGUI(int w, int h, WaveTablePlugin *o,const HostInfo *Info); + WaveTablePluginGUI(int w, int h, SpiralPlugin *o, ChannelHandler *ch, const HostInfo *Info); - virtual void UpdateValues(); - virtual SpiralPlugin* GetPlugin() { return m_Plugin; } - - WaveTablePlugin *m_Plugin; - + virtual void UpdateValues(SpiralPlugin* o); + private: Fl_Check_Button *ShapeSquare; diff --git a/SpiralSound/Plugins/Widgets/Fl_Knob.H b/SpiralSound/Plugins/Widgets/Fl_Knob.H index f2b5f86..f07051f 100644 --- a/SpiralSound/Plugins/Widgets/Fl_Knob.H +++ b/SpiralSound/Plugins/Widgets/Fl_Knob.H @@ -1,17 +1,18 @@ -// generated by Fast Light User Interface Designer (fluid) version 2.00 +// generated by Fast Light User Interface Designer (fluid) version 1.0100 #ifndef Fl_Knob_H #define Fl_Knob_H #include -#include -#include +#include class Fl_Knob : public Fl_Valuator { public: - enum Fl_Knobtype {DOTLIN=0,DOTLOG_1,DOTLOG_2,DOTLOG_3,LINELIN,LINELOG_1,LINELOG_2,LINELOG_3,NONE}; + enum Fl_Knobtype {DOTLIN=0,DOTLOG_1,DOTLOG_2,DOTLOG_3,LINELIN,LINELOG_1,LINELOG_2,LINELOG_3}; private: int _type; float _percent; + float _capsize; + int _capr,_capg,_capb; int _scaleticks; short a1,a2; public: @@ -20,14 +21,15 @@ public: private: void draw(); int handle(int event); -public: - void type(int ty); -private: void shadow(const int offs,const uchar r,uchar g,uchar b); void draw_scale(const int ox,const int oy,const int side); void draw_cursor(const int ox,const int oy,const int side); public: + void type(int ty); void cursor(const int pc); void scaleticks(const int tck); + void capsize(const float percent); + void capcolor(const Fl_Color col); + void capcolor(const uchar cr,const uchar cg,const uchar cb); }; #endif diff --git a/SpiralSound/Plugins/Widgets/Fl_Knob.cxx b/SpiralSound/Plugins/Widgets/Fl_Knob.cxx index 8bd4189..c70b41f 100644 --- a/SpiralSound/Plugins/Widgets/Fl_Knob.cxx +++ b/SpiralSound/Plugins/Widgets/Fl_Knob.cxx @@ -1,16 +1,20 @@ -// generated by Fast Light User Interface Designer (fluid) version 2.00 +// generated by Fast Light User Interface Designer (fluid) version 1.0100 #include "Fl_Knob.H" -#include +#include #include -#include Fl_Knob::Fl_Knob(int xx,int yy,int ww,int hh,const char *l): Fl_Valuator(xx,yy,ww,hh,l) { - a1 = 35; + int side; + + a1 = 35; a2 = 325; _type = DOTLIN; _percent = 0.3; _scaleticks = 10; + _capr = _capg = _capb = -1; + side = ww > hh ? hh:ww; + _capsize = 100*(float)(side - 10) / (float)side; } Fl_Knob::~Fl_Knob() { @@ -18,6 +22,8 @@ Fl_Knob::~Fl_Knob() { void Fl_Knob::draw() { int ox,oy,ww,hh,side; +int capradius; +int capoffset; float sa,ca,a_r; unsigned char rr,gg,bb; @@ -37,54 +43,93 @@ unsigned char rr,gg,bb; side = ww; oy = oy + (hh - side) / 2; } - side = w() > h () ? hh:ww; + side = ww > hh ? hh:ww; int dam = damage(); + capradius = (int)((side-11) * (_capsize / 100.0)); + capoffset = (side - capradius)/2; if (dam & FL_DAMAGE_ALL) { - int col = parent()->color(); + int col = ((Fl_Widget *)parent())->color(); + // Clear rectangle with parent color fl_color(col); fl_rectf(ox,oy,side,side); + + // Cast round shadow Fl::get_color((Fl_Color)col,rr,gg,bb); shadow(-60,rr,gg,bb); fl_pie(ox+9,oy+9,side-12,side-12,0,360); - if (_type!=NONE) draw_scale(ox,oy,side); + + // Draw ticks + draw_scale(ox,oy,side); col = color(); Fl::get_color((Fl_Color)col,rr,gg,bb); + + // Draw hilights of the button crown + shadow(7,rr,gg,bb); + fl_pie(ox+6,oy+6,side-12,side-12,40,50); + fl_pie(ox+6,oy+6,side-12,side-12,260,270); + shadow(15,rr,gg,bb); - fl_pie(ox+6,oy+6,side-12,side-12,40,80); + fl_pie(ox+6,oy+6,side-12,side-12,50,70); + fl_pie(ox+6,oy+6,side-12,side-12,230,260); + + shadow(25,rr,gg,bb); + fl_pie(ox+6,oy+6,side-12,side-12,70,80); + fl_pie(ox+6,oy+6,side-12,side-12,220,230); + shadow(30,rr,gg,bb); fl_pie(ox+6,oy+6,side-12,side-12,80,220); - shadow(-15,rr,gg,bb); - fl_pie(ox+6,oy+6,side-12,side-12,220,260); - shadow(-30,rr,gg,bb); - fl_pie(ox+6,oy+6,side-12,side-12,260,400); + + shadow(-9,rr,gg,bb); + fl_pie(ox+6,oy+6,side-12,side-12,30,40); + fl_pie(ox+6,oy+6,side-12,side-12,270,280); + + shadow(-18,rr,gg,bb); + fl_pie(ox+6,oy+6,side-12,side-12,280,400); + shadow(-28,rr,gg,bb); + fl_pie(ox+6,oy+6,side-12,side-12,290,390); + fl_color(FL_BLACK); fl_arc(ox+6,oy+6,side-11,side-11,0,360); - fl_color(col); - fl_pie(ox+10,oy+10,side-20,side-20,0,360); - } - else - { - fl_color(color()); - fl_pie(ox+10,oy+10,side-20,side-20,0,360); } Fl::get_color((Fl_Color)color(),rr,gg,bb); + // Draw button cap + if (_capr != -1) + { rr = _capr; gg = _capg; bb = _capb;} + else + Fl::get_color((Fl_Color)color(),rr,gg,bb); + fl_color(rr,gg,bb); + int xx = ox + capoffset; + int yy = oy + capoffset; + int dx = capradius; + fl_pie(xx,yy,dx,dx,0,360); + + // Draw hilights of button cap shadow(10,rr,gg,bb); - fl_pie(ox+10,oy+10,side-20,side-20,110,150); - fl_pie(ox+10,oy+10,side-20,side-20,290,330); + fl_pie(xx,yy,dx,dx,110,150); + fl_pie(xx,yy,dx,dx,290,330); shadow(17,rr,gg,bb); - fl_pie(ox+10,oy+10,side-20,side-20,120,140); - fl_pie(ox+10,oy+10,side-20,side-20,300,320); - shadow(25,rr,gg,bb); - fl_pie(ox+10,oy+10,side-20,side-20,127,133); - fl_pie(ox+10,oy+10,side-20,side-20,307,313); - draw_cursor(ox,oy,side); + fl_pie(xx,yy,dx,dx,120,140); + fl_pie(xx,yy,dx,dx,300,320); + shadow(30,rr,gg,bb); + fl_pie(xx,yy,dx,dx,127,133); + fl_pie(xx,yy,dx,dx,307,313); + + shadow(-7,rr,gg,bb); + fl_pie(xx,yy,dx,dx,50,90); + fl_pie(xx,yy,dx,dx,230,290); + shadow(-15,rr,gg,bb); + fl_pie(xx,yy,dx,dx,65,75); + fl_pie(xx,yy,dx,dx,242,278); + + // Draw the button cursor + draw_cursor(ox+side/2,oy+side/2,dx/2); fl_pop_clip(); } int Fl_Knob::handle(int event) { int ox,oy,ww,hh; - + ox = x() + 10; oy = y() + 10; ww = w() - 20; hh = h()-20; @@ -127,10 +172,6 @@ int Fl_Knob::handle(int event) { return 0; } -void Fl_Knob::type(int ty) { - _type = ty; -} - void Fl_Knob::shadow(const int offs,const uchar r,uchar g,uchar b) { int rr,gg,bb; @@ -148,6 +189,7 @@ void Fl_Knob::shadow(const int offs,const uchar r,uchar g,uchar b) { void Fl_Knob::draw_scale(const int ox,const int oy,const int side) { float x1,y1,x2,y2,rds,cx,cy,ca,sa; +float minv,maxv,curv; rds = side / 2; cx = ox + side / 2; @@ -211,10 +253,12 @@ void Fl_Knob::draw_cursor(const int ox,const int oy,const int side) { float rds,cur,cx,cy; double angle; - rds = (side - 20) / 2.0; +// rds = (side-40) * _capsize / 100.0; +rds=side; cur = _percent * rds / 2; - cx = ox + side / 2; - cy = oy + side / 2; +// cx = ox + side / 2; +// cy = oy + side / 2; +cx = ox;cy = oy; angle = (a2-a1)*(value()-minimum())/(maximum()-minimum()) + a1; fl_push_matrix(); fl_scale(1,1); @@ -252,6 +296,10 @@ double angle; fl_pop_matrix(); } +void Fl_Knob::type(int ty) { + _type = ty; +} + void Fl_Knob::cursor(const int pc) { _percent = (float)pc/100.0; @@ -266,3 +314,24 @@ void Fl_Knob::scaleticks(const int tck) { if (_scaleticks > 31) _scaleticks = 31; if (visible()) damage(FL_DAMAGE_ALL); } + +void Fl_Knob::capsize(const float percent) { + if (percent > 100) return; + if (percent < 40) return; + _capsize = percent; +} + +void Fl_Knob::capcolor(const Fl_Color col) { + uchar rr,gg,bb; + + Fl::get_color(col,rr,gg,bb); + _capr = rr; + _capg = gg; + _capb = bb; +} + +void Fl_Knob::capcolor(const uchar cr,const uchar cg,const uchar cb) { + _capr = cr; + _capg = cg; + _capb = cb; +} diff --git a/SpiralSound/Plugins/Widgets/Fl_Knob.fld b/SpiralSound/Plugins/Widgets/Fl_Knob.fld index df3b717..ccebcf3 100644 --- a/SpiralSound/Plugins/Widgets/Fl_Knob.fld +++ b/SpiralSound/Plugins/Widgets/Fl_Knob.fld @@ -1,14 +1,11 @@ # data file for the Fltk User Interface Designer (fluid) -version 2.00 +version 1.0100 header_name {.H} -code_name {.cxx} -gridx 5 -gridy 5 -snap 3 -decl {\#include } {public +code_name {.cxx} +decl {\#include } {public } -decl {\#include } {} +decl {\#include } {} decl {\#include } {} @@ -18,19 +15,28 @@ class Fl_Knob {open : {public Fl_Valuator} } decl {int _type;} {} decl {float _percent;} {} + decl {float _capsize;} {} + decl {int _capr,_capg,_capb;} {} decl {int _scaleticks;} {} decl {short a1,a2;} {} Function {Fl_Knob(int xx,int yy,int ww,int hh,const char *l=0): Fl_Valuator(xx,yy,ww,hh,l)} {} { - code {a1 = 35; + code {int side; + + a1 = 35; a2 = 325; _type = DOTLIN; _percent = 0.3; - _scaleticks = 10;} {} + _scaleticks = 10; + _capr = _capg = _capb = -1; + side = ww > hh ? hh:ww; + _capsize = 100*(float)(side - 10) / (float)side;} {} } Function {~Fl_Knob()} {} {} Function {draw()} {open private } { code {int ox,oy,ww,hh,side; +int capradius; +int capoffset; float sa,ca,a_r; unsigned char rr,gg,bb; @@ -50,48 +56,87 @@ unsigned char rr,gg,bb; side = ww; oy = oy + (hh - side) / 2; } - side = w() > h () ? hh:ww; + side = ww > hh ? hh:ww; int dam = damage(); + capradius = (int)((side-11) * (_capsize / 100.0)); + capoffset = (side - capradius)/2; if (dam & FL_DAMAGE_ALL) { - int col = parent()->color(); + int col = ((Fl_Widget *)parent())->color(); + // Clear rectangle with parent color fl_color(col); fl_rectf(ox,oy,side,side); + + // Cast round shadow Fl::get_color((Fl_Color)col,rr,gg,bb); shadow(-60,rr,gg,bb); fl_pie(ox+9,oy+9,side-12,side-12,0,360); + + // Draw ticks draw_scale(ox,oy,side); col = color(); Fl::get_color((Fl_Color)col,rr,gg,bb); + + // Draw hilights of the button crown + shadow(7,rr,gg,bb); + fl_pie(ox+6,oy+6,side-12,side-12,40,50); + fl_pie(ox+6,oy+6,side-12,side-12,260,270); + shadow(15,rr,gg,bb); - fl_pie(ox+6,oy+6,side-12,side-12,40,80); + fl_pie(ox+6,oy+6,side-12,side-12,50,70); + fl_pie(ox+6,oy+6,side-12,side-12,230,260); + + shadow(25,rr,gg,bb); + fl_pie(ox+6,oy+6,side-12,side-12,70,80); + fl_pie(ox+6,oy+6,side-12,side-12,220,230); + shadow(30,rr,gg,bb); fl_pie(ox+6,oy+6,side-12,side-12,80,220); - shadow(-15,rr,gg,bb); - fl_pie(ox+6,oy+6,side-12,side-12,220,260); - shadow(-30,rr,gg,bb); - fl_pie(ox+6,oy+6,side-12,side-12,260,400); + + shadow(-9,rr,gg,bb); + fl_pie(ox+6,oy+6,side-12,side-12,30,40); + fl_pie(ox+6,oy+6,side-12,side-12,270,280); + + shadow(-18,rr,gg,bb); + fl_pie(ox+6,oy+6,side-12,side-12,280,400); + shadow(-28,rr,gg,bb); + fl_pie(ox+6,oy+6,side-12,side-12,290,390); + fl_color(FL_BLACK); fl_arc(ox+6,oy+6,side-11,side-11,0,360); - fl_color(col); - fl_pie(ox+10,oy+10,side-20,side-20,0,360); - } - else - { - fl_color(color()); - fl_pie(ox+10,oy+10,side-20,side-20,0,360); } Fl::get_color((Fl_Color)color(),rr,gg,bb); + // Draw button cap + if (_capr != -1) + { rr = _capr; gg = _capg; bb = _capb;} + else + Fl::get_color((Fl_Color)color(),rr,gg,bb); + fl_color(rr,gg,bb); + int xx = ox + capoffset; + int yy = oy + capoffset; + int dx = capradius; + fl_pie(xx,yy,dx,dx,0,360); + + // Draw hilights of button cap shadow(10,rr,gg,bb); - fl_pie(ox+10,oy+10,side-20,side-20,110,150); - fl_pie(ox+10,oy+10,side-20,side-20,290,330); + fl_pie(xx,yy,dx,dx,110,150); + fl_pie(xx,yy,dx,dx,290,330); shadow(17,rr,gg,bb); - fl_pie(ox+10,oy+10,side-20,side-20,120,140); - fl_pie(ox+10,oy+10,side-20,side-20,300,320); - shadow(25,rr,gg,bb); - fl_pie(ox+10,oy+10,side-20,side-20,127,133); - fl_pie(ox+10,oy+10,side-20,side-20,307,313); - draw_cursor(ox,oy,side); + fl_pie(xx,yy,dx,dx,120,140); + fl_pie(xx,yy,dx,dx,300,320); + shadow(30,rr,gg,bb); + fl_pie(xx,yy,dx,dx,127,133); + fl_pie(xx,yy,dx,dx,307,313); + + shadow(-7,rr,gg,bb); + fl_pie(xx,yy,dx,dx,50,90); + fl_pie(xx,yy,dx,dx,230,290); + shadow(-15,rr,gg,bb); + fl_pie(xx,yy,dx,dx,65,75); + fl_pie(xx,yy,dx,dx,242,278); + + // Draw the button cursor + draw_cursor(ox+side/2,oy+side/2,dx/2); fl_pop_clip();} {selected } } @@ -140,9 +185,6 @@ unsigned char rr,gg,bb; } return 0;} {} } - Function {type(int ty)} {} { - code {_type = ty;} {} - } Function {shadow(const int offs,const uchar r,uchar g,uchar b)} {private } { code {int rr,gg,bb; @@ -161,6 +203,7 @@ unsigned char rr,gg,bb; Function {draw_scale(const int ox,const int oy,const int side)} {private } { code {float x1,y1,x2,y2,rds,cx,cy,ca,sa; +float minv,maxv,curv; rds = side / 2; cx = ox + side / 2; @@ -219,15 +262,17 @@ unsigned char rr,gg,bb; } }} {} } - Function {draw_cursor(const int ox,const int oy,const int side)} {private + Function {draw_cursor(const int ox,const int oy,const int side)} {open private } { code {float rds,cur,cx,cy; double angle; - rds = (side - 20) / 2.0; +// rds = (side-40) * _capsize / 100.0; +rds=side; cur = _percent * rds / 2; - cx = ox + side / 2; - cy = oy + side / 2; +// cx = ox + side / 2; +// cy = oy + side / 2; +cx = ox;cy = oy; angle = (a2-a1)*(value()-minimum())/(maximum()-minimum()) + a1; fl_push_matrix(); fl_scale(1,1); @@ -264,6 +309,9 @@ double angle; } fl_pop_matrix();} {} } + Function {type(int ty)} {} { + code {_type = ty;} {} + } Function {cursor(const int pc)} {} { code {_percent = (float)pc/100.0; @@ -277,4 +325,22 @@ double angle; if (_scaleticks > 31) _scaleticks = 31; if (visible()) damage(FL_DAMAGE_ALL);} {} } + Function {capsize(const float percent)} {} { + code {if (percent > 100) return; + if (percent < 40) return; + _capsize = percent;} {} + } + Function {capcolor(const Fl_Color col)} {} { + code {uchar rr,gg,bb; + + Fl::get_color(col,rr,gg,bb); + _capr = rr; + _capg = gg; + _capb = bb;} {} + } + Function {capcolor(const uchar cr,const uchar cg,const uchar cb)} {} { + code {_capr = cr; + _capg = cg; + _capb = cb;} {} + } } diff --git a/SpiralSound/Plugins/XFadePlugin/Makefile.in b/SpiralSound/Plugins/XFadePlugin/Makefile.in index 54e3b4c..4b23c1a 100644 --- a/SpiralSound/Plugins/XFadePlugin/Makefile.in +++ b/SpiralSound/Plugins/XFadePlugin/Makefile.in @@ -43,6 +43,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ + ../../ChannelHandler.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ @@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \ XFadePluginGUI.h SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ + ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ @@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \ XFadePluginGUI.C OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ + ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ @@ -161,3 +164,5 @@ XFadePluginGUI.o: XFadePluginGUI.C \ ../SpiralPluginGUI.h \ ../Widgets/Fl_DragBar.H +../../ChannelHandler.o: ../../ChannelHandler.C \ + ../../ChannelHandler.h diff --git a/SpiralSound/Plugins/XFadePlugin/XFadePlugin.C b/SpiralSound/Plugins/XFadePlugin/XFadePlugin.C index 91f47f4..7e7c66a 100644 --- a/SpiralSound/Plugins/XFadePlugin/XFadePlugin.C +++ b/SpiralSound/Plugins/XFadePlugin/XFadePlugin.C @@ -57,6 +57,8 @@ m_Mix(0.5f) m_PluginInfo.PortTips.push_back("B Right"); m_PluginInfo.PortTips.push_back("Left"); m_PluginInfo.PortTips.push_back("Right"); + + m_AudioCH->Register("Mix",&m_Mix); } XFadePlugin::~XFadePlugin() @@ -70,11 +72,9 @@ PluginInfo &XFadePlugin::Initialise(const HostInfo *Host) SpiralGUIType *XFadePlugin::CreateGUI() { - m_GUI = new XFadePluginGUI(m_PluginInfo.Width, + return new XFadePluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, - this,m_HostInfo); - m_GUI->hide(); - return m_GUI; + this,m_AudioCH,m_HostInfo); } void XFadePlugin::Execute() diff --git a/SpiralSound/Plugins/XFadePlugin/XFadePlugin.h b/SpiralSound/Plugins/XFadePlugin/XFadePlugin.h index 91b0a02..d047319 100644 --- a/SpiralSound/Plugins/XFadePlugin/XFadePlugin.h +++ b/SpiralSound/Plugins/XFadePlugin/XFadePlugin.h @@ -33,11 +33,7 @@ public: virtual void Execute(); virtual void StreamOut(ostream &s); virtual void StreamIn(istream &s); - - // has to be defined in the plugin - virtual void UpdateGUI() { Fl::check(); } - - void SetMix(float s) { m_Mix=s; } + float GetMix() { return m_Mix; } void Randomise(); diff --git a/SpiralSound/Plugins/XFadePlugin/XFadePluginGUI.C b/SpiralSound/Plugins/XFadePlugin/XFadePluginGUI.C index 19020e0..21d4818 100644 --- a/SpiralSound/Plugins/XFadePlugin/XFadePluginGUI.C +++ b/SpiralSound/Plugins/XFadePlugin/XFadePluginGUI.C @@ -26,11 +26,9 @@ static const int GUIBG2_COLOUR = 145; //////////////////////////////////////////// -XFadePluginGUI::XFadePluginGUI(int w, int h,XFadePlugin *o,const HostInfo *Info) : -SpiralPluginGUI(w,h,o) +XFadePluginGUI::XFadePluginGUI(int w, int h,XFadePlugin *o,ChannelHandler *ch,const HostInfo *Info) : +SpiralPluginGUI(w,h,o,ch) { - m_Plugin=o; - m_Mix = new Fl_Slider(5, 20, 200, 20, ""); m_Mix->type(FL_HORIZONTAL); m_Mix->selection_color(GUI_COLOUR); @@ -43,14 +41,15 @@ SpiralPluginGUI(w,h,o) end(); } -void XFadePluginGUI::UpdateValues() +void XFadePluginGUI::UpdateValues(SpiralPlugin *o) { - m_Mix->value(m_Plugin->GetMix()); + XFadePlugin *Plugin = (XFadePlugin*)o; + m_Mix->value(Plugin->GetMix()); } inline void XFadePluginGUI::cb_Mix_i(Fl_Slider* o, void* v) { - m_Plugin->SetMix(o->value()); + m_GUICH->Set("Mix",o->value()); } void XFadePluginGUI::cb_Mix(Fl_Slider* o, void* v) { ((XFadePluginGUI*)(o->parent()))->cb_Mix_i(o,v); } \ No newline at end of file diff --git a/SpiralSound/Plugins/XFadePlugin/XFadePluginGUI.h b/SpiralSound/Plugins/XFadePlugin/XFadePluginGUI.h index 2ef0873..c040875 100644 --- a/SpiralSound/Plugins/XFadePlugin/XFadePluginGUI.h +++ b/SpiralSound/Plugins/XFadePlugin/XFadePluginGUI.h @@ -33,12 +33,9 @@ class XFadePluginGUI : public SpiralPluginGUI { public: - XFadePluginGUI(int w, int h, XFadePlugin *o,const HostInfo *Info); + XFadePluginGUI(int w, int h, XFadePlugin *o,ChannelHandler *ch,const HostInfo *Info); - virtual void UpdateValues(); - virtual SpiralPlugin* GetPlugin() { return m_Plugin; } - - XFadePlugin *m_Plugin; + virtual void UpdateValues(SpiralPlugin *o); private: diff --git a/SpiralSound/Sample.C b/SpiralSound/Sample.C index 6d7766d..88c0094 100644 --- a/SpiralSound/Sample.C +++ b/SpiralSound/Sample.C @@ -43,7 +43,7 @@ m_Length(0) } -Sample::Sample(float *S, int Len): +Sample::Sample(const float *S, int Len): m_IsEmpty(false), m_DataGranularity(512), m_Data(NULL), diff --git a/SpiralSound/Sample.h b/SpiralSound/Sample.h index 5e73bda..dc7b08f 100644 --- a/SpiralSound/Sample.h +++ b/SpiralSound/Sample.h @@ -44,7 +44,7 @@ public: Sample(int Len=0); Sample(const Sample &rhs); - Sample(float *S, int Len); + Sample(const float *S, int Len); ~Sample(); bool Allocate(int Size);