diff --git a/SpiralSound/ChannelHandler.C b/SpiralSound/ChannelHandler.C index 43f367f..0477e35 100644 --- a/SpiralSound/ChannelHandler.C +++ b/SpiralSound/ChannelHandler.C @@ -214,6 +214,20 @@ void ChannelHandler::GetData(const string &ID, void *data) pthread_mutex_unlock(m_Mutex); } +void ChannelHandler::UpdateDataSize(const std::string &ID, int size) +{ + map::iterator i=m_ChannelMap.find(ID); + if (i==m_ChannelMap.end()) + { + cerr<<"ChannelHandler: Channel ["<second->size = size; + pthread_mutex_unlock(m_Mutex); +} + void ChannelHandler::SetData(const string &ID, void *s) { map::iterator i=m_ChannelMap.find(ID); diff --git a/SpiralSound/ChannelHandler.h b/SpiralSound/ChannelHandler.h index 4efa6f8..6160719 100644 --- a/SpiralSound/ChannelHandler.h +++ b/SpiralSound/ChannelHandler.h @@ -79,6 +79,8 @@ public: void Set(const std::string &ID, const float& s) { SetData(ID,(void*)&s); } void Set(const std::string &ID, const double& s) { SetData(ID,(void*)&s); } + void UpdateDataSize(const std::string &ID, int size); + void SetCommand(char command); // initialises the data from the audio side to the internal buffers diff --git a/SpiralSound/Plugins/AnotherFilterPlugin/AnotherFilterPlugin.C b/SpiralSound/Plugins/AnotherFilterPlugin/AnotherFilterPlugin.C index 887265e..2f2d0ef 100644 --- a/SpiralSound/Plugins/AnotherFilterPlugin/AnotherFilterPlugin.C +++ b/SpiralSound/Plugins/AnotherFilterPlugin/AnotherFilterPlugin.C @@ -87,6 +87,13 @@ SpiralGUIType *AnotherFilterPlugin::CreateGUI() this,m_AudioCH,m_HostInfo); } +void AnotherFilterPlugin::Reset() +{ + ResetPorts(); + vibrapos = 0.0f; + vibraspeed = 0.0f; +} + void AnotherFilterPlugin::Execute() { float in; diff --git a/SpiralSound/Plugins/AnotherFilterPlugin/AnotherFilterPlugin.h b/SpiralSound/Plugins/AnotherFilterPlugin/AnotherFilterPlugin.h index 9db123b..9e56156 100644 --- a/SpiralSound/Plugins/AnotherFilterPlugin/AnotherFilterPlugin.h +++ b/SpiralSound/Plugins/AnotherFilterPlugin/AnotherFilterPlugin.h @@ -34,6 +34,8 @@ public: virtual PluginInfo &Initialise(const HostInfo *Host); virtual SpiralGUIType *CreateGUI(); virtual void Execute(); + virtual void Reset(); + virtual void StreamOut(std::ostream &s); virtual void StreamIn(std::istream &s); @@ -41,8 +43,6 @@ public: float GetResonance() { return Resonance; } void Randomise(); - void Clear(); - private: float Cutoff, Resonance; diff --git a/SpiralSound/Plugins/BeatMatchPlugin/BeatMatchPlugin.C b/SpiralSound/Plugins/BeatMatchPlugin/BeatMatchPlugin.C index 081be39..31bf434 100644 --- a/SpiralSound/Plugins/BeatMatchPlugin/BeatMatchPlugin.C +++ b/SpiralSound/Plugins/BeatMatchPlugin/BeatMatchPlugin.C @@ -82,6 +82,16 @@ SpiralGUIType *BeatMatchPlugin::CreateGUI() this,m_AudioCH,m_HostInfo); } +void BeatMatchPlugin::Reset() +{ + ResetPorts(); + m_Triggered = false; + m_EstimatedDuration = 100; + m_BeatTime = 100; + m_NextBeat = 100; + m_OutputLevel = 1.0f; +} + void BeatMatchPlugin::Execute() { for (int n=0; nBUFSIZE; n++) diff --git a/SpiralSound/Plugins/BeatMatchPlugin/BeatMatchPlugin.h b/SpiralSound/Plugins/BeatMatchPlugin/BeatMatchPlugin.h index 78354db..e0e1704 100644 --- a/SpiralSound/Plugins/BeatMatchPlugin/BeatMatchPlugin.h +++ b/SpiralSound/Plugins/BeatMatchPlugin/BeatMatchPlugin.h @@ -31,6 +31,8 @@ public: virtual PluginInfo& Initialise(const HostInfo *Host); virtual SpiralGUIType* CreateGUI(); virtual void Execute(); + virtual void Reset(); + virtual void ExecuteCommands(); virtual void StreamOut(std::ostream &s); virtual void StreamIn(std::istream &s); diff --git a/SpiralSound/Plugins/CounterPlugin/CounterPlugin.C b/SpiralSound/Plugins/CounterPlugin/CounterPlugin.C index ad5e25a..a617ae8 100644 --- a/SpiralSound/Plugins/CounterPlugin/CounterPlugin.C +++ b/SpiralSound/Plugins/CounterPlugin/CounterPlugin.C @@ -80,6 +80,15 @@ SpiralGUIType *CounterPlugin::CreateGUI() this,m_AudioCH,m_HostInfo); } +void CounterPlugin::Reset() +{ + ResetPorts(); + m_Current = 0; + m_Triggered = false; + m_CurrentLevel = 1.0f; +} + + void CounterPlugin::Execute() { bool Triggered; diff --git a/SpiralSound/Plugins/CounterPlugin/CounterPlugin.h b/SpiralSound/Plugins/CounterPlugin/CounterPlugin.h index 3964c84..6c9a060 100644 --- a/SpiralSound/Plugins/CounterPlugin/CounterPlugin.h +++ b/SpiralSound/Plugins/CounterPlugin/CounterPlugin.h @@ -31,6 +31,8 @@ public: virtual PluginInfo& Initialise(const HostInfo *Host); virtual SpiralGUIType* CreateGUI(); virtual void Execute(); + virtual void Reset(); + virtual void ExecuteCommands(); virtual void StreamOut(std::ostream &s); virtual void StreamIn(std::istream &s); diff --git a/SpiralSound/Plugins/DelayPlugin/DelayPlugin.C b/SpiralSound/Plugins/DelayPlugin/DelayPlugin.C index 54389d1..0617b83 100644 --- a/SpiralSound/Plugins/DelayPlugin/DelayPlugin.C +++ b/SpiralSound/Plugins/DelayPlugin/DelayPlugin.C @@ -85,6 +85,15 @@ SpiralGUIType *DelayPlugin::CreateGUI() this,m_AudioCH,m_HostInfo); } +void DelayPlugin::Reset() +{ + ResetPorts(); + m_Buffer.Clear(); + m_Buffer.Allocate((int)(m_HostInfo->SAMPLERATE*MAX_DELAY)); + m_ReadHeadPos = 0; + m_WriteHeadPos = 0; +} + void DelayPlugin::Execute () { int Delay; float max_pos = MAX_DELAY * m_HostInfo->SAMPLERATE; diff --git a/SpiralSound/Plugins/DelayPlugin/DelayPlugin.h b/SpiralSound/Plugins/DelayPlugin/DelayPlugin.h index d8d2d99..9b6fde7 100644 --- a/SpiralSound/Plugins/DelayPlugin/DelayPlugin.h +++ b/SpiralSound/Plugins/DelayPlugin/DelayPlugin.h @@ -31,6 +31,7 @@ public: virtual PluginInfo &Initialise(const HostInfo *Host); virtual SpiralGUIType *CreateGUI(); virtual void Execute(); + virtual void Reset(); virtual void StreamOut(std::ostream &s); virtual void StreamIn(std::istream &s); diff --git a/SpiralSound/Plugins/DistributorPlugin/DistributorPlugin.C b/SpiralSound/Plugins/DistributorPlugin/DistributorPlugin.C index cb8a6bb..33192e4 100644 --- a/SpiralSound/Plugins/DistributorPlugin/DistributorPlugin.C +++ b/SpiralSound/Plugins/DistributorPlugin/DistributorPlugin.C @@ -122,6 +122,15 @@ SpiralGUIType *DistributorPlugin::CreateGUI() return new DistributorPluginGUI (m_PluginInfo.Width, m_PluginInfo.Height, this, m_AudioCH, m_HostInfo); } +void DistributorPlugin::Reset() +{ + ResetPorts(); + m_Triggered = false; + m_ChannelSelect = false; + m_TrigDelay = 0; +} + + void DistributorPlugin::Execute() { const int Stream = 0; const int Switch = 1; diff --git a/SpiralSound/Plugins/DistributorPlugin/DistributorPlugin.h b/SpiralSound/Plugins/DistributorPlugin/DistributorPlugin.h index 8c50b21..ecb3ff3 100644 --- a/SpiralSound/Plugins/DistributorPlugin/DistributorPlugin.h +++ b/SpiralSound/Plugins/DistributorPlugin/DistributorPlugin.h @@ -31,6 +31,7 @@ public: virtual SpiralGUIType* CreateGUI (); virtual void Execute(); + virtual void Reset(); virtual void ExecuteCommands(); virtual void StreamOut(std::ostream &s); diff --git a/SpiralSound/Plugins/EchoPlugin/EchoPlugin.C b/SpiralSound/Plugins/EchoPlugin/EchoPlugin.C index 99de91e..5c21380 100644 --- a/SpiralSound/Plugins/EchoPlugin/EchoPlugin.C +++ b/SpiralSound/Plugins/EchoPlugin/EchoPlugin.C @@ -89,6 +89,20 @@ SpiralGUIType *EchoPlugin::CreateGUI() return new EchoPluginGUI (m_PluginInfo.Width, m_PluginInfo.Height, this, m_AudioCH, m_HostInfo); } +void EchoPlugin::Reset() +{ + ResetPorts(); + m_Buffer[0].Clear(); + m_Buffer[0].Allocate ((int)(m_HostInfo->SAMPLERATE * MAX_DELAY)); + + m_Buffer[1].Clear(); + m_Buffer[1].Allocate ((int)(m_HostInfo->SAMPLERATE * MAX_DELAY)); + + m_HeadPos = 0; + m_Buf0 = 0; + m_Buf1 = 1; +} + void EchoPlugin::Execute() { float Delay; diff --git a/SpiralSound/Plugins/EchoPlugin/EchoPlugin.h b/SpiralSound/Plugins/EchoPlugin/EchoPlugin.h index acd6207..9051e67 100644 --- a/SpiralSound/Plugins/EchoPlugin/EchoPlugin.h +++ b/SpiralSound/Plugins/EchoPlugin/EchoPlugin.h @@ -30,6 +30,8 @@ class EchoPlugin : public SpiralPlugin virtual PluginInfo &Initialise (const HostInfo *Host); virtual SpiralGUIType *CreateGUI(); virtual void Execute(); + virtual void Reset(); + virtual void StreamOut (std::ostream &s); virtual void StreamIn (std::istream &s); float GetDelay() { return m_Delay; } diff --git a/SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPlugin.C b/SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPlugin.C index 2311cdc..54004d9 100644 --- a/SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPlugin.C +++ b/SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPlugin.C @@ -79,6 +79,12 @@ SpiralGUIType *EnvFollowerPlugin::CreateGUI() this,m_AudioCH,m_HostInfo); } +void EnvFollowerPlugin::Reset() +{ + ResetPorts(); + m_Value = 0; +} + void EnvFollowerPlugin::Execute() { float Value; diff --git a/SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPlugin.h b/SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPlugin.h index d91a7d2..1b28d0a 100644 --- a/SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPlugin.h +++ b/SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPlugin.h @@ -31,6 +31,8 @@ public: virtual PluginInfo& Initialise(const HostInfo *Host); virtual SpiralGUIType* CreateGUI(); virtual void Execute(); + virtual void Reset(); + virtual void StreamOut(std::ostream &s); virtual void StreamIn(std::istream &s); diff --git a/SpiralSound/Plugins/EnvelopePlugin/EnvelopePlugin.C b/SpiralSound/Plugins/EnvelopePlugin/EnvelopePlugin.C index 9770b39..343529f 100644 --- a/SpiralSound/Plugins/EnvelopePlugin/EnvelopePlugin.C +++ b/SpiralSound/Plugins/EnvelopePlugin/EnvelopePlugin.C @@ -85,6 +85,14 @@ PluginInfo &EnvelopePlugin::Initialise(const HostInfo *Host) return Info; } +void EnvelopePlugin::Reset() +{ + ResetPorts(); + m_SampleTime=1.0/(float)(m_HostInfo->SAMPLERATE); + m_Trigger = false; + m_t = -1.0f; +} + SpiralGUIType *EnvelopePlugin::CreateGUI() { return new EnvelopePluginGUI(m_PluginInfo.Width, diff --git a/SpiralSound/Plugins/EnvelopePlugin/EnvelopePlugin.h b/SpiralSound/Plugins/EnvelopePlugin/EnvelopePlugin.h index 9abc36c..763f015 100644 --- a/SpiralSound/Plugins/EnvelopePlugin/EnvelopePlugin.h +++ b/SpiralSound/Plugins/EnvelopePlugin/EnvelopePlugin.h @@ -33,6 +33,8 @@ public: virtual PluginInfo &Initialise(const HostInfo *Host); virtual SpiralGUIType *CreateGUI(); virtual void Execute(); + virtual void Reset(); + virtual void StreamOut(std::ostream &s); virtual void StreamIn(std::istream &s); diff --git a/SpiralSound/Plugins/FilterPlugin/FilterPlugin.C b/SpiralSound/Plugins/FilterPlugin/FilterPlugin.C index df360ea..7618a53 100644 --- a/SpiralSound/Plugins/FilterPlugin/FilterPlugin.C +++ b/SpiralSound/Plugins/FilterPlugin/FilterPlugin.C @@ -110,6 +110,14 @@ SpiralGUIType *FilterPlugin::CreateGUI() this,m_AudioCH,m_HostInfo); } +void FilterPlugin::Reset() +{ + ResetPorts(); + + fs=m_HostInfo->SAMPLERATE; + SetupCoeffs(); +} + void FilterPlugin::Execute() { float Cutoff; diff --git a/SpiralSound/Plugins/FilterPlugin/FilterPlugin.h b/SpiralSound/Plugins/FilterPlugin/FilterPlugin.h index b4165a7..882dc7f 100644 --- a/SpiralSound/Plugins/FilterPlugin/FilterPlugin.h +++ b/SpiralSound/Plugins/FilterPlugin/FilterPlugin.h @@ -37,7 +37,7 @@ public: virtual void StreamOut(std::ostream &s); virtual void StreamIn(std::istream &s); - void Reset(); + virtual void Reset(); void SetupCoeffs(); double GetCutoff() {return fc;} diff --git a/SpiralSound/Plugins/FlipflopPlugin/FlipflopPlugin.C b/SpiralSound/Plugins/FlipflopPlugin/FlipflopPlugin.C index ceca9b1..a4a5e10 100644 --- a/SpiralSound/Plugins/FlipflopPlugin/FlipflopPlugin.C +++ b/SpiralSound/Plugins/FlipflopPlugin/FlipflopPlugin.C @@ -84,6 +84,15 @@ SpiralGUIType *FlipflopPlugin::CreateGUI() this,m_AudioCH,m_HostInfo); } +void FlipflopPlugin::Reset() +{ + ResetPorts(); + m_Current = 0; + m_Triggered = false; + m_CurrentLevel = 1.0f; + m_TriggerSamples = 0; +} + void FlipflopPlugin::Execute() { bool Triggered; diff --git a/SpiralSound/Plugins/FlipflopPlugin/FlipflopPlugin.h b/SpiralSound/Plugins/FlipflopPlugin/FlipflopPlugin.h index 55e2503..4d95edb 100644 --- a/SpiralSound/Plugins/FlipflopPlugin/FlipflopPlugin.h +++ b/SpiralSound/Plugins/FlipflopPlugin/FlipflopPlugin.h @@ -31,6 +31,7 @@ public: virtual PluginInfo& Initialise(const HostInfo *Host); virtual SpiralGUIType* CreateGUI(); virtual void Execute(); + virtual void Reset(); virtual void ExecuteCommands(); virtual void StreamOut(std::ostream &s); virtual void StreamIn(std::istream &s); diff --git a/SpiralSound/Plugins/FormantFilterPlugin/FormantFilterPlugin.C b/SpiralSound/Plugins/FormantFilterPlugin/FormantFilterPlugin.C index 4492052..c420865 100644 --- a/SpiralSound/Plugins/FormantFilterPlugin/FormantFilterPlugin.C +++ b/SpiralSound/Plugins/FormantFilterPlugin/FormantFilterPlugin.C @@ -82,13 +82,7 @@ string SpiralPlugin_GetGroupName() FormantFilterPlugin::FormantFilterPlugin() : m_Vowel(0) { - for (int i = 0; i < 5; i++) - { - for (int j = 0; j < 10; j++) - { - memory[i][j] = 0; - } - } + Clear(); m_PluginInfo.Name="FormantFilter"; m_PluginInfo.Width=90; @@ -118,6 +112,13 @@ SpiralGUIType *FormantFilterPlugin::CreateGUI() this,m_AudioCH,m_HostInfo); } +void FormantFilterPlugin::Reset() +{ + ResetPorts(); + Clear(); + +} + void FormantFilterPlugin::Execute() { float res,o[5],out=0, in=0; @@ -127,13 +128,7 @@ void FormantFilterPlugin::Execute() //reset memory if disconnected, and skip out (prevents CPU spike) if (! InputExists(0)) { - for (int i = 0; i < 5; i++) - { - for (int j = 0; j < 10; j++) - { - memory[i][j] = 0; - } - } + Clear(); out = 0; } else @@ -214,6 +209,18 @@ void FormantFilterPlugin::Execute() void FormantFilterPlugin::Randomise() { } + + +void FormantFilterPlugin::Clear() +{ + for (int i = 0; i < 5; i++) + { + for (int j = 0; j < 10; j++) + { + memory[i][j] = 0; + } + } +} void FormantFilterPlugin::StreamOut(ostream &s) { diff --git a/SpiralSound/Plugins/FormantFilterPlugin/FormantFilterPlugin.h b/SpiralSound/Plugins/FormantFilterPlugin/FormantFilterPlugin.h index 1f14ed6..65c7dda 100644 --- a/SpiralSound/Plugins/FormantFilterPlugin/FormantFilterPlugin.h +++ b/SpiralSound/Plugins/FormantFilterPlugin/FormantFilterPlugin.h @@ -31,6 +31,8 @@ public: virtual PluginInfo &Initialise(const HostInfo *Host); virtual SpiralGUIType *CreateGUI(); virtual void Execute(); + virtual void Reset(); + virtual void StreamOut(std::ostream &s); virtual void StreamIn(std::istream &s); diff --git a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.C b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.C index d137666..015e19d 100644 --- a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.C +++ b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.C @@ -68,6 +68,7 @@ LADSPAPlugin::LADSPAPlugin() } m_PlugDesc = NULL; + m_SSMPluginReset = false; ClearPlugin(); @@ -150,6 +151,15 @@ SpiralGUIType *LADSPAPlugin::CreateGUI() this, m_AudioCH, m_HostInfo, m_LADSPAInfo->GetMenuList()); } +void LADSPAPlugin::Reset() +{ + ResetPorts(); + + m_SSMPluginReset = true; + UpdatePlugin(m_UniqueID); + m_SSMPluginReset = false; +} + void LADSPAPlugin::Execute() { if (m_PlugDesc) @@ -857,6 +867,7 @@ bool LADSPAPlugin::UpdatePlugin(unsigned long UniqueID) } // Oops. Clean up. + m_SSMPluginReset = false; ClearPlugin(); cerr << "Error loading LADSPA Plugin.\n"; @@ -880,13 +891,14 @@ bool LADSPAPlugin::SelectPlugin(unsigned long UniqueID) } // Find number of input and output ports - for (unsigned long i = 0; i < m_PlugDesc->PortCount; i++) { - if (LADSPA_IS_PORT_INPUT(m_PlugDesc->PortDescriptors[i])) { - m_PluginInfo.NumInputs++; - } else if (LADSPA_IS_PORT_OUTPUT(m_PlugDesc->PortDescriptors[i])) { - m_PluginInfo.NumOutputs++; + if (! m_SSMPluginReset) + for (unsigned long i = 0; i < m_PlugDesc->PortCount; i++) { + if (LADSPA_IS_PORT_INPUT(m_PlugDesc->PortDescriptors[i])) { + m_PluginInfo.NumInputs++; + } else if (LADSPA_IS_PORT_OUTPUT(m_PlugDesc->PortDescriptors[i])) { + m_PluginInfo.NumOutputs++; + } } - } ///////////////////////////////// // LADSPA Buffers @@ -899,7 +911,7 @@ bool LADSPAPlugin::SelectPlugin(unsigned long UniqueID) LADSPA_Data *NewPort = new LADSPA_Data[m_HostInfo->BUFSIZE]; m_LADSPABufVec.push_back(NewPort); m_PlugDesc->connect_port(m_PlugInstHandle, n, m_LADSPABufVec[c]); - m_PortID.push_back(n); + m_PortID.push_back(n); c++; } } @@ -924,53 +936,59 @@ bool LADSPAPlugin::SelectPlugin(unsigned long UniqueID) // SSM Buffers // Allocate the i/o buffers required - for (int n=0; nPortCount; i++) + if (! m_SSMPluginReset) { - if (LADSPA_IS_PORT_INPUT(m_PlugDesc->PortDescriptors[i])) + string desc; + c=0; + + for (unsigned int i = 0; i < m_PlugDesc->PortCount; i++) { - desc = string(m_PlugDesc->PortNames[i]) + - (LADSPA_IS_PORT_CONTROL(m_PlugDesc->PortDescriptors[i]) ? " (CV)" : " (AU)"); - m_PluginInfo.PortTips.push_back(desc.c_str()); - - c++; + if (LADSPA_IS_PORT_INPUT(m_PlugDesc->PortDescriptors[i])) + { + desc = string(m_PlugDesc->PortNames[i]) + + (LADSPA_IS_PORT_CONTROL(m_PlugDesc->PortDescriptors[i]) ? " (CV)" : " (AU)"); + m_PluginInfo.PortTips.push_back(desc.c_str()); + + c++; + } } - } - - for (unsigned int i = 0; i < m_PlugDesc->PortCount; i++) - { - if (LADSPA_IS_PORT_OUTPUT(m_PlugDesc->PortDescriptors[i])) { - - desc = string(m_PlugDesc->PortNames[i]) + - (LADSPA_IS_PORT_CONTROL(m_PlugDesc->PortDescriptors[i]) ? " (CV)" : " (AU)"); - m_PluginInfo.PortTips.push_back(desc.c_str()); + for (unsigned int i = 0; i < m_PlugDesc->PortCount; i++) + { + if (LADSPA_IS_PORT_OUTPUT(m_PlugDesc->PortDescriptors[i])) { + + desc = string(m_PlugDesc->PortNames[i]) + + (LADSPA_IS_PORT_CONTROL(m_PlugDesc->PortDescriptors[i]) ? " (CV)" : " (AU)"); + + m_PluginInfo.PortTips.push_back(desc.c_str()); + } } - } - - UpdatePluginInfoWithHost(); + UpdatePluginInfoWithHost(); + + m_UniqueID = m_PlugDesc->UniqueID; - m_UniqueID = m_PlugDesc->UniqueID; - m_InputPortCount = m_PluginInfo.NumInputs; + m_InputPortCount = m_PluginInfo.NumInputs; - int lbl_length; + int lbl_length; - lbl_length = strlen(m_PlugDesc->Name); - lbl_length = lbl_length > 255 ? 255 : lbl_length; - strncpy(m_Name, m_PlugDesc->Name, lbl_length); - m_Name[lbl_length] = '\0'; + lbl_length = strlen(m_PlugDesc->Name); + lbl_length = lbl_length > 255 ? 255 : lbl_length; + strncpy(m_Name, m_PlugDesc->Name, lbl_length); + m_Name[lbl_length] = '\0'; - lbl_length = strlen(m_PlugDesc->Maker); - lbl_length = lbl_length > 255 ? 255 : lbl_length; - strncpy(m_Maker, m_PlugDesc->Maker, lbl_length); - m_Maker[lbl_length] = '\0'; + lbl_length = strlen(m_PlugDesc->Maker); + lbl_length = lbl_length > 255 ? 255 : lbl_length; + strncpy(m_Maker, m_PlugDesc->Maker, lbl_length); + m_Maker[lbl_length] = '\0'; + } return true; } @@ -988,14 +1006,17 @@ void LADSPAPlugin::ClearPlugin(void) m_LADSPAInfo->DiscardDescriptorByID(m_UniqueID); } - m_Page = 1; - m_UpdateInputs = true; - m_UniqueID = 0; - m_InputPortCount = 0; - m_UnconnectedInputs = 0; - strncpy(m_Name, "None\0", 5); - strncpy(m_Maker, "None\0", 5); - + if (! m_SSMPluginReset) + { + m_Page = 1; + m_UpdateInputs = true; + m_UniqueID = 0; + m_InputPortCount = 0; + m_UnconnectedInputs = 0; + strncpy(m_Name, "None\0", 5); + strncpy(m_Maker, "None\0", 5); + } + for(vector::iterator i=m_LADSPABufVec.begin(); i!=m_LADSPABufVec.end(); i++) { @@ -1003,18 +1024,25 @@ void LADSPAPlugin::ClearPlugin(void) } m_LADSPABufVec.clear(); - RemoveAllInputs(); - RemoveAllOutputs(); - - m_PluginInfo.NumInputs = 0; - m_PluginInfo.NumOutputs = 0; - m_PluginInfo.PortTips.clear(); + if (! m_SSMPluginReset) + { + RemoveAllInputs(); + RemoveAllOutputs(); + m_PluginInfo.NumInputs = 0; + m_PluginInfo.NumOutputs = 0; + m_PluginInfo.PortTips.clear(); + } + m_PortID.clear(); m_InputPortMin.clear(); m_InputPortMax.clear(); m_InputPortClamp.clear(); - m_InputPortDefault.clear(); + + if (! m_SSMPluginReset) + { + m_InputPortDefault.clear(); + } } void LADSPAPlugin::ResetPortSettings(void) @@ -1125,7 +1153,11 @@ void LADSPAPlugin::ResetPortSettings(void) m_InputPortMin.push_back(Min); m_InputPortMax.push_back(Max); m_InputPortClamp.push_back(true); - m_InputPortDefault.push_back(Default); + + if (! m_SSMPluginReset) + { + m_InputPortDefault.push_back(Default); + } } } diff --git a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.h b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.h index 2418122..4c051e9 100644 --- a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.h +++ b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.h @@ -52,6 +52,7 @@ public: virtual PluginInfo &Initialise(const HostInfo *Host); virtual SpiralGUIType *CreateGUI(); virtual void Execute(); + virtual void Reset(); virtual void ExecuteCommands(); virtual void StreamOut(std::ostream &s); virtual void StreamIn(std::istream &s); @@ -100,10 +101,12 @@ private: void ResetPortSettings(void); void SetGUIExports(void); + bool m_SSMPluginReset; + const LADSPA_Descriptor *m_PlugDesc; std::vector m_LADSPABufVec; LADSPA_Handle m_PlugInstHandle; - + std::vector m_PortID; std::vector m_InputPortMin; std::vector m_InputPortMax; diff --git a/SpiralSound/Plugins/LFOPlugin/LFOPlugin.C b/SpiralSound/Plugins/LFOPlugin/LFOPlugin.C index a8579fd..4ec7646 100644 --- a/SpiralSound/Plugins/LFOPlugin/LFOPlugin.C +++ b/SpiralSound/Plugins/LFOPlugin/LFOPlugin.C @@ -102,6 +102,16 @@ float LFOPlugin::AdjustPos (float pos) { return pos; } +void LFOPlugin::Reset() +{ + ResetPorts(); + for (int n=0; nBUFSIZE; n++) { diff --git a/SpiralSound/Plugins/LFOPlugin/LFOPlugin.h b/SpiralSound/Plugins/LFOPlugin/LFOPlugin.h index ac712e1..a6f7703 100644 --- a/SpiralSound/Plugins/LFOPlugin/LFOPlugin.h +++ b/SpiralSound/Plugins/LFOPlugin/LFOPlugin.h @@ -32,6 +32,8 @@ class LFOPlugin : public SpiralPlugin { virtual PluginInfo &Initialise (const HostInfo *Host); virtual SpiralGUIType* CreateGUI(); virtual void Execute(); + virtual void Reset(); + virtual void StreamOut (std::ostream &s); virtual void StreamIn (std::istream &s); //typedef char Type; diff --git a/SpiralSound/Plugins/MasherPlugin/MasherPlugin.C b/SpiralSound/Plugins/MasherPlugin/MasherPlugin.C index 77d5cb4..374f445 100644 --- a/SpiralSound/Plugins/MasherPlugin/MasherPlugin.C +++ b/SpiralSound/Plugins/MasherPlugin/MasherPlugin.C @@ -106,6 +106,14 @@ void MixPitch(Sample &src, Sample &dst, int Pos, float Pitch) } } +void MasherPlugin::Reset() +{ + ResetPorts(); + m_ReadGrain = 0; + m_WriteGrain = 0; +} + + void MasherPlugin::Execute() { GetOutputBuf(0)->Zero(); diff --git a/SpiralSound/Plugins/MasherPlugin/MasherPlugin.h b/SpiralSound/Plugins/MasherPlugin/MasherPlugin.h index ac4dac3..91e250b 100644 --- a/SpiralSound/Plugins/MasherPlugin/MasherPlugin.h +++ b/SpiralSound/Plugins/MasherPlugin/MasherPlugin.h @@ -33,6 +33,7 @@ public: virtual PluginInfo &Initialise(const HostInfo *Host); virtual SpiralGUIType *CreateGUI(); virtual void Execute(); + virtual void Reset(); virtual void StreamOut(std::ostream &s); virtual void StreamIn(std::istream &s); diff --git a/SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.C b/SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.C index 64eda65..1044dde 100644 --- a/SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.C +++ b/SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.C @@ -154,6 +154,25 @@ SpiralGUIType *MatrixPlugin::CreateGUI() this,m_AudioCH,m_HostInfo); } +void MatrixPlugin::Reset() +{ + ResetPorts(); + m_Current = 0; + m_GUICurrent = 0; + m_Time = 0.0f; + m_Step = 0; + m_TickTime = 1.0f/(float)m_HostInfo->SAMPLERATE; + m_StepTime = 1.0f; + m_CurPatSeq = 0; + m_CurrentNoteCV = 0; + m_CurrentTriggerCV = 0; + m_Triggered = false; + m_ClockHigh = false; + m_CopyPattern = 0; + m_PatAdvance = false; + m_PatReset = false; +} + void MatrixPlugin::Execute() { for (int n=0; nBUFSIZE; n++) diff --git a/SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.h b/SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.h index 4cfe8e0..a0f806d 100644 --- a/SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.h +++ b/SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.h @@ -45,6 +45,7 @@ public: virtual PluginInfo &Initialise(const HostInfo *Host); virtual SpiralGUIType *CreateGUI(); virtual void Execute(); + virtual void Reset(); virtual void ExecuteCommands(); virtual void StreamOut(std::ostream &s); virtual void StreamIn(std::istream &s); diff --git a/SpiralSound/Plugins/MeterPlugin/MeterPlugin.C b/SpiralSound/Plugins/MeterPlugin/MeterPlugin.C index ef6adfa..45c4ccc 100644 --- a/SpiralSound/Plugins/MeterPlugin/MeterPlugin.C +++ b/SpiralSound/Plugins/MeterPlugin/MeterPlugin.C @@ -65,6 +65,15 @@ SpiralGUIType *MeterPlugin::CreateGUI() { return new MeterPluginGUI (m_PluginInfo.Width, m_PluginInfo.Height, this, m_AudioCH, m_HostInfo); } +void MeterPlugin::Reset() +{ + ResetPorts(); + m_DataReady = false; + delete m_Data; + m_Data = new float[m_HostInfo->BUFSIZE]; + m_AudioCH->UpdateDataSize ("AudioData", m_HostInfo->BUFSIZE * sizeof (float)); +} + void MeterPlugin::Execute() { // Just copy the data through. m_DataReady = InputExists (0); diff --git a/SpiralSound/Plugins/MeterPlugin/MeterPlugin.h b/SpiralSound/Plugins/MeterPlugin/MeterPlugin.h index c93832a..7828131 100644 --- a/SpiralSound/Plugins/MeterPlugin/MeterPlugin.h +++ b/SpiralSound/Plugins/MeterPlugin/MeterPlugin.h @@ -28,6 +28,7 @@ class MeterPlugin : public SpiralPlugin { virtual PluginInfo& Initialise (const HostInfo *Host); virtual SpiralGUIType* CreateGUI(); virtual void Execute(); + virtual void Reset(); virtual void ExecuteCommands(); virtual void StreamOut (std::ostream &s); virtual void StreamIn (std::istream &s); diff --git a/SpiralSound/Plugins/MixSwitchPlugin/MixSwitchPlugin.C b/SpiralSound/Plugins/MixSwitchPlugin/MixSwitchPlugin.C index 5f15bd7..5813290 100644 --- a/SpiralSound/Plugins/MixSwitchPlugin/MixSwitchPlugin.C +++ b/SpiralSound/Plugins/MixSwitchPlugin/MixSwitchPlugin.C @@ -77,7 +77,6 @@ void MixSwitchPlugin::ExecuteCommands () { } } } - void MixSwitchPlugin::CreatePorts (int n, bool AddPorts) { int c; m_PluginInfo.NumInputs = 2 + n; @@ -114,6 +113,19 @@ void MixSwitchPlugin::SetChans (int n) { UpdatePluginInfoWithHost (); } + +void MixSwitchPlugin::Reset() +{ + ResetPorts(); + m_SwitchPos = 1; + m_Triggered = false; + + m_GUIArgs.Chans = 2; + m_GUIArgs.Switch = 1; + m_GUIArgs.Echo = 1; + m_GUIArgs.Auto = false; +} + void MixSwitchPlugin::Execute() { float f; int p; diff --git a/SpiralSound/Plugins/MixSwitchPlugin/MixSwitchPlugin.h b/SpiralSound/Plugins/MixSwitchPlugin/MixSwitchPlugin.h index 513b26a..494daf6 100644 --- a/SpiralSound/Plugins/MixSwitchPlugin/MixSwitchPlugin.h +++ b/SpiralSound/Plugins/MixSwitchPlugin/MixSwitchPlugin.h @@ -29,6 +29,7 @@ class MixSwitchPlugin : public SpiralPlugin { virtual PluginInfo& Initialise (const HostInfo *Host); virtual SpiralGUIType* CreateGUI (); virtual void Execute (); + virtual void Reset(); virtual void ExecuteCommands(); virtual void StreamOut (std::ostream &s); virtual void StreamIn (std::istream &s); diff --git a/SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPlugin.C b/SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPlugin.C index 97e0e72..3f315d8 100644 --- a/SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPlugin.C +++ b/SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPlugin.C @@ -101,6 +101,13 @@ SpiralGUIType *MoogFilterPlugin::CreateGUI() this,m_AudioCH,m_HostInfo); } +void MoogFilterPlugin::Reset() +{ + ResetPorts(); + fs = m_HostInfo->SAMPLERATE; + Clear(); +} + void MoogFilterPlugin::Execute() { float in, Q; diff --git a/SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPlugin.h b/SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPlugin.h index 36eb32d..acccbf3 100644 --- a/SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPlugin.h +++ b/SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPlugin.h @@ -31,6 +31,8 @@ public: virtual PluginInfo &Initialise(const HostInfo *Host); virtual SpiralGUIType *CreateGUI(); virtual void Execute(); + virtual void Reset(); + virtual void StreamOut(std::ostream &s); virtual void StreamIn(std::istream &s); diff --git a/SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPlugin.C b/SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPlugin.C index 542030f..703dc68 100644 --- a/SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPlugin.C +++ b/SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPlugin.C @@ -83,6 +83,12 @@ SpiralGUIType *NoteSnapPlugin::CreateGUI() this,m_AudioCH,m_HostInfo); } +void NoteSnapPlugin::Reset() +{ + ResetPorts(); + m_Out = 0; +} + void NoteSnapPlugin::Execute() { float Freq=0; diff --git a/SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPlugin.h b/SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPlugin.h index 3884fb2..f2dda43 100644 --- a/SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPlugin.h +++ b/SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPlugin.h @@ -31,6 +31,7 @@ public: virtual PluginInfo& Initialise(const HostInfo *Host); virtual SpiralGUIType* CreateGUI(); virtual void Execute(); + virtual void Reset(); virtual void ExecuteCommands(); virtual void StreamOut(std::ostream &s); virtual void StreamIn(std::istream &s); diff --git a/SpiralSound/Plugins/OscillatorPlugin/OscillatorPlugin.C b/SpiralSound/Plugins/OscillatorPlugin/OscillatorPlugin.C index 19d6738..6c51d5a 100644 --- a/SpiralSound/Plugins/OscillatorPlugin/OscillatorPlugin.C +++ b/SpiralSound/Plugins/OscillatorPlugin/OscillatorPlugin.C @@ -104,6 +104,15 @@ SpiralGUIType *OscillatorPlugin::CreateGUI() this,m_AudioCH,m_HostInfo); } +void OscillatorPlugin::Reset() +{ + ResetPorts(); + + m_CyclePos=0; + m_Note=0; + m_LastFreq=0; +} + void OscillatorPlugin::Execute() { short noisev=0; diff --git a/SpiralSound/Plugins/OscillatorPlugin/OscillatorPlugin.h b/SpiralSound/Plugins/OscillatorPlugin/OscillatorPlugin.h index 256796a..0988ce8 100644 --- a/SpiralSound/Plugins/OscillatorPlugin/OscillatorPlugin.h +++ b/SpiralSound/Plugins/OscillatorPlugin/OscillatorPlugin.h @@ -31,6 +31,8 @@ public: virtual PluginInfo &Initialise(const HostInfo *Host); virtual SpiralGUIType *CreateGUI(); virtual void Execute(); + virtual void Reset(); + virtual void StreamOut(std::ostream &s); virtual void StreamIn(std::istream &s); diff --git a/SpiralSound/Plugins/OutputPlugin/OutputPlugin.C b/SpiralSound/Plugins/OutputPlugin/OutputPlugin.C index e0f40a0..38e10fd 100644 --- a/SpiralSound/Plugins/OutputPlugin/OutputPlugin.C +++ b/SpiralSound/Plugins/OutputPlugin/OutputPlugin.C @@ -146,6 +146,36 @@ bool OutputPlugin::Kill() return true; } +void OutputPlugin::Reset() +{ + if (m_IsDead) return; + m_IsDead=true; + OSSOutput::Get()->Kill(); + cb_Blocking(m_Parent,false); + ResetPorts(); + OSSOutput::Get()->AllocateBuffer(); + + switch (m_Mode) + { + case INPUT : + OSSOutput::Get()->OpenRead(); + cb_Blocking(m_Parent,true); + break; + case OUTPUT : + OSSOutput::Get()->OpenWrite(); + cb_Blocking(m_Parent,true); + break; + case DUPLEX : + OSSOutput::Get()->OpenReadWrite(); + cb_Blocking(m_Parent,true); + break; + + default:{} + } + + m_IsDead=false; +} + void OutputPlugin::Execute() { if (m_IsDead) diff --git a/SpiralSound/Plugins/OutputPlugin/OutputPlugin.h b/SpiralSound/Plugins/OutputPlugin/OutputPlugin.h index f0c5113..70fca6f 100644 --- a/SpiralSound/Plugins/OutputPlugin/OutputPlugin.h +++ b/SpiralSound/Plugins/OutputPlugin/OutputPlugin.h @@ -79,6 +79,8 @@ public: virtual SpiralGUIType* CreateGUI(); virtual void Execute(); virtual bool Kill(); + virtual void Reset(); + virtual void ExecuteCommands(); virtual void StreamOut(std::ostream &s) {} virtual void StreamIn(std::istream &s) {} diff --git a/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPlugin.C b/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPlugin.C index 8f9ede1..08e6cb1 100644 --- a/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPlugin.C +++ b/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPlugin.C @@ -176,6 +176,18 @@ SpiralGUIType *PoshSamplerPlugin::CreateGUI() this,m_AudioCH,m_HostInfo); } +void PoshSamplerPlugin::Reset() +{ + ResetPorts(); + m_Current = 0; + + for (int s=0; sPitch *= m_SampleDescVec[s]->SampleRate/(float)m_HostInfo->SAMPLERATE; + m_SampleDescVec[s]->LoopEnd=m_SampleVec[s]->GetLength()-1; + } +} + void PoshSamplerPlugin::Execute() { static bool Pong=false; diff --git a/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPlugin.h b/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPlugin.h index eaa8045..f35b890 100644 --- a/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPlugin.h +++ b/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPlugin.h @@ -54,6 +54,8 @@ public: virtual PluginInfo &Initialise(const HostInfo *Host); virtual SpiralGUIType *CreateGUI(); virtual void Execute(); + virtual void Reset(); + virtual void ExecuteCommands(); virtual void StreamOut(std::ostream &s); virtual void StreamIn(std::istream &s); diff --git a/SpiralSound/Plugins/SVFilterPlugin/SVFilterPlugin.C b/SpiralSound/Plugins/SVFilterPlugin/SVFilterPlugin.C index c37d758..dd30717 100644 --- a/SpiralSound/Plugins/SVFilterPlugin/SVFilterPlugin.C +++ b/SpiralSound/Plugins/SVFilterPlugin/SVFilterPlugin.C @@ -100,6 +100,13 @@ SpiralGUIType *SVFilterPlugin::CreateGUI() this,m_AudioCH,m_HostInfo); } +void SVFilterPlugin::Reset() +{ + ResetPorts(); + fs = m_HostInfo->SAMPLERATE; + Clear(); +} + void SVFilterPlugin::Execute() { float in; diff --git a/SpiralSound/Plugins/SVFilterPlugin/SVFilterPlugin.h b/SpiralSound/Plugins/SVFilterPlugin/SVFilterPlugin.h index e02d71c..c61ee4e 100644 --- a/SpiralSound/Plugins/SVFilterPlugin/SVFilterPlugin.h +++ b/SpiralSound/Plugins/SVFilterPlugin/SVFilterPlugin.h @@ -34,6 +34,8 @@ public: virtual PluginInfo &Initialise(const HostInfo *Host); virtual SpiralGUIType *CreateGUI(); virtual void Execute(); + virtual void Reset(); + virtual void StreamOut(std::ostream &s); virtual void StreamIn(std::istream &s); diff --git a/SpiralSound/Plugins/SampleHoldPlugin/SampleHoldPlugin.C b/SpiralSound/Plugins/SampleHoldPlugin/SampleHoldPlugin.C index fb58085..95cd2a1 100644 --- a/SpiralSound/Plugins/SampleHoldPlugin/SampleHoldPlugin.C +++ b/SpiralSound/Plugins/SampleHoldPlugin/SampleHoldPlugin.C @@ -75,6 +75,13 @@ SpiralGUIType *SampleHoldPlugin::CreateGUI() return NULL; } +void SampleHoldPlugin::Reset() +{ + ResetPorts(); + m_val = 0; + m_flag = 0; +} + void SampleHoldPlugin::Execute() { // Just copy the data through. diff --git a/SpiralSound/Plugins/SampleHoldPlugin/SampleHoldPlugin.h b/SpiralSound/Plugins/SampleHoldPlugin/SampleHoldPlugin.h index 3229bd6..0a57448 100644 --- a/SpiralSound/Plugins/SampleHoldPlugin/SampleHoldPlugin.h +++ b/SpiralSound/Plugins/SampleHoldPlugin/SampleHoldPlugin.h @@ -31,6 +31,8 @@ public: virtual PluginInfo& Initialise(const HostInfo *Host); virtual SpiralGUIType* CreateGUI(); virtual void Execute(); + virtual void Reset(); + virtual void StreamOut(std::ostream &s) {} virtual void StreamIn(std::istream &s) {} diff --git a/SpiralSound/Plugins/ScopePlugin/ScopePlugin.C b/SpiralSound/Plugins/ScopePlugin/ScopePlugin.C index cf3954f..b4ca0a2 100644 --- a/SpiralSound/Plugins/ScopePlugin/ScopePlugin.C +++ b/SpiralSound/Plugins/ScopePlugin/ScopePlugin.C @@ -65,6 +65,15 @@ SpiralGUIType *ScopePlugin::CreateGUI() return new ScopePluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, this, m_AudioCH, m_HostInfo); } +void ScopePlugin::Reset() +{ + ResetPorts(); + m_DataReady = false; + delete m_Data; + m_Data = new float[m_HostInfo->BUFSIZE]; + m_AudioCH->UpdateDataSize("AudioData",m_HostInfo->BUFSIZE*sizeof(float)); +} + void ScopePlugin::Execute() { // Just copy the data through. m_DataReady = InputExists (0); diff --git a/SpiralSound/Plugins/ScopePlugin/ScopePlugin.h b/SpiralSound/Plugins/ScopePlugin/ScopePlugin.h index d15a366..46eda70 100644 --- a/SpiralSound/Plugins/ScopePlugin/ScopePlugin.h +++ b/SpiralSound/Plugins/ScopePlugin/ScopePlugin.h @@ -29,6 +29,7 @@ class ScopePlugin : public SpiralPlugin { virtual PluginInfo& Initialise(const HostInfo *Host); virtual SpiralGUIType* CreateGUI(); virtual void Execute(); + virtual void Reset(); virtual void StreamOut(std::ostream &s) {} virtual void StreamIn(std::istream &s) {} private: diff --git a/SpiralSound/Plugins/SeqSelectorPlugin/SeqSelectorPlugin.C b/SpiralSound/Plugins/SeqSelectorPlugin/SeqSelectorPlugin.C index f9fd8b6..7d8eb5c 100644 --- a/SpiralSound/Plugins/SeqSelectorPlugin/SeqSelectorPlugin.C +++ b/SpiralSound/Plugins/SeqSelectorPlugin/SeqSelectorPlugin.C @@ -90,6 +90,14 @@ SpiralGUIType *SeqSelectorPlugin::CreateGUI() this,m_AudioCH,m_HostInfo); } +void SeqSelectorPlugin::Reset() +{ + ResetPorts(); + m_Pos=0; + m_Triggered=false; + m_UseRange=false; +} + void SeqSelectorPlugin::Execute() { for (int n=0; nBUFSIZE; n++) diff --git a/SpiralSound/Plugins/SeqSelectorPlugin/SeqSelectorPlugin.h b/SpiralSound/Plugins/SeqSelectorPlugin/SeqSelectorPlugin.h index 2a532fd..06b334f 100644 --- a/SpiralSound/Plugins/SeqSelectorPlugin/SeqSelectorPlugin.h +++ b/SpiralSound/Plugins/SeqSelectorPlugin/SeqSelectorPlugin.h @@ -33,6 +33,7 @@ public: virtual PluginInfo &Initialise(const HostInfo *Host); virtual SpiralGUIType *CreateGUI(); virtual void Execute(); + virtual void Reset(); virtual void ExecuteCommands(); virtual void StreamOut(std::ostream &s); virtual void StreamIn(std::istream &s); diff --git a/SpiralSound/Plugins/SmoothPlugin/SmoothPlugin.C b/SpiralSound/Plugins/SmoothPlugin/SmoothPlugin.C index 23d0d94..d9d3e39 100644 --- a/SpiralSound/Plugins/SmoothPlugin/SmoothPlugin.C +++ b/SpiralSound/Plugins/SmoothPlugin/SmoothPlugin.C @@ -79,6 +79,12 @@ SpiralGUIType *SmoothPlugin::CreateGUI() this,m_AudioCH,m_HostInfo); } +void SmoothPlugin::Reset() +{ + ResetPorts(); + m_Value = 0; +} + void SmoothPlugin::Execute() { float Value; diff --git a/SpiralSound/Plugins/SmoothPlugin/SmoothPlugin.h b/SpiralSound/Plugins/SmoothPlugin/SmoothPlugin.h index d72aa78..b24a36e 100644 --- a/SpiralSound/Plugins/SmoothPlugin/SmoothPlugin.h +++ b/SpiralSound/Plugins/SmoothPlugin/SmoothPlugin.h @@ -31,6 +31,7 @@ public: virtual PluginInfo& Initialise(const HostInfo *Host); virtual SpiralGUIType* CreateGUI(); virtual void Execute(); + virtual void Reset(); virtual void StreamOut(std::ostream &s); virtual void StreamIn(std::istream &s); diff --git a/SpiralSound/Plugins/SpiralLoopPlugin/SpiralLoopPlugin.C b/SpiralSound/Plugins/SpiralLoopPlugin/SpiralLoopPlugin.C index 4d870b4..4dbfd3f 100644 --- a/SpiralSound/Plugins/SpiralLoopPlugin/SpiralLoopPlugin.C +++ b/SpiralSound/Plugins/SpiralLoopPlugin/SpiralLoopPlugin.C @@ -122,6 +122,14 @@ SpiralGUIType *SpiralLoopPlugin::CreateGUI() this,m_AudioCH,m_HostInfo); } +void SpiralLoopPlugin::Reset() +{ + ResetPorts(); + m_TickOutput=-m_TickOutput; + m_TickTime=m_StoreBuffer.GetLength()/m_TicksPerLoop; + m_TickCurrent=0; +} + void SpiralLoopPlugin::Execute() { if (InputExists(0)) SetRecordingSource(GetInput(0)->GetBuffer()); diff --git a/SpiralSound/Plugins/SpiralLoopPlugin/SpiralLoopPlugin.h b/SpiralSound/Plugins/SpiralLoopPlugin/SpiralLoopPlugin.h index da40110..d6e16f9 100644 --- a/SpiralSound/Plugins/SpiralLoopPlugin/SpiralLoopPlugin.h +++ b/SpiralSound/Plugins/SpiralLoopPlugin/SpiralLoopPlugin.h @@ -55,6 +55,8 @@ public: virtual PluginInfo &Initialise(const HostInfo *Host); virtual SpiralGUIType *CreateGUI(); virtual void Execute(); + virtual void Reset(); + virtual void ExecuteCommands(); virtual void StreamOut(std::ostream &s); virtual void StreamIn(std::istream &s); diff --git a/SpiralSound/Plugins/SpiralPlugin.C b/SpiralSound/Plugins/SpiralPlugin.C index 681647f..b49cdbb 100644 --- a/SpiralSound/Plugins/SpiralPlugin.C +++ b/SpiralSound/Plugins/SpiralPlugin.C @@ -50,6 +50,20 @@ bool SpiralPlugin::Kill() return true; } +void SpiralPlugin::ResetPorts() +{ + for (int n=0; nClear(); + m_Output[n]->Allocate(m_HostInfo->BUFSIZE); + } +} + +void SpiralPlugin::Reset() +{ + ResetPorts(); +} + PluginInfo &SpiralPlugin::Initialise(const HostInfo *Host) { m_HostInfo=Host; diff --git a/SpiralSound/Plugins/SpiralPlugin.h b/SpiralSound/Plugins/SpiralPlugin.h index 1a6cffb..bd00d7f 100644 --- a/SpiralSound/Plugins/SpiralPlugin.h +++ b/SpiralSound/Plugins/SpiralPlugin.h @@ -78,6 +78,7 @@ public: // execute the audio virtual void Execute()=0; virtual bool Kill(); + virtual void Reset(); // run the commands from the GUI virtual void ExecuteCommands() {} @@ -146,6 +147,8 @@ protected: void RemoveInput(); void RemoveAllInputs(); + void ResetPorts(); + // the ID number assigned to us by ssm int GetID() { return m_HostID; } diff --git a/SpiralSound/Plugins/SplitSwitchPlugin/SplitSwitchPlugin.C b/SpiralSound/Plugins/SplitSwitchPlugin/SplitSwitchPlugin.C index 5b11369..52045eb 100644 --- a/SpiralSound/Plugins/SplitSwitchPlugin/SplitSwitchPlugin.C +++ b/SpiralSound/Plugins/SplitSwitchPlugin/SplitSwitchPlugin.C @@ -104,6 +104,15 @@ void SplitSwitchPlugin::SetChans (int n) { UpdatePluginInfoWithHost (); } +void SplitSwitchPlugin::Reset() +{ + ResetPorts(); + m_Triggered=false; + m_GUIArgs.Chans = 2; + m_GUIArgs.Switch = 1; + m_GUIArgs.Echo = 1; +} + void SplitSwitchPlugin::Execute() { int n; int NumChans = m_PluginInfo.NumOutputs - 1; diff --git a/SpiralSound/Plugins/SplitSwitchPlugin/SplitSwitchPlugin.h b/SpiralSound/Plugins/SplitSwitchPlugin/SplitSwitchPlugin.h index 54862d1..7afbc3b 100644 --- a/SpiralSound/Plugins/SplitSwitchPlugin/SplitSwitchPlugin.h +++ b/SpiralSound/Plugins/SplitSwitchPlugin/SplitSwitchPlugin.h @@ -29,6 +29,7 @@ class SplitSwitchPlugin : public SpiralPlugin { virtual PluginInfo& Initialise (const HostInfo *Host); virtual SpiralGUIType* CreateGUI (); virtual void Execute (); + virtual void Reset(); virtual void ExecuteCommands (); virtual void StreamOut (std::ostream &s); virtual void StreamIn (std::istream &s); diff --git a/SpiralSound/Plugins/StreamPlugin/StreamPlugin.C b/SpiralSound/Plugins/StreamPlugin/StreamPlugin.C index b77d68e..15397f7 100644 --- a/SpiralSound/Plugins/StreamPlugin/StreamPlugin.C +++ b/SpiralSound/Plugins/StreamPlugin/StreamPlugin.C @@ -101,6 +101,15 @@ SpiralGUIType *StreamPlugin::CreateGUI() { return new StreamPluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, this, m_AudioCH, m_HostInfo); } +void StreamPlugin::Reset() +{ + ResetPorts(); + m_StreamPos = 0; + m_GlobalPos = 0; + m_SamplePos = -1; + m_Pos = 0; +} + void StreamPlugin::Execute() { if (m_File.IsOpen()) { for (int n=0; nBUFSIZE; n++) { diff --git a/SpiralSound/Plugins/StreamPlugin/StreamPlugin.h b/SpiralSound/Plugins/StreamPlugin/StreamPlugin.h index e5711cc..ca6eabc 100644 --- a/SpiralSound/Plugins/StreamPlugin/StreamPlugin.h +++ b/SpiralSound/Plugins/StreamPlugin/StreamPlugin.h @@ -30,6 +30,8 @@ class StreamPlugin : public SpiralPlugin { virtual PluginInfo &Initialise (const HostInfo *Host); virtual SpiralGUIType *CreateGUI(); virtual void Execute(); + virtual void Reset(); + virtual void ExecuteCommands(); virtual void StreamOut (std::ostream &s); virtual void StreamIn (std::istream &s); diff --git a/SpiralSound/Plugins/WaveShaperPlugin/WaveShaperPlugin.C b/SpiralSound/Plugins/WaveShaperPlugin/WaveShaperPlugin.C index 5167f35..1c69145 100644 --- a/SpiralSound/Plugins/WaveShaperPlugin/WaveShaperPlugin.C +++ b/SpiralSound/Plugins/WaveShaperPlugin/WaveShaperPlugin.C @@ -96,6 +96,12 @@ void WaveShaperPlugin::ExecuteCommands () { } } +void WaveShaperPlugin::Reset() +{ + ResetPorts(); + calc(); +} + void WaveShaperPlugin::Execute () { float k1, k2; if (!InputExists (0)) return; diff --git a/SpiralSound/Plugins/WaveShaperPlugin/WaveShaperPlugin.h b/SpiralSound/Plugins/WaveShaperPlugin/WaveShaperPlugin.h index 6662511..91fda31 100644 --- a/SpiralSound/Plugins/WaveShaperPlugin/WaveShaperPlugin.h +++ b/SpiralSound/Plugins/WaveShaperPlugin/WaveShaperPlugin.h @@ -30,6 +30,7 @@ class WaveShaperPlugin : public SpiralPlugin { virtual PluginInfo& Initialise (const HostInfo *Host); virtual SpiralGUIType* CreateGUI(); virtual void Execute(); + virtual void Reset(); virtual void ExecuteCommands(); virtual void StreamOut(std::ostream &s); virtual void StreamIn(std::istream &s); diff --git a/SpiralSound/Plugins/WaveTablePlugin/WaveTablePlugin.C b/SpiralSound/Plugins/WaveTablePlugin/WaveTablePlugin.C index d49778d..01c314f 100644 --- a/SpiralSound/Plugins/WaveTablePlugin/WaveTablePlugin.C +++ b/SpiralSound/Plugins/WaveTablePlugin/WaveTablePlugin.C @@ -160,6 +160,22 @@ void WaveTablePlugin::WriteWaves() } } +void WaveTablePlugin::Reset() +{ + ResetPorts(); + + for (int n=0; nsecond->m_Device) // if it's not a comment + else if (i->second->m_Device && !m_ResetingAudioThread) // if it's not a comment and we aren't reseting { #ifdef DEBUG_PLUGINS cerr<<"Updating channelhandler of plugin "<second->m_PluginID<second->m_PluginID<second->m_Device->Execute(); + if (m_ResetingAudioThread) + { + di->second->m_Device->Reset(); + } + else + { + di->second->m_Device->Execute(); + } #ifdef DEBUG_PLUGINS cerr<<"Finished executing"<>*this; - ifs>>*this; - - system("rm -f ___temp.ssmtmp"); - + /* Reset all plugin ports/buffers befure Resuming */ + ResetAudio(); } ////////////////////////////////////////////////////////// diff --git a/SpiralSynthModular.h b/SpiralSynthModular.h index 1957685..df5d8ed 100644 --- a/SpiralSynthModular.h +++ b/SpiralSynthModular.h @@ -106,6 +106,20 @@ public: m_CH.Set("PauseAudio",false); } + void ResetAudio() + { + if (! m_ResetingAudioThread) + { + if (! IsPaused()) + PauseAudio(); + + m_ResetingAudioThread = true; + + if (IsPaused()) + ResumeAudio(); + } + } + // only for audio thread bool IsPaused() { return m_PauseAudio; } @@ -119,6 +133,7 @@ private: DeviceWin* NewComment(int n, int x, int y); HostInfo m_Info; + bool m_ResetingAudioThread; static DeviceGUIInfo BuildDeviceGUIInfo(PluginInfo &PInfo);