Browse Source

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.
master
aj_genius 21 years ago
parent
commit
813881ffe8
70 changed files with 524 additions and 94 deletions
  1. +14
    -0
      SpiralSound/ChannelHandler.C
  2. +2
    -0
      SpiralSound/ChannelHandler.h
  3. +7
    -0
      SpiralSound/Plugins/AnotherFilterPlugin/AnotherFilterPlugin.C
  4. +2
    -2
      SpiralSound/Plugins/AnotherFilterPlugin/AnotherFilterPlugin.h
  5. +10
    -0
      SpiralSound/Plugins/BeatMatchPlugin/BeatMatchPlugin.C
  6. +2
    -0
      SpiralSound/Plugins/BeatMatchPlugin/BeatMatchPlugin.h
  7. +9
    -0
      SpiralSound/Plugins/CounterPlugin/CounterPlugin.C
  8. +2
    -0
      SpiralSound/Plugins/CounterPlugin/CounterPlugin.h
  9. +9
    -0
      SpiralSound/Plugins/DelayPlugin/DelayPlugin.C
  10. +1
    -0
      SpiralSound/Plugins/DelayPlugin/DelayPlugin.h
  11. +9
    -0
      SpiralSound/Plugins/DistributorPlugin/DistributorPlugin.C
  12. +1
    -0
      SpiralSound/Plugins/DistributorPlugin/DistributorPlugin.h
  13. +14
    -0
      SpiralSound/Plugins/EchoPlugin/EchoPlugin.C
  14. +2
    -0
      SpiralSound/Plugins/EchoPlugin/EchoPlugin.h
  15. +6
    -0
      SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPlugin.C
  16. +2
    -0
      SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPlugin.h
  17. +8
    -0
      SpiralSound/Plugins/EnvelopePlugin/EnvelopePlugin.C
  18. +2
    -0
      SpiralSound/Plugins/EnvelopePlugin/EnvelopePlugin.h
  19. +8
    -0
      SpiralSound/Plugins/FilterPlugin/FilterPlugin.C
  20. +1
    -1
      SpiralSound/Plugins/FilterPlugin/FilterPlugin.h
  21. +9
    -0
      SpiralSound/Plugins/FlipflopPlugin/FlipflopPlugin.C
  22. +1
    -0
      SpiralSound/Plugins/FlipflopPlugin/FlipflopPlugin.h
  23. +21
    -14
      SpiralSound/Plugins/FormantFilterPlugin/FormantFilterPlugin.C
  24. +2
    -0
      SpiralSound/Plugins/FormantFilterPlugin/FormantFilterPlugin.h
  25. +90
    -58
      SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.C
  26. +4
    -1
      SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.h
  27. +10
    -0
      SpiralSound/Plugins/LFOPlugin/LFOPlugin.C
  28. +2
    -0
      SpiralSound/Plugins/LFOPlugin/LFOPlugin.h
  29. +8
    -0
      SpiralSound/Plugins/MasherPlugin/MasherPlugin.C
  30. +1
    -0
      SpiralSound/Plugins/MasherPlugin/MasherPlugin.h
  31. +19
    -0
      SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.C
  32. +1
    -0
      SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.h
  33. +9
    -0
      SpiralSound/Plugins/MeterPlugin/MeterPlugin.C
  34. +1
    -0
      SpiralSound/Plugins/MeterPlugin/MeterPlugin.h
  35. +13
    -1
      SpiralSound/Plugins/MixSwitchPlugin/MixSwitchPlugin.C
  36. +1
    -0
      SpiralSound/Plugins/MixSwitchPlugin/MixSwitchPlugin.h
  37. +7
    -0
      SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPlugin.C
  38. +2
    -0
      SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPlugin.h
  39. +6
    -0
      SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPlugin.C
  40. +1
    -0
      SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPlugin.h
  41. +9
    -0
      SpiralSound/Plugins/OscillatorPlugin/OscillatorPlugin.C
  42. +2
    -0
      SpiralSound/Plugins/OscillatorPlugin/OscillatorPlugin.h
  43. +30
    -0
      SpiralSound/Plugins/OutputPlugin/OutputPlugin.C
  44. +2
    -0
      SpiralSound/Plugins/OutputPlugin/OutputPlugin.h
  45. +12
    -0
      SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPlugin.C
  46. +2
    -0
      SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPlugin.h
  47. +7
    -0
      SpiralSound/Plugins/SVFilterPlugin/SVFilterPlugin.C
  48. +2
    -0
      SpiralSound/Plugins/SVFilterPlugin/SVFilterPlugin.h
  49. +7
    -0
      SpiralSound/Plugins/SampleHoldPlugin/SampleHoldPlugin.C
  50. +2
    -0
      SpiralSound/Plugins/SampleHoldPlugin/SampleHoldPlugin.h
  51. +9
    -0
      SpiralSound/Plugins/ScopePlugin/ScopePlugin.C
  52. +1
    -0
      SpiralSound/Plugins/ScopePlugin/ScopePlugin.h
  53. +8
    -0
      SpiralSound/Plugins/SeqSelectorPlugin/SeqSelectorPlugin.C
  54. +1
    -0
      SpiralSound/Plugins/SeqSelectorPlugin/SeqSelectorPlugin.h
  55. +6
    -0
      SpiralSound/Plugins/SmoothPlugin/SmoothPlugin.C
  56. +1
    -0
      SpiralSound/Plugins/SmoothPlugin/SmoothPlugin.h
  57. +8
    -0
      SpiralSound/Plugins/SpiralLoopPlugin/SpiralLoopPlugin.C
  58. +2
    -0
      SpiralSound/Plugins/SpiralLoopPlugin/SpiralLoopPlugin.h
  59. +14
    -0
      SpiralSound/Plugins/SpiralPlugin.C
  60. +3
    -0
      SpiralSound/Plugins/SpiralPlugin.h
  61. +9
    -0
      SpiralSound/Plugins/SplitSwitchPlugin/SplitSwitchPlugin.C
  62. +1
    -0
      SpiralSound/Plugins/SplitSwitchPlugin/SplitSwitchPlugin.h
  63. +9
    -0
      SpiralSound/Plugins/StreamPlugin/StreamPlugin.C
  64. +2
    -0
      SpiralSound/Plugins/StreamPlugin/StreamPlugin.h
  65. +6
    -0
      SpiralSound/Plugins/WaveShaperPlugin/WaveShaperPlugin.C
  66. +1
    -0
      SpiralSound/Plugins/WaveShaperPlugin/WaveShaperPlugin.h
  67. +16
    -0
      SpiralSound/Plugins/WaveTablePlugin/WaveTablePlugin.C
  68. +2
    -0
      SpiralSound/Plugins/WaveTablePlugin/WaveTablePlugin.h
  69. +16
    -17
      SpiralSynthModular.C
  70. +15
    -0
      SpiralSynthModular.h

+ 14
- 0
SpiralSound/ChannelHandler.C View File

@@ -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<string,Channel*>::iterator i=m_ChannelMap.find(ID);
if (i==m_ChannelMap.end())
{
cerr<<"ChannelHandler: Channel ["<<ID<<"] does not exist"<<endl;
return;
}

pthread_mutex_lock(m_Mutex);
i->second->size = size;
pthread_mutex_unlock(m_Mutex);
}

void ChannelHandler::SetData(const string &ID, void *s)
{
map<string,Channel*>::iterator i=m_ChannelMap.find(ID);


+ 2
- 0
SpiralSound/ChannelHandler.h View File

@@ -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


+ 7
- 0
SpiralSound/Plugins/AnotherFilterPlugin/AnotherFilterPlugin.C View File

@@ -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;


+ 2
- 2
SpiralSound/Plugins/AnotherFilterPlugin/AnotherFilterPlugin.h View File

@@ -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;


+ 10
- 0
SpiralSound/Plugins/BeatMatchPlugin/BeatMatchPlugin.C View File

@@ -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; n<m_HostInfo->BUFSIZE; n++)


+ 2
- 0
SpiralSound/Plugins/BeatMatchPlugin/BeatMatchPlugin.h View File

@@ -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);


+ 9
- 0
SpiralSound/Plugins/CounterPlugin/CounterPlugin.C View File

@@ -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;


+ 2
- 0
SpiralSound/Plugins/CounterPlugin/CounterPlugin.h View File

@@ -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);


+ 9
- 0
SpiralSound/Plugins/DelayPlugin/DelayPlugin.C View File

@@ -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;


+ 1
- 0
SpiralSound/Plugins/DelayPlugin/DelayPlugin.h View File

@@ -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);


+ 9
- 0
SpiralSound/Plugins/DistributorPlugin/DistributorPlugin.C View File

@@ -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;


+ 1
- 0
SpiralSound/Plugins/DistributorPlugin/DistributorPlugin.h View File

@@ -31,6 +31,7 @@ public:
virtual SpiralGUIType* CreateGUI ();
virtual void Execute();
virtual void Reset();
virtual void ExecuteCommands();
virtual void StreamOut(std::ostream &s);


+ 14
- 0
SpiralSound/Plugins/EchoPlugin/EchoPlugin.C View File

@@ -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;


+ 2
- 0
SpiralSound/Plugins/EchoPlugin/EchoPlugin.h View File

@@ -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; }


+ 6
- 0
SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPlugin.C View File

@@ -79,6 +79,12 @@ SpiralGUIType *EnvFollowerPlugin::CreateGUI()
this,m_AudioCH,m_HostInfo);
}

void EnvFollowerPlugin::Reset()
{
ResetPorts();
m_Value = 0;
}

void EnvFollowerPlugin::Execute()
{
float Value;


+ 2
- 0
SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPlugin.h View File

@@ -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);


+ 8
- 0
SpiralSound/Plugins/EnvelopePlugin/EnvelopePlugin.C View File

@@ -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,


+ 2
- 0
SpiralSound/Plugins/EnvelopePlugin/EnvelopePlugin.h View File

@@ -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);


+ 8
- 0
SpiralSound/Plugins/FilterPlugin/FilterPlugin.C View File

@@ -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;


+ 1
- 1
SpiralSound/Plugins/FilterPlugin/FilterPlugin.h View File

@@ -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;}


+ 9
- 0
SpiralSound/Plugins/FlipflopPlugin/FlipflopPlugin.C View File

@@ -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;


+ 1
- 0
SpiralSound/Plugins/FlipflopPlugin/FlipflopPlugin.h View File

@@ -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);


+ 21
- 14
SpiralSound/Plugins/FormantFilterPlugin/FormantFilterPlugin.C View File

@@ -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)
{


+ 2
- 0
SpiralSound/Plugins/FormantFilterPlugin/FormantFilterPlugin.h View File

@@ -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);


+ 90
- 58
SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.C View File

@@ -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; n<m_PluginInfo.NumInputs; n++) AddInput();
for (int n=0; n<m_PluginInfo.NumOutputs; n++) AddOutput();

if (! m_SSMPluginReset)
{
for (int n=0; n<m_PluginInfo.NumInputs; n++) AddInput();
for (int n=0; n<m_PluginInfo.NumOutputs; n++) AddOutput();
}
//////////////////////////////
// Update the GUI stuff

string desc;
c=0;
for (unsigned int i = 0; i < m_PlugDesc->PortCount; 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<LADSPA_Data*>::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);
}
}
}



+ 4
- 1
SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.h View File

@@ -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<LADSPA_Data*> m_LADSPABufVec;
LADSPA_Handle m_PlugInstHandle;
std::vector<int> m_PortID;
std::vector<float> m_InputPortMin;
std::vector<float> m_InputPortMax;


+ 10
- 0
SpiralSound/Plugins/LFOPlugin/LFOPlugin.C View File

@@ -102,6 +102,16 @@ float LFOPlugin::AdjustPos (float pos) {
return pos;
}

void LFOPlugin::Reset()
{
ResetPorts();
for (int n=0; n<NUM_TABLES; n++)
m_Table[n].Allocate (m_TableLength);
WriteWaves();
m_CyclePos = 0;
m_Note = 0;
}

void LFOPlugin::Execute() {
float Incr, Pos;
for (int n=0; n<m_HostInfo->BUFSIZE; n++) {


+ 2
- 0
SpiralSound/Plugins/LFOPlugin/LFOPlugin.h View File

@@ -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;


+ 8
- 0
SpiralSound/Plugins/MasherPlugin/MasherPlugin.C View File

@@ -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();


+ 1
- 0
SpiralSound/Plugins/MasherPlugin/MasherPlugin.h View File

@@ -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);


+ 19
- 0
SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.C View File

@@ -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; n<m_HostInfo->BUFSIZE; n++)


+ 1
- 0
SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.h View File

@@ -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);


+ 9
- 0
SpiralSound/Plugins/MeterPlugin/MeterPlugin.C View File

@@ -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);


+ 1
- 0
SpiralSound/Plugins/MeterPlugin/MeterPlugin.h View File

@@ -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);


+ 13
- 1
SpiralSound/Plugins/MixSwitchPlugin/MixSwitchPlugin.C View File

@@ -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;


+ 1
- 0
SpiralSound/Plugins/MixSwitchPlugin/MixSwitchPlugin.h View File

@@ -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);


+ 7
- 0
SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPlugin.C View File

@@ -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;


+ 2
- 0
SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPlugin.h View File

@@ -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);


+ 6
- 0
SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPlugin.C View File

@@ -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;


+ 1
- 0
SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPlugin.h View File

@@ -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);


+ 9
- 0
SpiralSound/Plugins/OscillatorPlugin/OscillatorPlugin.C View File

@@ -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;


+ 2
- 0
SpiralSound/Plugins/OscillatorPlugin/OscillatorPlugin.h View File

@@ -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);



+ 30
- 0
SpiralSound/Plugins/OutputPlugin/OutputPlugin.C View File

@@ -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)


+ 2
- 0
SpiralSound/Plugins/OutputPlugin/OutputPlugin.h View File

@@ -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) {}


+ 12
- 0
SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPlugin.C View File

@@ -176,6 +176,18 @@ SpiralGUIType *PoshSamplerPlugin::CreateGUI()
this,m_AudioCH,m_HostInfo);
}

void PoshSamplerPlugin::Reset()
{
ResetPorts();
m_Current = 0;

for (int s=0; s<NUM_SAMPLES; s++)
{
m_SampleDescVec[s]->Pitch *= m_SampleDescVec[s]->SampleRate/(float)m_HostInfo->SAMPLERATE;
m_SampleDescVec[s]->LoopEnd=m_SampleVec[s]->GetLength()-1;
}
}

void PoshSamplerPlugin::Execute()
{
static bool Pong=false;


+ 2
- 0
SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPlugin.h View File

@@ -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);


+ 7
- 0
SpiralSound/Plugins/SVFilterPlugin/SVFilterPlugin.C View File

@@ -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;


+ 2
- 0
SpiralSound/Plugins/SVFilterPlugin/SVFilterPlugin.h View File

@@ -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);


+ 7
- 0
SpiralSound/Plugins/SampleHoldPlugin/SampleHoldPlugin.C View File

@@ -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.


+ 2
- 0
SpiralSound/Plugins/SampleHoldPlugin/SampleHoldPlugin.h View File

@@ -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) {}


+ 9
- 0
SpiralSound/Plugins/ScopePlugin/ScopePlugin.C View File

@@ -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);


+ 1
- 0
SpiralSound/Plugins/ScopePlugin/ScopePlugin.h View File

@@ -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:


+ 8
- 0
SpiralSound/Plugins/SeqSelectorPlugin/SeqSelectorPlugin.C View File

@@ -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; n<m_HostInfo->BUFSIZE; n++)


+ 1
- 0
SpiralSound/Plugins/SeqSelectorPlugin/SeqSelectorPlugin.h View File

@@ -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);


+ 6
- 0
SpiralSound/Plugins/SmoothPlugin/SmoothPlugin.C View File

@@ -79,6 +79,12 @@ SpiralGUIType *SmoothPlugin::CreateGUI()
this,m_AudioCH,m_HostInfo);
}

void SmoothPlugin::Reset()
{
ResetPorts();
m_Value = 0;
}

void SmoothPlugin::Execute()
{
float Value;


+ 1
- 0
SpiralSound/Plugins/SmoothPlugin/SmoothPlugin.h View File

@@ -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);


+ 8
- 0
SpiralSound/Plugins/SpiralLoopPlugin/SpiralLoopPlugin.C View File

@@ -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());


+ 2
- 0
SpiralSound/Plugins/SpiralLoopPlugin/SpiralLoopPlugin.h View File

@@ -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);


+ 14
- 0
SpiralSound/Plugins/SpiralPlugin.C View File

@@ -50,6 +50,20 @@ bool SpiralPlugin::Kill()
return true;
}

void SpiralPlugin::ResetPorts()
{
for (int n=0; n<m_PluginInfo.NumOutputs; n++)
{
m_Output[n]->Clear();
m_Output[n]->Allocate(m_HostInfo->BUFSIZE);
}
}

void SpiralPlugin::Reset()
{
ResetPorts();
}

PluginInfo &SpiralPlugin::Initialise(const HostInfo *Host)
{
m_HostInfo=Host;


+ 3
- 0
SpiralSound/Plugins/SpiralPlugin.h View File

@@ -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; }


+ 9
- 0
SpiralSound/Plugins/SplitSwitchPlugin/SplitSwitchPlugin.C View File

@@ -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;


+ 1
- 0
SpiralSound/Plugins/SplitSwitchPlugin/SplitSwitchPlugin.h View File

@@ -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);


+ 9
- 0
SpiralSound/Plugins/StreamPlugin/StreamPlugin.C View File

@@ -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; n<m_HostInfo->BUFSIZE; n++) {


+ 2
- 0
SpiralSound/Plugins/StreamPlugin/StreamPlugin.h View File

@@ -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);


+ 6
- 0
SpiralSound/Plugins/WaveShaperPlugin/WaveShaperPlugin.C View File

@@ -96,6 +96,12 @@ void WaveShaperPlugin::ExecuteCommands () {
}
}

void WaveShaperPlugin::Reset()
{
ResetPorts();
calc();
}

void WaveShaperPlugin::Execute () {
float k1, k2;
if (!InputExists (0)) return;


+ 1
- 0
SpiralSound/Plugins/WaveShaperPlugin/WaveShaperPlugin.h View File

@@ -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);


+ 16
- 0
SpiralSound/Plugins/WaveTablePlugin/WaveTablePlugin.C View File

@@ -160,6 +160,22 @@ void WaveTablePlugin::WriteWaves()
}
}

void WaveTablePlugin::Reset()
{
ResetPorts();

for (int n=0; n<NUM_TABLES; n++)
{
m_Table[n].Clear();
m_Table[n].Allocate(m_TableLength);
}
WriteWaves();
m_CyclePos=0;
m_Note=0;
}

void WaveTablePlugin::Execute()
{
float Freq=0;


+ 2
- 0
SpiralSound/Plugins/WaveTablePlugin/WaveTablePlugin.h View File

@@ -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);


+ 16
- 17
SpiralSynthModular.C View File

@@ -160,7 +160,7 @@ void SynthModular::Update()
//Erase Device from DeviceWinMap
m_DeviceWinMap.erase(i);
}
else if (i->second->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 "<<i->second->m_PluginID<<endl;
@@ -191,13 +191,23 @@ void SynthModular::Update()
cerr<<"Executing plugin "<<di->second->m_PluginID<<endl;
#endif

di->second->m_Device->Execute();
if (m_ResetingAudioThread)
{
di->second->m_Device->Reset();
}
else
{
di->second->m_Device->Execute();
}

#ifdef DEBUG_PLUGINS
cerr<<"Finished executing"<<endl;
#endif
}
}

//we can safely turn this off here
m_ResetingAudioThread = false;
}

//////////////////////////////////////////////////////////
@@ -720,15 +730,8 @@ void SynthModular::AddComment(int n)

void SynthModular::UpdateHostInfo()
{
// used to use string streams, but this seems to cause a compiler bug
// at the moment, so fall back to using a temporary file

//std::stringstream str;
fstream ofs("___temp.ssmtmp",ios::out);
//str<<*this;
ofs<<*this;

ClearUp();
/* Pause Audio */
PauseAudio();

// update the settings
m_Info.BUFSIZE = SpiralInfo::BUFSIZE;
@@ -739,12 +742,8 @@ void SynthModular::UpdateHostInfo()
m_Info.MIDIFILE = SpiralInfo::MIDIFILE;
m_Info.POLY = SpiralInfo::POLY;

fstream ifs("___temp.ssmtmp",ios::in);
//str>>*this;
ifs>>*this;

system("rm -f ___temp.ssmtmp");

/* Reset all plugin ports/buffers befure Resuming */
ResetAudio();
}

//////////////////////////////////////////////////////////


+ 15
- 0
SpiralSynthModular.h View File

@@ -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);



Loading…
Cancel
Save