From 813881ffe852d89cd878410ad5a406ffc4e459d1 Mon Sep 17 00:00:00 2001 From: aj_genius Date: Sat, 13 Mar 2004 07:40:29 +0000 Subject: [PATCH] adding the ability to reset any plugins state(but not settings) at any given point, so that changes to the audio subsystems can be applied live(needed for jack). this is also usefull in that it can give the ability for a Reset button on the toolbar along side a play/pause button for being able to at any point completely kill audio and reset to begining(usefull for recording takes where you want it to start at specific point w/out the delays echos etc overlapping for the first iteration. --- SpiralSound/ChannelHandler.C | 14 ++ SpiralSound/ChannelHandler.h | 2 + .../AnotherFilterPlugin/AnotherFilterPlugin.C | 7 + .../AnotherFilterPlugin/AnotherFilterPlugin.h | 4 +- .../Plugins/BeatMatchPlugin/BeatMatchPlugin.C | 10 ++ .../Plugins/BeatMatchPlugin/BeatMatchPlugin.h | 2 + .../Plugins/CounterPlugin/CounterPlugin.C | 9 ++ .../Plugins/CounterPlugin/CounterPlugin.h | 2 + SpiralSound/Plugins/DelayPlugin/DelayPlugin.C | 9 ++ SpiralSound/Plugins/DelayPlugin/DelayPlugin.h | 1 + .../DistributorPlugin/DistributorPlugin.C | 9 ++ .../DistributorPlugin/DistributorPlugin.h | 1 + SpiralSound/Plugins/EchoPlugin/EchoPlugin.C | 14 ++ SpiralSound/Plugins/EchoPlugin/EchoPlugin.h | 2 + .../EnvFollowerPlugin/EnvFollowerPlugin.C | 6 + .../EnvFollowerPlugin/EnvFollowerPlugin.h | 2 + .../Plugins/EnvelopePlugin/EnvelopePlugin.C | 8 + .../Plugins/EnvelopePlugin/EnvelopePlugin.h | 2 + .../Plugins/FilterPlugin/FilterPlugin.C | 8 + .../Plugins/FilterPlugin/FilterPlugin.h | 2 +- .../Plugins/FlipflopPlugin/FlipflopPlugin.C | 9 ++ .../Plugins/FlipflopPlugin/FlipflopPlugin.h | 1 + .../FormantFilterPlugin/FormantFilterPlugin.C | 35 +++-- .../FormantFilterPlugin/FormantFilterPlugin.h | 2 + .../Plugins/LADSPAPlugin/LADSPAPlugin.C | 148 +++++++++++------- .../Plugins/LADSPAPlugin/LADSPAPlugin.h | 5 +- SpiralSound/Plugins/LFOPlugin/LFOPlugin.C | 10 ++ SpiralSound/Plugins/LFOPlugin/LFOPlugin.h | 2 + .../Plugins/MasherPlugin/MasherPlugin.C | 8 + .../Plugins/MasherPlugin/MasherPlugin.h | 1 + .../Plugins/MatrixPlugin/MatrixPlugin.C | 19 +++ .../Plugins/MatrixPlugin/MatrixPlugin.h | 1 + SpiralSound/Plugins/MeterPlugin/MeterPlugin.C | 9 ++ SpiralSound/Plugins/MeterPlugin/MeterPlugin.h | 1 + .../Plugins/MixSwitchPlugin/MixSwitchPlugin.C | 14 +- .../Plugins/MixSwitchPlugin/MixSwitchPlugin.h | 1 + .../MoogFilterPlugin/MoogFilterPlugin.C | 7 + .../MoogFilterPlugin/MoogFilterPlugin.h | 2 + .../Plugins/NoteSnapPlugin/NoteSnapPlugin.C | 6 + .../Plugins/NoteSnapPlugin/NoteSnapPlugin.h | 1 + .../OscillatorPlugin/OscillatorPlugin.C | 9 ++ .../OscillatorPlugin/OscillatorPlugin.h | 2 + .../Plugins/OutputPlugin/OutputPlugin.C | 30 ++++ .../Plugins/OutputPlugin/OutputPlugin.h | 2 + .../PoshSamplerPlugin/PoshSamplerPlugin.C | 12 ++ .../PoshSamplerPlugin/PoshSamplerPlugin.h | 2 + .../Plugins/SVFilterPlugin/SVFilterPlugin.C | 7 + .../Plugins/SVFilterPlugin/SVFilterPlugin.h | 2 + .../SampleHoldPlugin/SampleHoldPlugin.C | 7 + .../SampleHoldPlugin/SampleHoldPlugin.h | 2 + SpiralSound/Plugins/ScopePlugin/ScopePlugin.C | 9 ++ SpiralSound/Plugins/ScopePlugin/ScopePlugin.h | 1 + .../SeqSelectorPlugin/SeqSelectorPlugin.C | 8 + .../SeqSelectorPlugin/SeqSelectorPlugin.h | 1 + .../Plugins/SmoothPlugin/SmoothPlugin.C | 6 + .../Plugins/SmoothPlugin/SmoothPlugin.h | 1 + .../SpiralLoopPlugin/SpiralLoopPlugin.C | 8 + .../SpiralLoopPlugin/SpiralLoopPlugin.h | 2 + SpiralSound/Plugins/SpiralPlugin.C | 14 ++ SpiralSound/Plugins/SpiralPlugin.h | 3 + .../SplitSwitchPlugin/SplitSwitchPlugin.C | 9 ++ .../SplitSwitchPlugin/SplitSwitchPlugin.h | 1 + .../Plugins/StreamPlugin/StreamPlugin.C | 9 ++ .../Plugins/StreamPlugin/StreamPlugin.h | 2 + .../WaveShaperPlugin/WaveShaperPlugin.C | 6 + .../WaveShaperPlugin/WaveShaperPlugin.h | 1 + .../Plugins/WaveTablePlugin/WaveTablePlugin.C | 16 ++ .../Plugins/WaveTablePlugin/WaveTablePlugin.h | 2 + SpiralSynthModular.C | 33 ++-- SpiralSynthModular.h | 15 ++ 70 files changed, 524 insertions(+), 94 deletions(-) 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);