Browse Source

merged branches

master
nebogeo 23 years ago
parent
commit
61dabf1965
100 changed files with 1563 additions and 722 deletions
  1. +312
    -0
      SpiralSound/ChannelHandler.C
  2. +136
    -0
      SpiralSound/ChannelHandler.h
  3. +1
    -1
      SpiralSound/Midi.h
  4. +6
    -5
      SpiralSound/Plugins/AmpPlugin/AmpPlugin.C
  5. +1
    -3
      SpiralSound/Plugins/AmpPlugin/AmpPlugin.h
  6. +11
    -9
      SpiralSound/Plugins/AmpPlugin/AmpPluginGUI.C
  7. +2
    -2
      SpiralSound/Plugins/AmpPlugin/AmpPluginGUI.h
  8. +5
    -0
      SpiralSound/Plugins/AmpPlugin/Makefile.in
  9. +5
    -0
      SpiralSound/Plugins/ComplexEnvelopePlugin/Makefile.in
  10. +54
    -59
      SpiralSound/Plugins/ControllerPlugin/ControllerPlugin.C
  11. +25
    -7
      SpiralSound/Plugins/ControllerPlugin/ControllerPlugin.h
  12. +37
    -10
      SpiralSound/Plugins/ControllerPlugin/ControllerPluginGUI.C
  13. +2
    -5
      SpiralSound/Plugins/ControllerPlugin/ControllerPluginGUI.h
  14. +5
    -0
      SpiralSound/Plugins/ControllerPlugin/Makefile.in
  15. +5
    -4
      SpiralSound/Plugins/DelayPlugin/DelayPlugin.C
  16. +1
    -7
      SpiralSound/Plugins/DelayPlugin/DelayPlugin.h
  17. +10
    -10
      SpiralSound/Plugins/DelayPlugin/DelayPluginGUI.C
  18. +3
    -6
      SpiralSound/Plugins/DelayPlugin/DelayPluginGUI.h
  19. +5
    -0
      SpiralSound/Plugins/DelayPlugin/Makefile.in
  20. +1
    -2
      SpiralSound/Plugins/DistributorPlugin/DistributorPlugin.C
  21. +0
    -3
      SpiralSound/Plugins/DistributorPlugin/DistributorPlugin.h
  22. +3
    -4
      SpiralSound/Plugins/DistributorPlugin/DistributorPluginGUI.C
  23. +3
    -6
      SpiralSound/Plugins/DistributorPlugin/DistributorPluginGUI.h
  24. +5
    -1
      SpiralSound/Plugins/DistributorPlugin/Makefile.in
  25. +5
    -4
      SpiralSound/Plugins/EchoPlugin/EchoPlugin.C
  26. +1
    -7
      SpiralSound/Plugins/EchoPlugin/EchoPlugin.h
  27. +11
    -11
      SpiralSound/Plugins/EchoPlugin/EchoPluginGUI.C
  28. +2
    -5
      SpiralSound/Plugins/EchoPlugin/EchoPluginGUI.h
  29. +5
    -0
      SpiralSound/Plugins/EchoPlugin/Makefile.in
  30. +2
    -2
      SpiralSound/Plugins/Edit.sh
  31. +5
    -4
      SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPlugin.C
  32. +0
    -5
      SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPlugin.h
  33. +8
    -9
      SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPluginGUI.C
  34. +3
    -5
      SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPluginGUI.h
  35. +5
    -0
      SpiralSound/Plugins/EnvFollowerPlugin/Makefile.in
  36. +9
    -4
      SpiralSound/Plugins/EnvelopePlugin/EnvelopePlugin.C
  37. +1
    -11
      SpiralSound/Plugins/EnvelopePlugin/EnvelopePlugin.h
  38. +24
    -24
      SpiralSound/Plugins/EnvelopePlugin/EnvelopePluginGUI.C
  39. +3
    -5
      SpiralSound/Plugins/EnvelopePlugin/EnvelopePluginGUI.h
  40. +5
    -0
      SpiralSound/Plugins/EnvelopePlugin/Makefile.in
  41. +9
    -5
      SpiralSound/Plugins/FilterPlugin/FilterPlugin.C
  42. +4
    -11
      SpiralSound/Plugins/FilterPlugin/FilterPlugin.h
  43. +13
    -13
      SpiralSound/Plugins/FilterPlugin/FilterPluginGUI.C
  44. +2
    -5
      SpiralSound/Plugins/FilterPlugin/FilterPluginGUI.h
  45. +5
    -0
      SpiralSound/Plugins/FilterPlugin/Makefile.in
  46. +37
    -5
      SpiralSound/Plugins/JackPlugin/JackPlugin.C
  47. +21
    -4
      SpiralSound/Plugins/JackPlugin/JackPlugin.h
  48. +23
    -4
      SpiralSound/Plugins/JackPlugin/JackPluginGUI.C
  49. +3
    -7
      SpiralSound/Plugins/JackPlugin/JackPluginGUI.h
  50. +5
    -0
      SpiralSound/Plugins/JackPlugin/Makefile.in
  51. +5
    -1
      SpiralSound/Plugins/JoystickPlugin/Makefile.in
  52. +135
    -28
      SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.C
  53. +58
    -12
      SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.h
  54. +22
    -90
      SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.C
  55. +6
    -31
      SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.h
  56. +5
    -0
      SpiralSound/Plugins/LADSPAPlugin/Makefile.in
  57. +4
    -3
      SpiralSound/Plugins/LFOPlugin/LFOPlugin.C
  58. +4
    -4
      SpiralSound/Plugins/LFOPlugin/LFOPlugin.h
  59. +14
    -17
      SpiralSound/Plugins/LFOPlugin/LFOPluginGUI.C
  60. +4
    -5
      SpiralSound/Plugins/LFOPlugin/LFOPluginGUI.h
  61. +7
    -2
      SpiralSound/Plugins/LFOPlugin/Makefile
  62. +5
    -0
      SpiralSound/Plugins/LFOPlugin/Makefile.in
  63. +5
    -0
      SpiralSound/Plugins/MatrixPlugin/Makefile.in
  64. +61
    -9
      SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.C
  65. +18
    -8
      SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.h
  66. +70
    -33
      SpiralSound/Plugins/MatrixPlugin/MatrixPluginGUI.C
  67. +6
    -8
      SpiralSound/Plugins/MatrixPlugin/MatrixPluginGUI.h
  68. +2
    -2
      SpiralSound/Plugins/MeterPlugin/Makefile
  69. +5
    -0
      SpiralSound/Plugins/MidiPlugin/Makefile.in
  70. +22
    -5
      SpiralSound/Plugins/MidiPlugin/MidiPlugin.C
  71. +12
    -5
      SpiralSound/Plugins/MidiPlugin/MidiPlugin.h
  72. +21
    -11
      SpiralSound/Plugins/MidiPlugin/MidiPluginGUI.C
  73. +2
    -5
      SpiralSound/Plugins/MidiPlugin/MidiPluginGUI.h
  74. +5
    -0
      SpiralSound/Plugins/MixerPlugin/Makefile.in
  75. +16
    -4
      SpiralSound/Plugins/MixerPlugin/MixerPlugin.C
  76. +13
    -2
      SpiralSound/Plugins/MixerPlugin/MixerPlugin.h
  77. +12
    -7
      SpiralSound/Plugins/MixerPlugin/MixerPluginGUI.C
  78. +3
    -5
      SpiralSound/Plugins/MixerPlugin/MixerPluginGUI.h
  79. +6
    -0
      SpiralSound/Plugins/MoogFilterPlugin/Makefile.in
  80. +5
    -4
      SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPlugin.C
  81. +0
    -5
      SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPlugin.h
  82. +9
    -9
      SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPluginGUI.C
  83. +2
    -5
      SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPluginGUI.h
  84. +5
    -0
      SpiralSound/Plugins/NoteSnapPlugin/Makefile.in
  85. +1
    -2
      SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPlugin.C
  86. +0
    -3
      SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPlugin.h
  87. +3
    -4
      SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPluginGUI.C
  88. +2
    -4
      SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPluginGUI.h
  89. +5
    -0
      SpiralSound/Plugins/OscillatorPlugin/Makefile.in
  90. +9
    -4
      SpiralSound/Plugins/OscillatorPlugin/OscillatorPlugin.C
  91. +0
    -9
      SpiralSound/Plugins/OscillatorPlugin/OscillatorPlugin.h
  92. +36
    -36
      SpiralSound/Plugins/OscillatorPlugin/OscillatorPluginGUI.C
  93. +2
    -5
      SpiralSound/Plugins/OscillatorPlugin/OscillatorPluginGUI.h
  94. +5
    -0
      SpiralSound/Plugins/OutputPlugin/Makefile.in
  95. +8
    -8
      SpiralSound/Plugins/OutputPlugin/OutputPlugin.C
  96. +3
    -6
      SpiralSound/Plugins/OutputPlugin/OutputPlugin.h
  97. +6
    -8
      SpiralSound/Plugins/OutputPlugin/OutputPluginGUI.C
  98. +2
    -5
      SpiralSound/Plugins/OutputPlugin/OutputPluginGUI.h
  99. +5
    -0
      SpiralSound/Plugins/PoshSamplerPlugin/Makefile.in
  100. +58
    -14
      SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPlugin.C

+ 312
- 0
SpiralSound/ChannelHandler.C View File

@@ -0,0 +1,312 @@
/* SpiralSound
* Copyleft (C) 2002 David Griffiths <dave@pawfal.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/

#include "ChannelHandler.h"
#include <unistd.h>

ChannelHandler::ChannelHandler() :
m_UpdateIndicator(false)
{
m_Mutex = new pthread_mutex_t;
m_Command[0]=0;
m_Command[1]=0;
m_BulkSrc=NULL;
m_BulkSize=0;
m_BulkPos=-1;
pthread_mutex_init(m_Mutex,NULL);
}

ChannelHandler::~ChannelHandler()
{
for(map<string,Channel*>::iterator i=m_ChannelMap.begin();
i!=m_ChannelMap.end(); i++)
{
free(i->second->data_buf);
delete i->second;
}

pthread_mutex_destroy(m_Mutex);
delete m_Mutex;
}

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

void ChannelHandler::UpdateDataNow()
{
// make sure the command is cleared even if
// we can't get a lock on the data
m_Command[0]=0;

if (pthread_mutex_trylock(m_Mutex))
{
m_UpdateIndicator=!m_UpdateIndicator;
for(map<string, Channel*>::iterator i=m_ChannelMap.begin();
i!=m_ChannelMap.end(); i++)
{
Channel *ch = i->second;
switch (ch->type)
{
case INPUT :
{
memcpy(ch->data,ch->data_buf,ch->size);
} break;
case OUTPUT :
{
memcpy(ch->data_buf,ch->data,ch->size);
} break;
// one off request type
case OUTPUT_REQUEST :
{
if (m_BulkPos!=-1 && m_BulkID==i->first)
{
// doing a bulk transfer
if (m_BulkPos+ch->size>m_BulkSize)
{
// last transfer
memcpy(ch->data_buf,((char*)m_BulkSrc)+m_BulkPos,m_BulkSize-m_BulkPos);
m_BulkPos=-1;
}
else
{
memcpy(ch->data_buf,((char*)m_BulkSrc)+m_BulkPos,ch->size);
m_BulkPos+=ch->size;
}
ch->updated=true;
}
else
{
// normal request transfer
if (ch->requested)
{
memcpy(ch->data_buf,ch->data,ch->size);
ch->updated=true;
}
}
} break;
}
}
m_Command[0]=m_Command[1];
// make sure the command only lasts one update
m_Command[1]=0;
pthread_mutex_unlock(m_Mutex);
//cerr<<"audio out mutex"<<endl;
//cerr<<"Update succeeded"<<endl;
}
else
{
//cerr<<"Couldn't get lock"<<endl;
}
}

void ChannelHandler::RegisterData(const string &ID, Type t,void* pData, int size)
{
// probably don't need to lock here, as if get/set are called before
// the channels have been set up they won't work anyway, but...
//pthread_mutex_lock(m_Mutex);

cerr<<"Registering ["<<ID<<"] "<<hex<<pData<<dec<<" as "<<size<<" bytes big"<<endl;

map<string,Channel*>::iterator i=m_ChannelMap.find(ID);
if (i!=m_ChannelMap.end())
{
cerr<<"Channel with ID ["<<ID<<"] already exists"<<endl;
}

Channel *NewCh=new Channel(t);
NewCh->data_buf = malloc(size);
NewCh->size = size;
NewCh->data = pData;
NewCh->requested = false;
NewCh->updated = false;
memcpy(NewCh->data_buf,NewCh->data,size);
m_ChannelMap[ID]=NewCh;

//pthread_mutex_unlock(m_Mutex);
}

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

void ChannelHandler::GetData(const string &ID, void *data)
{
map<string,Channel*>::iterator i=m_ChannelMap.find(ID);
if (i==m_ChannelMap.end())
{
cerr<<"ChannelHandler: Channel ["<<ID<<"] does not exist"<<endl;
return;
}

if (!data)
{
cerr<<"ChannelHandler: Can't copy data to uninitialised mem"<<endl;
return;
}

pthread_mutex_lock(m_Mutex);
if (i->second->type==OUTPUT || i->second->type==OUTPUT_REQUEST)
{
memcpy(data,i->second->data_buf,i->second->size);
}
else
{
cerr<<"ChannelHandler: Tried to Get() data registered as input"<<endl;
}//cerr<<"unlock 1"<<endl;
pthread_mutex_unlock(m_Mutex);
}

void ChannelHandler::SetData(const string &ID, void *s)
{
map<string,Channel*>::iterator i=m_ChannelMap.find(ID);
if (i==m_ChannelMap.end())
{
cerr<<"ChannelHandler: Channel ["<<ID<<"] does not exist"<<endl;
return;
}

//cerr<<"lock 2"<<endl;
pthread_mutex_lock(m_Mutex);
//cerr<<"lock 2 ok"<<endl;
if (i->second->type==INPUT)
{
memcpy(i->second->data_buf,s,i->second->size);
}
else
{
cerr<<"ChannelHandler: Tried to Set() data registered as output"<<endl;
}//cerr<<"unlock 2"<<endl;
pthread_mutex_unlock(m_Mutex);
}

void ChannelHandler::SetCommand(char command)
{
pthread_mutex_lock(m_Mutex);
m_Command[1]=command;
pthread_mutex_unlock(m_Mutex);
}

void ChannelHandler::FlushChannels()
{
pthread_mutex_lock(m_Mutex);
for(map<string, Channel*>::iterator i=m_ChannelMap.begin();
i!=m_ChannelMap.end(); i++)
{
memcpy(i->second->data_buf,i->second->data,i->second->size);
}
pthread_mutex_unlock(m_Mutex);
}

void ChannelHandler::RequestChannelAndWait(const string &ID)
{
map<string,Channel*>::iterator i=m_ChannelMap.find(ID);
if (i==m_ChannelMap.end())
{
cerr<<"ChannelHandler: Channel ["<<ID<<"] does not exist"<<endl;
return;
}
if (i->second->type!=OUTPUT_REQUEST)
{
cerr<<"ChannelHandler: Trying to request ["<<ID<<"] which is not a requestable channel"<<endl;
return;
}
pthread_mutex_lock(m_Mutex);
i->second->requested=true;
pthread_mutex_unlock(m_Mutex);
bool ready=false;
while (!ready)
{
usleep(10); // random amount of time :)
pthread_mutex_lock(m_Mutex);
ready=i->second->updated;
pthread_mutex_unlock(m_Mutex);
}
pthread_mutex_lock(m_Mutex);
i->second->requested=false;
i->second->updated=false;
pthread_mutex_unlock(m_Mutex);
}

void ChannelHandler::BulkTransfer(const string &ID, void *dest, int size)
{
map<string,Channel*>::iterator i=m_ChannelMap.find(ID);
if (i==m_ChannelMap.end())
{
cerr<<"ChannelHandler: Channel ["<<ID<<"] does not exist"<<endl;
return;
}
if (i->second->type!=OUTPUT_REQUEST)
{
cerr<<"ChannelHandler: Trying to bulk transfer on ["<<ID<<"] which is not a OUTPUT_REQUEST channel"<<endl;
return;
}
m_BulkPos=0;
m_BulkSize = size;
m_BulkID = ID;
int pos=0;
int buffersize=i->second->size;
// fill up the destination buffer
while (m_BulkPos!=-1)
{
RequestChannelAndWait(ID);
if (pos+buffersize>size)
{
// last copy
char *tempbuf = (char*)malloc(buffersize);
GetData(ID,(void*)tempbuf);
memcpy(((char*)dest)+pos,(void*)tempbuf,size-pos);
free(tempbuf);
}
else
{
GetData(ID,((char*)dest)+pos);
}
pos+=buffersize;
}
}

void ChannelHandler::Wait()
{
pthread_mutex_lock(m_Mutex);
bool current=m_UpdateIndicator;
bool last=m_UpdateIndicator;
pthread_mutex_unlock(m_Mutex);
while (current==last)
{
usleep(10);
pthread_mutex_lock(m_Mutex);
current=m_UpdateIndicator;
pthread_mutex_unlock(m_Mutex);
}
}

+ 136
- 0
SpiralSound/ChannelHandler.h View File

@@ -0,0 +1,136 @@
/* SpiralSound
* Copyleft (C) 2002 David Griffiths <dave@pawfal.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/

#ifndef CHANNEL_HANDLER
#define CHANNEL_HANDLER

#include <pthread.h>
#include <string>
#include <map>
#include <iostream.h>

class ChannelHandler
{
public:
enum Type{INPUT,OUTPUT,OUTPUT_REQUEST};

ChannelHandler();
~ChannelHandler();

// only call these from the audio thread

// don't call Register*() when the audio thread is running
void RegisterData(const string &ID, Type t, void *pData, int size);
void Register(const string &ID, bool* pData, Type t=ChannelHandler::INPUT)
{ RegisterData(ID, t,(bool*)pData,sizeof(bool)); }
void Register(const string &ID, char* pData, Type t=ChannelHandler::INPUT)
{ RegisterData(ID, t,(char*)pData,sizeof(char)); }
void Register(const string &ID, int* pData, Type t=ChannelHandler::INPUT)
{ RegisterData(ID, t,(int*)pData,sizeof(int)); }
void Register(const string &ID, long* pData, Type t=ChannelHandler::INPUT)
{ RegisterData(ID, t,(long*)pData,sizeof(long)); }
void Register(const string &ID, short* pData, Type t=ChannelHandler::INPUT)
{ RegisterData(ID, t,(short*)pData,sizeof(short)); }
void Register(const string &ID, float* pData, Type t=ChannelHandler::INPUT)
{ RegisterData(ID, t,(float*)pData,sizeof(float)); }
void Register(const string &ID, double* pData, Type t=ChannelHandler::INPUT)
{ RegisterData(ID, t,(double*)pData,sizeof(double)); }
void UpdateDataNow();
bool IsCommandWaiting() { return m_Command[0]; }
char GetCommand() { return m_Command[0]; }
// use bulk transfers to copy variable and large sized data to the gui
void SetupBulkTransfer(void *source) { m_BulkSrc=source; }
// only call these from the gui thread
// the ID comes from the order the channel is registered in
void GetData(const string &ID, void *data);
const bool GetBool(const string &ID) { bool t; GetData(ID,&t); return t; }
const char GetChar(const string &ID) { char t; GetData(ID,&t); return t; }
const int GetInt(const string &ID) { int t; GetData(ID,&t); return t; }
const long GetLong(const string &ID) { long t; GetData(ID,&t); return t; }
const short GetShort(const string &ID) { short t; GetData(ID,&t); return t; }
const float GetFloat(const string &ID) { float t; GetData(ID,&t); return t; }
const double GetDouble(const string &ID) { double t; GetData(ID,&t); return t; }

void SetData(const string &ID, void *s);
void Set(const string &ID, const bool& s) { SetData(ID,(void*)&s); }
void Set(const string &ID, const char& s) { SetData(ID,(void*)&s); }
void Set(const string &ID, const int& s) { SetData(ID,(void*)&s); }
void Set(const string &ID, const long& s) { SetData(ID,(void*)&s); }
void Set(const string &ID, const short& s) { SetData(ID,(void*)&s); }
void Set(const string &ID, const float& s) { SetData(ID,(void*)&s); }
void Set(const string &ID, const double& s) { SetData(ID,(void*)&s); }

void SetCommand(char command);

// initialises the data from the audio side to the internal buffers
void FlushChannels();
////////////////////////////////////////////
// This is useful for getting data from the audio side immediately,
// as it will block until complete, and for larger amounts of data, as
// it won't be doing the copy every update.
void RequestChannelAndWait(const string &ID);
///////////////////////////////////////////
// Use for copying large variable sized data very infrequently.
// uses an OUTPUT_REQUEST channel as a transfer buffer.
// Send the size needed to the gui down another channel.
// This can be a slowww function, as it can take many audio updates
// to complete, depending on the size of the buffer channel and the
// total size of the transfer.
void BulkTransfer(const string &ID, void *dest, int size);
// delays for one or more updates. use for syncing commands
void Wait();
private:

class Channel
{
public:
Channel(Type t) { type=t; }

Type type;
void *data_buf;
int size;
void *data;
bool requested;
bool updated;
};

map<string,Channel*> m_ChannelMap;
char m_Command[2];
bool m_UpdateIndicator;
void *m_BulkSrc;
int m_BulkSize;
int m_BulkPos;
string m_BulkID;
pthread_mutex_t* m_Mutex;
};

#endif

+ 1
- 1
SpiralSound/Midi.h View File

@@ -30,7 +30,7 @@

using namespace std;

#define KEYBOARD_SUPPORT
//#define KEYBOARD_SUPPORT


class MidiEvent


+ 6
- 5
SpiralSound/Plugins/AmpPlugin/AmpPlugin.C View File

@@ -54,7 +54,10 @@ m_DC(0.0f)
m_PluginInfo.PortTips.push_back("Input");
m_PluginInfo.PortTips.push_back("Amp CV");
m_PluginInfo.PortTips.push_back("DC Offset CV");
m_PluginInfo.PortTips.push_back("Output");
m_PluginInfo.PortTips.push_back("Output");
m_AudioCH->Register("Amp",&m_Amp);
m_AudioCH->Register("DC",&m_DC);
}

AmpPlugin::~AmpPlugin()
@@ -68,11 +71,9 @@ PluginInfo &AmpPlugin::Initialise(const HostInfo *Host)

SpiralGUIType *AmpPlugin::CreateGUI()
{
m_GUI = new AmpPluginGUI(m_PluginInfo.Width,
return new AmpPluginGUI(m_PluginInfo.Width,
m_PluginInfo.Height,
this,m_HostInfo);
m_GUI->hide();
return m_GUI;
this,m_AudioCH,m_HostInfo);
}

void AmpPlugin::Execute()


+ 1
- 3
SpiralSound/Plugins/AmpPlugin/AmpPlugin.h View File

@@ -37,9 +37,7 @@ public:
// has to be defined in the plugin
virtual void UpdateGUI() { Fl::check(); }
void SetAmp(float s) { m_Amp=s; }
void SetDC(float s) { m_DC=s; }
float GetAmp() { return m_Amp; }
float GetAmp() { return m_Amp; }
float GetDC() { return m_DC; }
void Randomise();


+ 11
- 9
SpiralSound/Plugins/AmpPlugin/AmpPluginGUI.C View File

@@ -26,8 +26,8 @@ static const int GUIBG2_COLOUR = 145;
////////////////////////////////////////////
AmpPluginGUI::AmpPluginGUI(int w, int h,AmpPlugin *o,const HostInfo *Info) :
SpiralPluginGUI(w,h,o)
AmpPluginGUI::AmpPluginGUI(int w, int h,AmpPlugin *o,ChannelHandler *ch,const HostInfo *Info) :
SpiralPluginGUI(w,h,o,ch)
{
m_Plugin=o;
@@ -79,14 +79,16 @@ SpiralPluginGUI(w,h,o)
extern "C" int sprintf(char *,const char *,...);
void AmpPluginGUI::UpdateValues()
void AmpPluginGUI::UpdateValues(SpiralPlugin *o)
{
m_Amp->value(2.0f-m_Plugin->GetAmp());
m_DC->value(2.0f-m_Plugin->GetDC());
AmpPlugin* Plugin = (AmpPlugin*)o;
m_Amp->value(2.0f-Plugin->GetAmp());
m_DC->value(2.0f-Plugin->GetDC());
char str[10];
sprintf(str,"%4.2f",m_Plugin->GetAmp());
sprintf(str,"%4.2f",Plugin->GetAmp());
m_out_gain->value(str);
sprintf(str,"%4.2f",m_Plugin->GetDC());
sprintf(str,"%4.2f",Plugin->GetDC());
m_out_DC->value(str);
}
@@ -95,7 +97,7 @@ inline void AmpPluginGUI::cb_Amp_i(Fl_Slider* o, void* v)
char str[10];
float value=2.0f-o->value();
m_Plugin->SetAmp(value);
m_GUICH->Set("Amp",value);
sprintf(str,"%4.2f",value);
m_out_gain->value(str);
}
@@ -106,7 +108,7 @@ inline void AmpPluginGUI::cb_DC_i(Fl_Slider* o, void* v)
{
char str[10];
float value=2.0f-o->value();
m_Plugin->SetDC(value);
m_GUICH->Set("DC",value);
sprintf(str,"%4.2f",value);
m_out_DC->value(str);
}


+ 2
- 2
SpiralSound/Plugins/AmpPlugin/AmpPluginGUI.h View File

@@ -33,9 +33,9 @@
class AmpPluginGUI : public SpiralPluginGUI
{
public:
AmpPluginGUI(int w, int h, AmpPlugin *o,const HostInfo *Info);
AmpPluginGUI(int w, int h, AmpPlugin *o,ChannelHandler *ch,const HostInfo *Info);
virtual void UpdateValues();
virtual void UpdateValues(SpiralPlugin *o);
virtual SpiralPlugin* GetPlugin() { return m_Plugin; }
AmpPlugin *m_Plugin;


+ 5
- 0
SpiralSound/Plugins/AmpPlugin/Makefile.in View File

@@ -43,6 +43,7 @@ mandir = @mandir@

HEADERS = ../SpiralPlugin.h \
../SpiralPluginGUI.h \
../../ChannelHandler.h \
../Widgets/Fl_Knob.H \
../Widgets/Fl_DragBar.H \
../../Sample.h \
@@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \
AmpPluginGUI.h
SOURCES = ../SpiralPlugin.C \
../SpiralPluginGUI.C \
../../ChannelHandler.C \
../Widgets/Fl_Knob.cxx \
../Widgets/Fl_DragBar.cxx \
../../Sample.C \
@@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \
AmpPluginGUI.C
OBJECTS = ../SpiralPlugin.o \
../SpiralPluginGUI.o \
../../ChannelHandler.o \
../Widgets/Fl_Knob.o \
../Widgets/Fl_DragBar.o \
../../Sample.o \
@@ -162,3 +165,5 @@ AmpPluginGUI.o: AmpPluginGUI.C \
../SpiralPluginGUI.h \
../Widgets/Fl_DragBar.H

../../ChannelHandler.o: ../../ChannelHandler.C \
../../ChannelHandler.h

+ 5
- 0
SpiralSound/Plugins/ComplexEnvelopePlugin/Makefile.in View File

@@ -43,6 +43,7 @@ mandir = @mandir@

HEADERS = ../SpiralPlugin.h \
../SpiralPluginGUI.h \
../../ChannelHandler.h \
../Widgets/Fl_Knob.H \
../Widgets/Fl_DragBar.H \
../../Sample.h \
@@ -51,6 +52,7 @@ HEADERS = ../SpiralPlugin.h \
ComplexEnvelopePluginGUI.h
SOURCES = ../SpiralPlugin.C \
../SpiralPluginGUI.C \
../../ChannelHandler.C \
../Widgets/Fl_Knob.cxx \
../Widgets/Fl_DragBar.cxx \
../../Sample.C \
@@ -59,6 +61,7 @@ SOURCES = ../SpiralPlugin.C \
ComplexEnvelopePluginGUI.C
OBJECTS = ../SpiralPlugin.o \
../SpiralPluginGUI.o \
../../ChannelHandler.o \
../Widgets/Fl_Knob.o \
../Widgets/Fl_DragBar.o \
../../Sample.o \
@@ -170,3 +173,5 @@ ComplexEnvelopePluginGUI.o: ComplexEnvelopePluginGUI.C \
Bezier.h \
../Widgets/Fl_DragBar.H

../../ChannelHandler.o: ../../ChannelHandler.C \
../../ChannelHandler.h

+ 54
- 59
SpiralSound/Plugins/ControllerPlugin/ControllerPlugin.C View File

@@ -60,6 +60,12 @@ m_Num(4)
{
m_ChannelVal[n]=0.0f;
}
m_AudioCH->Register("Number",&m_GUIArgs.Number);
m_AudioCH->Register("Value",&m_GUIArgs.Value);
m_AudioCH->Register("Min",&m_GUIArgs.Min);
m_AudioCH->Register("Max",&m_GUIArgs.Max);
m_AudioCH->RegisterData("Name",ChannelHandler::INPUT,m_GUIArgs.Name,sizeof(m_GUIArgs.Name));
}

ControllerPlugin::~ControllerPlugin()
@@ -73,11 +79,9 @@ PluginInfo &ControllerPlugin::Initialise(const HostInfo *Host)

SpiralGUIType *ControllerPlugin::CreateGUI()
{
m_GUI = new ControllerPluginGUI(m_PluginInfo.Width,
return new ControllerPluginGUI(m_PluginInfo.Width,
m_PluginInfo.Height,
this,m_HostInfo);
m_GUI->hide();
return m_GUI;
this,m_AudioCH,m_HostInfo);
}

void ControllerPlugin::Execute()
@@ -91,6 +95,22 @@ void ControllerPlugin::Execute()
}
}

void ControllerPlugin::ExecuteCommands()
{
if (m_AudioCH->IsCommandWaiting())
{
switch (m_AudioCH->GetCommand())
{
case (SETCHANNEL) :
SetChannel(m_GUIArgs.Number,m_GUIArgs.Value,m_GUIArgs.Min,m_GUIArgs.Max,m_GUIArgs.Name);
break;
case (SETNUM) :
SetNum(m_GUIArgs.Number);
break;
}
}
}

void ControllerPlugin::SetNum(int n)
{
// once to clear the connections with the current info
@@ -114,7 +134,7 @@ void ControllerPlugin::SetNum(int n)
m_Num=n;
m_PluginInfo.NumOutputs=n;
// do the actual update
UpdatePluginInfoWithHost();
}
@@ -133,34 +153,28 @@ void ControllerPlugin::StreamOut(ostream &s)
switch (m_Version)
{
case 1:
{
for (int n=0; n<4; n++)
{
s<<m_ChannelVal[n]<<" ";
}
} break;
case 2:
case 3:
{
s<<m_Num<<" ";
for (int n=0; n<m_Num; n++)
{
s<<m_ChannelVal[n]<<" ";
}
//s<<*(ControllerPluginGUI*)m_GUI<<" ";
((ControllerPluginGUI*)m_GUI)->StreamOut(s);
} break;
case 3:
{
s<<m_Num<<" ";
for (int n=0; n<m_Num; n++)
{
s<<m_ChannelVal[n]<<" ";
{
s<<m_Names[n].size()<<endl;
s<<m_Names[n]<<" ";
s<<m_MinVal[n]<<" ";
s<<m_MaxVal[n]<<" ";
s<<m_ChannelVal[n]<<endl;
}
((ControllerPluginGUI*)m_GUI)->StreamOut(s);
} break;
default :
cerr<<"ControllerPlugin - I dont support this streaming version any more"<<endl;
break;
}
}

@@ -171,15 +185,7 @@ void ControllerPlugin::StreamIn(istream &s)
switch (version)
{
case 1:
{
for (int n=0; n<4; n++)
{
s>>m_ChannelVal[n];
}
} break;
case 2:
case 3:
{
Clear();
@@ -190,35 +196,21 @@ void ControllerPlugin::StreamIn(istream &s)
s>>m_ChannelVal[n];
}
s>>*(ControllerPluginGUI*)m_GUI;
// add the channels one by one
char Buf[4096];
int size;
s>>m_Num;
for (int n=0; n<m_Num; n++)
{
char t[256];
sprintf(t,"CV %d",n);
m_PluginInfo.PortTips.push_back(t);
AddOutput();
{
s>>size;
s.ignore(1);
s.get(Buf,size+1);
m_Names[n]=Buf;
s>>m_MinVal[n];
s>>m_MaxVal[n];
s>>m_ChannelVal[n];
}
m_PluginInfo.NumOutputs=m_Num;
UpdatePluginInfoWithHost();
} break;
case 3:
{
Clear();
s>>m_Num;
for (int n=0; n<m_Num; n++)
{
s>>m_ChannelVal[n];
}
((ControllerPluginGUI*)m_GUI)->StreamIn(s);
// add the channels one by one
for (int n=0; n<m_Num; n++)
{
@@ -230,7 +222,10 @@ void ControllerPlugin::StreamIn(istream &s)
m_PluginInfo.NumOutputs=m_Num;
UpdatePluginInfoWithHost();
} break;

default :
cerr<<"ControllerPlugin - I dont support this streaming version any more"<<endl;
break;
}
}

+ 25
- 7
SpiralSound/Plugins/ControllerPlugin/ControllerPlugin.h View File

@@ -33,21 +33,39 @@ public:
virtual PluginInfo &Initialise(const HostInfo *Host);
virtual SpiralGUIType *CreateGUI();
virtual void Execute();
virtual void ExecuteCommands();
virtual void StreamOut(ostream &s);
virtual void StreamIn(istream &s);
// has to be defined in the plugin
virtual void UpdateGUI() { Fl::check(); }
void SetChannel(int n, float s) { m_ChannelVal[n]=s; }
void SetNum(int n);
string GetName(int n) { return m_Names[n]; }
int GetNum() { return m_Num; }
float GetVal(int n) { return m_ChannelVal[n]; }
float GetMin(int n) { return m_MinVal[n]; }
float GetMax(int n) { return m_MaxVal[n]; }
enum GUICommands{NONE,SETCHANNEL,SETNUM};
struct GUIArgs
{
int Number;
float Value;
float Min;
float Max;
char Name[256];
};
private:
GUIArgs m_GUIArgs;
void SetChannel(int n, float s, float min, float max, char* name)
{ m_ChannelVal[n]=s; m_MinVal[n]=min; m_MaxVal[n]=max; m_Names[n]=name; }
void SetNum(int n);
void Clear();
int m_Num;
float m_ChannelVal[MAX_CHANNELS];
float m_ChannelVal[MAX_CHANNELS];
string m_Names[MAX_CHANNELS];
float m_MinVal[MAX_CHANNELS];
float m_MaxVal[MAX_CHANNELS];
};

#endif

+ 37
- 10
SpiralSound/Plugins/ControllerPlugin/ControllerPluginGUI.C View File

@@ -66,12 +66,10 @@ ControllerPluginGUI::CVGUI::CVGUI(int n, ControllerPluginGUI *p)

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

ControllerPluginGUI::ControllerPluginGUI(int w, int h,ControllerPlugin *o,const HostInfo *Info) :
SpiralPluginGUI(w,h,o),
ControllerPluginGUI::ControllerPluginGUI(int w, int h,ControllerPlugin *o,ChannelHandler *ch,const HostInfo *Info) :
SpiralPluginGUI(w,h,o,ch),
m_CVCount(0)
{
m_Plugin=o;
for (int n=0; n<MAX_CHANNELS; n++)
{
Numbers[n]=n;
@@ -126,8 +124,29 @@ void ControllerPluginGUI::Clear()
m_CVCount=0;
}

void ControllerPluginGUI::UpdateValues()
{
void ControllerPluginGUI::UpdateValues(SpiralPlugin *o)
{
ControllerPlugin *Plugin = (ControllerPlugin *)o;

int c;
string Title,Min,Max;
char temp[64];
Clear();
c=Plugin->GetNum();
for (int n=0; n<c; n++)
{
AddCV();
m_GuiVec[n]->m_Title->value(Plugin->GetName(n).c_str());
sprintf(temp,"%f",Plugin->GetMin(n));
m_GuiVec[n]->m_Min->value(temp);
sprintf(temp,"%f",Plugin->GetMax(n));
m_GuiVec[n]->m_Max->value(temp);
m_GuiVec[n]->m_Chan->value(Plugin->GetVal(n));
}
resize(x(),y(),c*60,h());
}
inline void ControllerPluginGUI::cb_Chan_i(Fl_Slider* o, void* v)
@@ -138,7 +157,14 @@ inline void ControllerPluginGUI::cb_Chan_i(Fl_Slider* o, void* v)
long max=strtol(m_GuiVec[num]->m_Min->value(),NULL,10);
long min=strtol(m_GuiVec[num]->m_Max->value(),NULL,10);
float val=o->value()*(max-min)+min;
m_Plugin->SetChannel(num,val);
m_GUICH->Set("Number",num);
m_GUICH->Set("Value",val);
m_GUICH->Set("Min",(int)min);
m_GUICH->Set("Max",(int)max);
char temp[256];
sprintf(temp,"%s",m_GuiVec[num]->m_Title->value());
m_GUICH->Set("Name",temp);
m_GUICH->SetCommand(ControllerPlugin::SETCHANNEL);
}
void ControllerPluginGUI::cb_Chan(Fl_Slider* o, void* v)
{ ((ControllerPluginGUI*)(o->parent()->user_data()))->cb_Chan_i(o,v);}
@@ -150,8 +176,8 @@ inline void ControllerPluginGUI::cb_Add_i(Fl_Button* o, void* v)
AddCV();
resize(x(),y(),w()+60,h());
redraw();
m_Plugin->SetNum(m_GuiVec.size());
m_GUICH->Set("Number",(int)m_GuiVec.size());
m_GUICH->SetCommand(ControllerPlugin::SETNUM);
}
}
void ControllerPluginGUI::cb_Add(Fl_Button* o, void* v)
@@ -165,7 +191,8 @@ inline void ControllerPluginGUI::cb_Delete_i(Fl_Button* o, void* v)
resize(x(),y(),w()-60,h());
redraw();
m_Plugin->SetNum(m_GuiVec.size());
m_GUICH->Set("Number",(int)m_GuiVec.size());
m_GUICH->SetCommand(ControllerPlugin::SETNUM);
}
}
void ControllerPluginGUI::cb_Delete(Fl_Button* o, void* v)


+ 2
- 5
SpiralSound/Plugins/ControllerPlugin/ControllerPluginGUI.h View File

@@ -36,12 +36,9 @@ static int Numbers[MAX_CHANNELS];
class ControllerPluginGUI : public SpiralPluginGUI
{
public:
ControllerPluginGUI(int w, int h, ControllerPlugin *o,const HostInfo *Info);
ControllerPluginGUI(int w, int h, ControllerPlugin *o,ChannelHandler *ch,const HostInfo *Info);
virtual void UpdateValues();
virtual SpiralPlugin* GetPlugin() { return m_Plugin; }
ControllerPlugin *m_Plugin;
virtual void UpdateValues(SpiralPlugin *o);
void StreamIn(istream &s);
void StreamOut(ostream &s);


+ 5
- 0
SpiralSound/Plugins/ControllerPlugin/Makefile.in View File

@@ -43,6 +43,7 @@ mandir = @mandir@

HEADERS = ../SpiralPlugin.h \
../SpiralPluginGUI.h \
../../ChannelHandler.h \
../Widgets/Fl_Knob.H \
../Widgets/Fl_DragBar.H \
../../Sample.h \
@@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \
ControllerPluginGUI.h
SOURCES = ../SpiralPlugin.C \
../SpiralPluginGUI.C \
../../ChannelHandler.C \
../Widgets/Fl_Knob.cxx \
../Widgets/Fl_DragBar.cxx \
../../Sample.C \
@@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \
ControllerPluginGUI.C
OBJECTS = ../SpiralPlugin.o \
../SpiralPluginGUI.o \
../../ChannelHandler.o \
../Widgets/Fl_Knob.o \
../Widgets/Fl_DragBar.o \
../../Sample.o \
@@ -162,3 +165,5 @@ ControllerPluginGUI.o: ControllerPluginGUI.C \
../SpiralPluginGUI.h \
../Widgets/Fl_DragBar.H

../../ChannelHandler.o: ../../ChannelHandler.C \
../../ChannelHandler.h

+ 5
- 4
SpiralSound/Plugins/DelayPlugin/DelayPlugin.C View File

@@ -56,6 +56,9 @@ m_WriteHeadPos(0)
m_PluginInfo.PortTips.push_back("Delay CV");
m_PluginInfo.PortTips.push_back("ReadHead CV");
m_PluginInfo.PortTips.push_back("Output");
m_AudioCH->Register("Delay",&m_Delay);
m_AudioCH->Register("Mix",&m_Mix);
}

DelayPlugin::~DelayPlugin()
@@ -71,11 +74,9 @@ PluginInfo &DelayPlugin::Initialise(const HostInfo *Host)

SpiralGUIType *DelayPlugin::CreateGUI()
{
m_GUI = new DelayPluginGUI(m_PluginInfo.Width,
return new DelayPluginGUI(m_PluginInfo.Width,
m_PluginInfo.Height,
this,m_HostInfo);
m_GUI->hide();
return m_GUI;
this,m_AudioCH,m_HostInfo);
}

void DelayPlugin::Execute()


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

@@ -34,13 +34,7 @@ public:
virtual void StreamOut(ostream &s);
virtual void StreamIn(istream &s);
// has to be defined in the plugin
virtual void UpdateGUI() { Fl::check(); }
void SetDelay(float s) { m_Delay=s; }
void SetMix(float s) { m_Mix=s; }
float GetDelay() { return m_Delay; }
float GetDelay() { return m_Delay; }
float GetMix() { return m_Mix; }
void Randomise();


+ 10
- 10
SpiralSound/Plugins/DelayPlugin/DelayPluginGUI.C View File

@@ -26,11 +26,9 @@ static const int GUIBG2_COLOUR = 145;

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

DelayPluginGUI::DelayPluginGUI(int w, int h,DelayPlugin *o,const HostInfo *Info) :
SpiralPluginGUI(w,h,o)
{
m_Plugin=o;
DelayPluginGUI::DelayPluginGUI(int w, int h,DelayPlugin *o,ChannelHandler *ch,const HostInfo *Info) :
SpiralPluginGUI(w,h,o,ch)
{
m_Delay = new Fl_Slider(15, 20, 20, 70, "Delay");
m_Delay->type(4);
m_Delay->selection_color(GUI_COLOUR);
@@ -52,21 +50,23 @@ SpiralPluginGUI(w,h,o)
end();
}

void DelayPluginGUI::UpdateValues()
void DelayPluginGUI::UpdateValues(SpiralPlugin *o)
{
m_Delay->value(m_Plugin->GetDelay()-5.0f);
m_Mix->value(m_Plugin->GetMix());
DelayPlugin *Plugin = (DelayPlugin*)o;
m_Delay->value(Plugin->GetDelay()-5.0f);
m_Mix->value(Plugin->GetMix());
}

inline void DelayPluginGUI::cb_Delay_i(Fl_Slider* o, void* v)
{
float value=1.0f-o->value();
m_Plugin->SetDelay(value);
m_GUICH->Set("Delay",value);
}
void DelayPluginGUI::cb_Delay(Fl_Slider* o, void* v)
{ ((DelayPluginGUI*)(o->parent()))->cb_Delay_i(o,v); }

inline void DelayPluginGUI::cb_Mix_i(Fl_Knob* o, void* v)
{ m_Plugin->SetMix(o->value()); }
{ m_GUICH->Set("Mix",o->value()); }
void DelayPluginGUI::cb_Mix(Fl_Knob* o, void* v)
{ ((DelayPluginGUI*)(o->parent()))->cb_Mix_i(o,v); }

+ 3
- 6
SpiralSound/Plugins/DelayPlugin/DelayPluginGUI.h View File

@@ -32,13 +32,10 @@
class DelayPluginGUI : public SpiralPluginGUI
{
public:
DelayPluginGUI(int w, int h, DelayPlugin *o,const HostInfo *Info);
virtual void UpdateValues();
virtual SpiralPlugin* GetPlugin() { return m_Plugin; }
DelayPlugin *m_Plugin;
DelayPluginGUI(int w, int h, DelayPlugin *o,ChannelHandler *ch,const HostInfo *Info);
virtual void UpdateValues(SpiralPlugin *o);
private:
Fl_Slider *m_Delay;


+ 5
- 0
SpiralSound/Plugins/DelayPlugin/Makefile.in View File

@@ -43,6 +43,7 @@ mandir = @mandir@

HEADERS = ../SpiralPlugin.h \
../SpiralPluginGUI.h \
../../ChannelHandler.h \
../Widgets/Fl_Knob.H \
../Widgets/Fl_DragBar.H \
../../Sample.h \
@@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \
DelayPluginGUI.h
SOURCES = ../SpiralPlugin.C \
../SpiralPluginGUI.C \
../../ChannelHandler.C \
../Widgets/Fl_Knob.cxx \
../Widgets/Fl_DragBar.cxx \
../../Sample.C \
@@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \
DelayPluginGUI.C
OBJECTS = ../SpiralPlugin.o \
../SpiralPluginGUI.o \
../../ChannelHandler.o \
../Widgets/Fl_Knob.o \
../Widgets/Fl_DragBar.o \
../../Sample.o \
@@ -164,3 +167,5 @@ DelayPluginGUI.o: DelayPluginGUI.C \
../Widgets/Fl_DragBar.H \
../Widgets/Fl_Knob.H

../../ChannelHandler.o: ../../ChannelHandler.C \
../../ChannelHandler.h

+ 1
- 2
SpiralSound/Plugins/DistributorPlugin/DistributorPlugin.C View File

@@ -69,8 +69,7 @@ PluginInfo &DistributorPlugin::Initialise(const HostInfo *Host)

SpiralGUIType *DistributorPlugin::CreateGUI()
{
m_GUI=NULL;
return m_GUI;
return NULL;
}

void DistributorPlugin::Execute()


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

@@ -34,9 +34,6 @@ public:
virtual void StreamOut(ostream &s) {}
virtual void StreamIn(istream &s) {}
// has to be defined in the plugin
virtual void UpdateGUI() { Fl::check(); }

private:
bool m_Triggered;
bool m_Switch;


+ 3
- 4
SpiralSound/Plugins/DistributorPlugin/DistributorPluginGUI.C View File

@@ -26,16 +26,15 @@ static const int GUIBG2_COLOUR = 145;

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

DistributorPluginGUI::DistributorPluginGUI(int w, int h,DistributorPlugin *o,const HostInfo *Info) :
SpiralPluginGUI(w,h,o)
DistributorPluginGUI::DistributorPluginGUI(int w, int h,DistributorPlugin *o,ChannelHandler *ch,const HostInfo *Info) :
SpiralPluginGUI(w,h,o,ch)
{
m_Plugin=o;
end();
}



void DistributorPluginGUI::UpdateValues()
void DistributorPluginGUI::UpdateValues(SpiralPlugin *o)
{
}


+ 3
- 6
SpiralSound/Plugins/DistributorPlugin/DistributorPluginGUI.h View File

@@ -33,12 +33,9 @@
class DistributorPluginGUI : public SpiralPluginGUI
{
public:
DistributorPluginGUI(int w, int h, DistributorPlugin *o,const HostInfo *Info);
virtual void UpdateValues();
virtual SpiralPlugin* GetPlugin() { return m_Plugin; }
DistributorPlugin *m_Plugin;
DistributorPluginGUI(int w, int h, DistributorPlugin *o,ChannelHandler *ch,const HostInfo *Info);
virtual void UpdateValues(SpiralPlugin *o);

private:

//// Callbacks ////


+ 5
- 1
SpiralSound/Plugins/DistributorPlugin/Makefile.in View File

@@ -44,6 +44,7 @@ mandir = @mandir@

HEADERS = ../SpiralPlugin.h \
../SpiralPluginGUI.h \
../../ChannelHandler.h \
../Widgets/Fl_Knob.H \
../Widgets/Fl_DragBar.H \
../../Sample.h \
@@ -51,6 +52,7 @@ HEADERS = ../SpiralPlugin.h \
DistributorPluginGUI.h
SOURCES = ../SpiralPlugin.C \
../SpiralPluginGUI.C \
../../ChannelHandler.C \
../Widgets/Fl_Knob.cxx \
../Widgets/Fl_DragBar.cxx \
../../Sample.C \
@@ -58,6 +60,7 @@ SOURCES = ../SpiralPlugin.C \
DistributorPluginGUI.C
OBJECTS = ../SpiralPlugin.o \
../SpiralPluginGUI.o \
../../ChannelHandler.o \
../Widgets/Fl_Knob.o \
../Widgets/Fl_DragBar.o \
../../Sample.o \
@@ -167,4 +170,5 @@ DistributorPluginGUI.o: DistributorPluginGUI.C \
../SpiralPluginGUI.h \
../Widgets/Fl_DragBar.H


../../ChannelHandler.o: ../../ChannelHandler.C \
../../ChannelHandler.h

+ 5
- 4
SpiralSound/Plugins/EchoPlugin/EchoPlugin.C View File

@@ -55,6 +55,9 @@ m_HeadPos(0)
m_PluginInfo.PortTips.push_back("Delay CV");
m_PluginInfo.PortTips.push_back("Feedback CV");
m_PluginInfo.PortTips.push_back("Output");
m_AudioCH->Register("Delay",&m_Delay);
m_AudioCH->Register("Feedback",&m_Feedback);
}

EchoPlugin::~EchoPlugin()
@@ -70,11 +73,9 @@ PluginInfo &EchoPlugin::Initialise(const HostInfo *Host)

SpiralGUIType *EchoPlugin::CreateGUI()
{
m_GUI = new EchoPluginGUI(m_PluginInfo.Width,
return new EchoPluginGUI(m_PluginInfo.Width,
m_PluginInfo.Height,
this,m_HostInfo);
m_GUI->hide();
return m_GUI;
this,m_AudioCH,m_HostInfo);
}

void EchoPlugin::Execute()


+ 1
- 7
SpiralSound/Plugins/EchoPlugin/EchoPlugin.h View File

@@ -33,13 +33,7 @@ public:
virtual void Execute();
virtual void StreamOut(ostream &s);
virtual void StreamIn(istream &s);
// has to be defined in the plugin
virtual void UpdateGUI() { Fl::check(); }
void SetDelay(float s) { m_Delay=s; }
void SetFeedback(float s) { m_Feedback=s; }
float GetDelay() { return m_Delay; }
float GetFeedback() { return m_Feedback; }


+ 11
- 11
SpiralSound/Plugins/EchoPlugin/EchoPluginGUI.C View File

@@ -26,11 +26,9 @@ static const int GUIBG2_COLOUR = 145;

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

EchoPluginGUI::EchoPluginGUI(int w, int h,EchoPlugin *o,const HostInfo *Info) :
SpiralPluginGUI(w,h,o)
EchoPluginGUI::EchoPluginGUI(int w, int h,EchoPlugin *o,ChannelHandler *ch,const HostInfo *Info) :
SpiralPluginGUI(w,h,o,ch)
{
m_Plugin=o;
m_Delay = new Fl_Slider(15, 20, 20, 70, "Delay");
m_Delay->type(4);
m_Delay->selection_color(GUI_COLOUR);
@@ -79,14 +77,16 @@ SpiralPluginGUI(w,h,o)

extern "C" int sprintf(char *,const char *,...);

void EchoPluginGUI::UpdateValues()
void EchoPluginGUI::UpdateValues(SpiralPlugin *o)
{
m_Delay->value(1.0f-m_Plugin->GetDelay());
m_Feedback->value(1.1f-m_Plugin->GetFeedback());
EchoPlugin *Plugin = (EchoPlugin*)o;
m_Delay->value(1.0f-Plugin->GetDelay());
m_Feedback->value(1.1f-Plugin->GetFeedback());
char str[10];
sprintf(str,"%5.3f s", m_Plugin->GetDelay());
sprintf(str,"%5.3f s", Plugin->GetDelay());
m_out_delay->value(str);
sprintf(str,"%5.1f %%", 100*m_Plugin->GetFeedback());
sprintf(str,"%5.1f %%", 100*Plugin->GetFeedback());
m_out_feedback->value(str);
}

@@ -94,7 +94,7 @@ inline void EchoPluginGUI::cb_Delay_i(Fl_Slider* o, void* v)
{
char str[10];
float value=1.0f-o->value();
m_Plugin->SetDelay(value);
m_GUICH->Set("Delay",value);
sprintf(str,"%5.3f s", value);
m_out_delay->value(str);
}
@@ -105,7 +105,7 @@ void EchoPluginGUI::cb_Delay(Fl_Slider* o, void* v)
inline void EchoPluginGUI::cb_Feedback_i(Fl_Slider* o, void* v)
{
char str[10];
m_Plugin->SetFeedback(1.1f-o->value());
m_GUICH->Set("Feedback",(float)(1.1f-o->value()));
sprintf(str,"%5.1f %%", 100*(1.1f-o->value()));
m_out_feedback->value(str);
}


+ 2
- 5
SpiralSound/Plugins/EchoPlugin/EchoPluginGUI.h View File

@@ -35,12 +35,9 @@
class EchoPluginGUI : public SpiralPluginGUI
{
public:
EchoPluginGUI(int w, int h, EchoPlugin *o,const HostInfo *Info);
EchoPluginGUI(int w, int h, EchoPlugin *o,ChannelHandler *ch,const HostInfo *Info);
virtual void UpdateValues();
virtual SpiralPlugin* GetPlugin() { return m_Plugin; }
EchoPlugin *m_Plugin;
virtual void UpdateValues(SpiralPlugin *o);
private:


+ 5
- 0
SpiralSound/Plugins/EchoPlugin/Makefile.in View File

@@ -43,6 +43,7 @@ mandir = @mandir@

HEADERS = ../SpiralPlugin.h \
../SpiralPluginGUI.h \
../../ChannelHandler.h \
../Widgets/Fl_Knob.H \
../Widgets/Fl_DragBar.H \
../../Sample.h \
@@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \
EchoPluginGUI.h
SOURCES = ../SpiralPlugin.C \
../SpiralPluginGUI.C \
../../ChannelHandler.C \
../Widgets/Fl_Knob.cxx \
../Widgets/Fl_DragBar.cxx \
../../Sample.C \
@@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \
EchoPluginGUI.C
OBJECTS = ../SpiralPlugin.o \
../SpiralPluginGUI.o \
../../ChannelHandler.o \
../Widgets/Fl_Knob.o \
../Widgets/Fl_DragBar.o \
../../Sample.o \
@@ -164,3 +167,5 @@ EchoPluginGUI.o: EchoPluginGUI.C \
../Widgets/Fl_DragBar.H \
../Widgets/Fl_Knob.H

../../ChannelHandler.o: ../../ChannelHandler.C \
../../ChannelHandler.h

+ 2
- 2
SpiralSound/Plugins/Edit.sh View File

@@ -4,7 +4,7 @@ for file in `cat PluginList.txt`
do
echo $file
cd $file/
nedit $file.h
nedit $file.C
cvs edit Makefile.in
nedit Makefile.in
cd ..
done

+ 5
- 4
SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPlugin.C View File

@@ -51,6 +51,9 @@ m_Value(0)
m_PluginInfo.NumOutputs=1;
m_PluginInfo.PortTips.push_back("Input");
m_PluginInfo.PortTips.push_back("Output");
m_AudioCH->Register("Attack",&m_Attack);
m_AudioCH->Register("Decay",&m_Decay);
}

EnvFollowerPlugin::~EnvFollowerPlugin()
@@ -64,11 +67,9 @@ PluginInfo &EnvFollowerPlugin::Initialise(const HostInfo *Host)

SpiralGUIType *EnvFollowerPlugin::CreateGUI()
{
m_GUI = new EnvFollowerPluginGUI(m_PluginInfo.Width,
return new EnvFollowerPluginGUI(m_PluginInfo.Width,
m_PluginInfo.Height,
this,m_HostInfo);
m_GUI->hide();
return m_GUI;
this,m_AudioCH,m_HostInfo);
}

void EnvFollowerPlugin::Execute()


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

@@ -34,12 +34,7 @@ public:
virtual void StreamOut(ostream &s);
virtual void StreamIn(istream &s);
// has to be defined in the plugin
virtual void UpdateGUI() { Fl::check(); }
void SetAttack(float v) { m_Attack=v; }
float GetAttack() { return m_Attack; }
void SetDecay(float v) { m_Decay=v; }
float GetDecay() { return m_Decay; }

private:


+ 8
- 9
SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPluginGUI.C View File

@@ -26,11 +26,9 @@ static const int GUIBG2_COLOUR = 145;

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

EnvFollowerPluginGUI::EnvFollowerPluginGUI(int w, int h,EnvFollowerPlugin *o,const HostInfo *Info) :
SpiralPluginGUI(w,h,o)
EnvFollowerPluginGUI::EnvFollowerPluginGUI(int w, int h,EnvFollowerPlugin *o,ChannelHandler *ch,const HostInfo *Info) :
SpiralPluginGUI(w,h,o,ch)
{
m_Plugin=o;
m_Attack = new Fl_Knob(20, 25, 40, 40, "Attack");
m_Attack->color(GUI_COLOUR);
m_Attack->type(Fl_Knob::DOTLIN);
@@ -56,18 +54,19 @@ SpiralPluginGUI(w,h,o)



void EnvFollowerPluginGUI::UpdateValues()
void EnvFollowerPluginGUI::UpdateValues(SpiralPlugin *o)
{
m_Attack->value(m_Plugin->GetAttack());
m_Decay->value(m_Plugin->GetDecay());
EnvFollowerPlugin *Plugin = (EnvFollowerPlugin*)o;
m_Attack->value(Plugin->GetAttack());
m_Decay->value(Plugin->GetDecay());
}
inline void EnvFollowerPluginGUI::cb_Decay_i(Fl_Knob* o, void* v)
{ m_Plugin->SetDecay(o->value()); }
{ m_GUICH->Set("Decay",o->value()); }
void EnvFollowerPluginGUI::cb_Decay(Fl_Knob* o, void* v)
{ ((EnvFollowerPluginGUI*)(o->parent()))->cb_Decay_i(o,v);}

inline void EnvFollowerPluginGUI::cb_Attack_i(Fl_Knob* o, void* v)
{ m_Plugin->SetAttack(o->value()); }
{ m_GUICH->Set("Attack",o->value()); }
void EnvFollowerPluginGUI::cb_Attack(Fl_Knob* o, void* v)
{ ((EnvFollowerPluginGUI*)(o->parent()))->cb_Attack_i(o,v);}

+ 3
- 5
SpiralSound/Plugins/EnvFollowerPlugin/EnvFollowerPluginGUI.h View File

@@ -33,12 +33,10 @@
class EnvFollowerPluginGUI : public SpiralPluginGUI
{
public:
EnvFollowerPluginGUI(int w, int h, EnvFollowerPlugin *o,const HostInfo *Info);
EnvFollowerPluginGUI(int w, int h, EnvFollowerPlugin *o,ChannelHandler *ch,const HostInfo *Info);
virtual void UpdateValues();
virtual SpiralPlugin* GetPlugin() { return m_Plugin; }
EnvFollowerPlugin *m_Plugin;
virtual void UpdateValues(SpiralPlugin *o);

private:

Fl_Knob* m_Attack;


+ 5
- 0
SpiralSound/Plugins/EnvFollowerPlugin/Makefile.in View File

@@ -43,6 +43,7 @@ mandir = @mandir@

HEADERS = ../SpiralPlugin.h \
../SpiralPluginGUI.h \
../../ChannelHandler.h \
../Widgets/Fl_Knob.H \
../Widgets/Fl_DragBar.H \
../../Sample.h \
@@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \
EnvFollowerPluginGUI.h
SOURCES = ../SpiralPlugin.C \
../SpiralPluginGUI.C \
../../ChannelHandler.C \
../Widgets/Fl_Knob.cxx \
../Widgets/Fl_DragBar.cxx \
../../Sample.C \
@@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \
EnvFollowerPluginGUI.C
OBJECTS = ../SpiralPlugin.o \
../SpiralPluginGUI.o \
../../ChannelHandler.o \
../Widgets/Fl_Knob.o \
../Widgets/Fl_DragBar.o \
../../Sample.o \
@@ -166,3 +169,5 @@ EnvFollowerPluginGUI.o: EnvFollowerPluginGUI.C \
../SpiralPluginGUI.h \
../Widgets/Fl_DragBar.H

../../ChannelHandler.o: ../../ChannelHandler.C \
../../ChannelHandler.h

+ 9
- 4
SpiralSound/Plugins/EnvelopePlugin/EnvelopePlugin.C View File

@@ -58,6 +58,13 @@ m_TrigThresh(0.01)
m_PluginInfo.PortTips.push_back("Input");
m_PluginInfo.PortTips.push_back("CV");
m_PluginInfo.PortTips.push_back("Output");
m_AudioCH->Register("Attack",&m_Attack);
m_AudioCH->Register("Decay",&m_Decay);
m_AudioCH->Register("Sustain",&m_Sustain);
m_AudioCH->Register("Release",&m_Release);
m_AudioCH->Register("Volume",&m_Volume);
m_AudioCH->Register("Trig",&m_TrigThresh);
}

EnvelopePlugin::~EnvelopePlugin()
@@ -73,11 +80,9 @@ PluginInfo &EnvelopePlugin::Initialise(const HostInfo *Host)

SpiralGUIType *EnvelopePlugin::CreateGUI()
{
m_GUI = new EnvelopePluginGUI(m_PluginInfo.Width,
return new EnvelopePluginGUI(m_PluginInfo.Width,
m_PluginInfo.Height,
this,m_HostInfo);
m_GUI->hide();
return m_GUI;
this,m_AudioCH,m_HostInfo);
}

void EnvelopePlugin::Execute()


+ 1
- 11
SpiralSound/Plugins/EnvelopePlugin/EnvelopePlugin.h View File

@@ -35,17 +35,7 @@ public:
virtual void Execute();
virtual void StreamOut(ostream &s);
virtual void StreamIn(istream &s);
// has to be defined in the plugin
virtual void UpdateGUI() { Fl::check(); }
void SetAttack(float s) { m_Attack=s; }
void SetDecay(float s) { m_Decay=s; }
void SetSustain(float s) { m_Sustain=s; }
void SetRelease(float s) { m_Release=s; }
void SetVolume(float s) { m_Volume=s; }
void SetTrigThresh(float s) { m_TrigThresh=s; }
float GetAttack() { return m_Attack; }
float GetDecay() { return m_Decay; }
float GetSustain() { return m_Sustain; }


+ 24
- 24
SpiralSound/Plugins/EnvelopePlugin/EnvelopePluginGUI.C View File

@@ -27,11 +27,9 @@ static const float TIMED_SLIDER_MAX = 3.0f;

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

EnvelopePluginGUI::EnvelopePluginGUI(int w, int h,EnvelopePlugin *o,const HostInfo *Info) :
SpiralPluginGUI(w,h,o)
{
m_Plugin=o;
EnvelopePluginGUI::EnvelopePluginGUI(int w, int h,EnvelopePlugin *o,ChannelHandler *ch,const HostInfo *Info) :
SpiralPluginGUI(w,h,o,ch)
{
Thresh = new Fl_Slider(10, 20, 20, 70, "T");
Thresh->type(4);
Thresh->selection_color(GUI_COLOUR);
@@ -154,26 +152,28 @@ SpiralPluginGUI(w,h,o)

extern "C" int sprintf(char *,const char *,...);

void EnvelopePluginGUI::UpdateValues()
void EnvelopePluginGUI::UpdateValues(SpiralPlugin *o)
{
Thresh->value(1.0f-sqrt(m_Plugin->GetAttack()));
Attack->value(TIMED_SLIDER_MAX-sqrt(m_Plugin->GetAttack()));
Decay->value(TIMED_SLIDER_MAX-sqrt(m_Plugin->GetDecay()));
Sustain->value(1.0f-m_Plugin->GetSustain());
Release->value(TIMED_SLIDER_MAX-sqrt(m_Plugin->GetRelease()));
Volume->value(1.0f-m_Plugin->GetVolume());
EnvelopePlugin *Plugin = (EnvelopePlugin*)o;

Thresh->value(1.0f-sqrt(Plugin->GetAttack()));
Attack->value(TIMED_SLIDER_MAX-sqrt(Plugin->GetAttack()));
Decay->value(TIMED_SLIDER_MAX-sqrt(Plugin->GetDecay()));
Sustain->value(1.0f-Plugin->GetSustain());
Release->value(TIMED_SLIDER_MAX-sqrt(Plugin->GetRelease()));
Volume->value(1.0f-Plugin->GetVolume());
char str[10];
sprintf(str,"%4.0f %%", 100*m_Plugin->GetTrigThresh());
sprintf(str,"%4.0f %%", 100*Plugin->GetTrigThresh());
m_out_thresh->value(str);
sprintf(str,"%5.3f s", m_Plugin->GetAttack());
sprintf(str,"%5.3f s", Plugin->GetAttack());
m_out_attack->value(str);
sprintf(str,"%5.3f s", m_Plugin->GetDecay());
sprintf(str,"%5.3f s", Plugin->GetDecay());
m_out_decay->value(str);
sprintf(str,"%4.0f %%", 100*m_Plugin->GetSustain());
sprintf(str,"%4.0f %%", 100*Plugin->GetSustain());
m_out_sustain->value(str);
sprintf(str,"%5.3f s", m_Plugin->GetRelease());
sprintf(str,"%5.3f s", Plugin->GetRelease());
m_out_release->value(str);
sprintf(str,"%4.0f %%", 100*m_Plugin->GetVolume());
sprintf(str,"%4.0f %%", 100*Plugin->GetVolume());
m_out_volume->value(str);
}

@@ -181,7 +181,7 @@ void EnvelopePluginGUI::UpdateValues()
inline void EnvelopePluginGUI::cb_Thresh_i(Fl_Slider* o, void* v)
{
char str[10];
m_Plugin->SetTrigThresh(1.0f-o->value());
m_GUICH->Set("Trig",1.0f-o->value());
sprintf(str,"%4.0f %%", 100*(1.0f-o->value()));
m_out_thresh->value(str);
}
@@ -193,7 +193,7 @@ inline void EnvelopePluginGUI::cb_Attack_i(Fl_Slider* o, void* v)
{
char str[10];
float value=TIMED_SLIDER_MAX-o->value();
m_Plugin->SetAttack(value*value);
m_GUICH->Set("Attack",value*value);
sprintf(str,"%5.3f s", value*value);
m_out_attack->value(str);
}
@@ -204,7 +204,7 @@ inline void EnvelopePluginGUI::cb_Decay_i(Fl_Slider* o, void* v)
{
char str[10];
float value=TIMED_SLIDER_MAX-o->value();
m_Plugin->SetDecay(value*value);
m_GUICH->Set("Decay",value*value);
sprintf(str,"%5.3f s", value*value);
m_out_decay->value(str);
}
@@ -214,7 +214,7 @@ void EnvelopePluginGUI::cb_Decay(Fl_Slider* o, void* v)
inline void EnvelopePluginGUI::cb_Sustain_i(Fl_Slider* o, void* v)
{
char str[10];
m_Plugin->SetSustain(1.0f-o->value());
m_GUICH->Set("Sustain",1.0f-o->value());
sprintf(str,"%4.0f %%", 100*(1.0f-o->value()));
m_out_sustain->value(str);
}
@@ -226,7 +226,7 @@ inline void EnvelopePluginGUI::cb_Release_i(Fl_Slider* o, void* v)
{
char str[10];
float value=TIMED_SLIDER_MAX-o->value();
m_Plugin->SetRelease(value*value);
m_GUICH->Set("Release",value*value);
sprintf(str,"%5.3f s", value*value);
m_out_release->value(str);
}
@@ -237,7 +237,7 @@ inline void EnvelopePluginGUI::cb_Volume_i(Fl_Slider* o, void* v)
{
char str[10];

m_Plugin->SetVolume(1.0f-o->value());
m_GUICH->Set("Volume",1.0f-o->value());
sprintf(str,"%4.0f %%", 100*(1.0f-o->value()));
m_out_volume->value(str);
}


+ 3
- 5
SpiralSound/Plugins/EnvelopePlugin/EnvelopePluginGUI.h View File

@@ -34,12 +34,10 @@
class EnvelopePluginGUI : public SpiralPluginGUI
{
public:
EnvelopePluginGUI(int w, int h, EnvelopePlugin *o,const HostInfo *Info);
EnvelopePluginGUI(int w, int h, EnvelopePlugin *o,ChannelHandler *ch,const HostInfo *Info);
virtual void UpdateValues();
virtual SpiralPlugin* GetPlugin() { return m_Plugin; }
EnvelopePlugin *m_Plugin;
virtual void UpdateValues(SpiralPlugin *o);

private:
Fl_Slider *Thresh;


+ 5
- 0
SpiralSound/Plugins/EnvelopePlugin/Makefile.in View File

@@ -43,6 +43,7 @@ mandir = @mandir@

HEADERS = ../SpiralPlugin.h \
../SpiralPluginGUI.h \
../../ChannelHandler.h \
../Widgets/Fl_Knob.H \
../Widgets/Fl_DragBar.H \
../../Sample.h \
@@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \
EnvelopePluginGUI.h
SOURCES = ../SpiralPlugin.C \
../SpiralPluginGUI.C \
../../ChannelHandler.C \
../Widgets/Fl_Knob.cxx \
../Widgets/Fl_DragBar.cxx \
../../Sample.C \
@@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \
EnvelopePluginGUI.C
OBJECTS = ../SpiralPlugin.o \
../SpiralPluginGUI.o \
../../ChannelHandler.o \
../Widgets/Fl_Knob.o \
../Widgets/Fl_DragBar.o \
../../Sample.o \
@@ -162,3 +165,5 @@ EnvelopePluginGUI.o: EnvelopePluginGUI.C \
../SpiralPluginGUI.h \
../Widgets/Fl_DragBar.H

../../ChannelHandler.o: ../../ChannelHandler.C \
../../ChannelHandler.h

+ 9
- 5
SpiralSound/Plugins/FilterPlugin/FilterPlugin.C View File

@@ -64,6 +64,12 @@ m_RevResonanceMod(false)
m_PluginInfo.PortTips.push_back("Cutoff CV");
m_PluginInfo.PortTips.push_back("Emphasis CV");
m_PluginInfo.PortTips.push_back("Output");
m_AudioCH->Register("Cutoff",&fc);
m_AudioCH->Register("Resonance",&Q);
m_AudioCH->Register("RevC",&m_RevCutoffMod);
m_AudioCH->Register("RevR",&m_RevResonanceMod);
}

FilterPlugin::~FilterPlugin()
@@ -92,11 +98,9 @@ PluginInfo &FilterPlugin::Initialise(const HostInfo *Host)

SpiralGUIType *FilterPlugin::CreateGUI()
{
m_GUI = new FilterPluginGUI(m_PluginInfo.Width,
return new FilterPluginGUI(m_PluginInfo.Width,
m_PluginInfo.Height,
this,m_HostInfo);
m_GUI->hide();
return m_GUI;
this,m_AudioCH,m_HostInfo);
}

void FilterPlugin::Execute()
@@ -142,7 +146,7 @@ void FilterPlugin::Execute()
m_LastFC=fc;
}
}
float in = GetInput(0,n);
//if (in!=0)
//{


+ 4
- 11
SpiralSound/Plugins/FilterPlugin/FilterPlugin.h View File

@@ -36,17 +36,10 @@ public:
virtual void Execute();
virtual void StreamOut(ostream &s);
virtual void StreamIn(istream &s);
// has to be defined in the plugin
virtual void UpdateGUI() { Fl::check(); }
void Reset();
void SetupCoeffs();

void SetCutoff(double s) {fc=s;}
void SetResonance(double s) {Q=s;}
void SetRevCutoffMod(bool s) {m_RevCutoffMod=s;}
void SetRevResonanceMod(bool s) {m_RevResonanceMod=s;}
double GetCutoff() {return fc;}
double GetResonance() {return Q;}
bool GetRevCutoffMod() {return m_RevCutoffMod;}
@@ -58,10 +51,10 @@ private:
// Voice independant
float *coef;
double fs, fc; // Sampling frequency, cutoff frequency
double Q; // Resonance > 1.0 < 1000
double m_LastFC;
double m_LastQ;
float fs, fc; // Sampling frequency, cutoff frequency
float Q; // Resonance > 1.0 < 1000
float m_LastFC;
float m_LastQ;
unsigned nInd;
double a0, a1, a2, b0, b1, b2;
double k; // overall gain factor


+ 13
- 13
SpiralSound/Plugins/FilterPlugin/FilterPluginGUI.C View File

@@ -26,11 +26,9 @@ static const int GUIBG2_COLOUR = 145;

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

FilterPluginGUI::FilterPluginGUI(int w, int h,FilterPlugin *o,const HostInfo *Info) :
SpiralPluginGUI(w,h,o)
FilterPluginGUI::FilterPluginGUI(int w, int h,FilterPlugin *o,ChannelHandler *ch,const HostInfo *Info) :
SpiralPluginGUI(w,h,o,ch)
{
m_Plugin=o;
Cutoff = new Fl_Slider(15, 20, 20, 70, "Cutoff");
Cutoff->type(4);
Cutoff->selection_color(GUI_COLOUR);
@@ -64,38 +62,40 @@ SpiralPluginGUI(w,h,o)
end();
}

void FilterPluginGUI::UpdateValues()
void FilterPluginGUI::UpdateValues(SpiralPlugin *o)
{
Cutoff->value(100.0f-sqrt(m_Plugin->GetCutoff()-10.0f));
Resonance->value(m_Plugin->GetResonance()-1.0f);
FilterPlugin *Plugin = (FilterPlugin*)o;
Cutoff->value(100.0f-sqrt(Plugin->GetCutoff()-10.0f));
Resonance->value(Plugin->GetResonance()-1.0f);

RevCutoff->value(0);
RevResonance->value(0);
if (m_Plugin->GetRevCutoffMod()) RevCutoff->value(1);
if (m_Plugin->GetRevResonanceMod()) RevResonance->value(1);
if (Plugin->GetRevCutoffMod()) RevCutoff->value(1);
if (Plugin->GetRevResonanceMod()) RevResonance->value(1);
}

inline void FilterPluginGUI::cb_Cutoff_i(Fl_Slider* o, void* v)
{
float value=100.0f-o->value();
m_Plugin->SetCutoff((value*value)+10.0f);
m_GUICH->Set("Cutoff",(float)(value*value)+10.0f);
}
void FilterPluginGUI::cb_Cutoff(Fl_Slider* o, void* v)
{ ((FilterPluginGUI*)(o->parent()))->cb_Cutoff_i(o,v); }

inline void FilterPluginGUI::cb_Resonance_i(Fl_Knob* o, void* v)
{ m_Plugin->SetResonance(o->value()+1.0f); }
{ m_GUICH->Set("Resonance",(float)o->value()+1.0f); }
void FilterPluginGUI::cb_Resonance(Fl_Knob* o, void* v)
{ ((FilterPluginGUI*)(o->parent()))->cb_Resonance_i(o,v); }

inline void FilterPluginGUI::cb_RevCutoff_i(Fl_Button* o, void* v)
{ m_Plugin->SetRevCutoffMod(o->value()); }
{ m_GUICH->Set("RevC",(bool)o->value()); }
void FilterPluginGUI::cb_RevCutoff(Fl_Button* o, void* v)
{ ((FilterPluginGUI*)(o->parent()))->cb_RevCutoff_i(o,v); }

inline void FilterPluginGUI::cb_RevResonance_i(Fl_Button* o, void* v)
{ m_Plugin->SetRevResonanceMod(o->value()); }
{ m_GUICH->Set("RevR",(bool)o->value()); }
void FilterPluginGUI::cb_RevResonance(Fl_Button* o, void* v)
{ ((FilterPluginGUI*)(o->parent()))->cb_RevResonance_i(o,v); }

+ 2
- 5
SpiralSound/Plugins/FilterPlugin/FilterPluginGUI.h View File

@@ -32,12 +32,9 @@
class FilterPluginGUI : public SpiralPluginGUI
{
public:
FilterPluginGUI(int w, int h, FilterPlugin *o,const HostInfo *Info);
FilterPluginGUI(int w, int h, FilterPlugin *o,ChannelHandler *ch,const HostInfo *Info);
virtual void UpdateValues();
virtual SpiralPlugin* GetPlugin() { return m_Plugin; }
FilterPlugin *m_Plugin;
virtual void UpdateValues(SpiralPlugin *o);
private:


+ 5
- 0
SpiralSound/Plugins/FilterPlugin/Makefile.in View File

@@ -43,6 +43,7 @@ mandir = @mandir@

HEADERS = ../SpiralPlugin.h \
../SpiralPluginGUI.h \
../../ChannelHandler.h \
../Widgets/Fl_Knob.H \
../Widgets/Fl_DragBar.H \
../../Sample.h \
@@ -51,6 +52,7 @@ HEADERS = ../SpiralPlugin.h \
FilterPluginGUI.h
SOURCES = ../SpiralPlugin.C \
../SpiralPluginGUI.C \
../../ChannelHandler.C \
../Widgets/Fl_Knob.cxx \
../Widgets/Fl_DragBar.cxx \
../../Sample.C \
@@ -59,6 +61,7 @@ SOURCES = ../SpiralPlugin.C \
FilterPluginGUI.C
OBJECTS = ../SpiralPlugin.o \
../SpiralPluginGUI.o \
../../ChannelHandler.o \
../Widgets/Fl_Knob.o \
../Widgets/Fl_DragBar.o \
../../Sample.o \
@@ -172,3 +175,5 @@ FilterPluginGUI.o: FilterPluginGUI.C \
../Widgets/Fl_DragBar.H \
../Widgets/Fl_Knob.H

../../ChannelHandler.o: ../../ChannelHandler.C \
../../ChannelHandler.h

+ 37
- 5
SpiralSound/Plugins/JackPlugin/JackPlugin.C View File

@@ -317,7 +317,8 @@ int GetID()

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

JackPlugin::JackPlugin()
JackPlugin::JackPlugin() :
m_UpdateNames(false)
{
m_RefCount++;
@@ -340,6 +341,15 @@ JackPlugin::JackPlugin()
sprintf(Temp,"SSM Input %d",n);
m_PluginInfo.PortTips.push_back(Temp);
}
m_AudioCH->Register("Num",&GUIArgs.Num);
m_AudioCH->RegisterData("Port",ChannelHandler::INPUT,&GUIArgs.Port,sizeof(GUIArgs.Port));
m_AudioCH->Register("NumInputPortNames",&m_NumInputPortNames,ChannelHandler::OUTPUT);
m_AudioCH->Register("NumOutputPortNames",&m_NumOutputPortNames,ChannelHandler::OUTPUT);
m_AudioCH->RegisterData("InputPortNames",ChannelHandler::OUTPUT,&m_InputPortNames,sizeof(m_InputPortNames));
m_AudioCH->RegisterData("OutputPortNames",ChannelHandler::OUTPUT,&m_OutputPortNames,sizeof(m_OutputPortNames));
m_AudioCH->Register("UpdateNames",&m_UpdateNames,ChannelHandler::OUTPUT);
m_AudioCH->Register("Connected",&m_Connected,ChannelHandler::OUTPUT);
}

JackPlugin::~JackPlugin()
@@ -364,11 +374,9 @@ PluginInfo &JackPlugin::Initialise(const HostInfo *Host)

SpiralGUIType *JackPlugin::CreateGUI()
{
m_GUI = new JackPluginGUI(m_PluginInfo.Width,
return new JackPluginGUI(m_PluginInfo.Width,
m_PluginInfo.Height,
this,m_HostInfo);
m_GUI->hide();
return m_GUI;
this,m_AudioCH,m_HostInfo);
}

void JackPlugin::Execute()
@@ -401,3 +409,27 @@ void JackPlugin::Execute()

}

void JackPlugin::ExecuteCommands()
{
if (m_UpdateNames)
{
vector<string> InputNames,OutputNames;
GetPortNames(InputNames,OutputNames);
for (vector<string>::iterator i=InputNames.begin();
i!=InputNames.end(); ++i)
{
strcpy(m_InputPortNames[n],i->c_str());
}
for (vector<string>::iterator i=OutputNames.begin();
i!=OutputNames.end(); ++i)
{
strcpy(m_OutputPortNames[n],i->c_str());
}
m_NumInputPortNames=InputNames.size();
m_NumOutputPortNames=OutputNames.size();
m_UpdateNames=false;
}
}

+ 21
- 4
SpiralSound/Plugins/JackPlugin/JackPlugin.h View File

@@ -30,6 +30,8 @@ typedef jack_default_audio_sample_t sample_t;

const int NUM_INPUTS = 8;
const int NUM_OUTPUTS = 8;
const int MAX_INPUTPORTS = 256;
const int MAX_OUTPUTPORTS = 256;

class JackClient
{
@@ -99,17 +101,32 @@ public:
virtual void StreamOut(ostream &s) {}
virtual void StreamIn(istream &s) {}
// has to be defined in the plugin
virtual void UpdateGUI() { Fl::check(); }
enum GUICommands{NONE,ATTACH,DETACH,CONNECTINPUT,CONNECTOUTPUT};
struct GUIArgs
{
int Num;
char Port[256];
};
private:
GUIArgs m_GUIArgs;
// slightly clumsy, but we have to share this data with the gui
int m_NumInputPortNames;
char m_InputPortNames[MAX_INPUTPORTS][256];
int m_NumOutputPortNames;
char m_OutputPortNames[MAX_OUTPUTPORTS][256];

void Attach() { JackClient::Get()->Attach(); }
void Detach() { JackClient::Get()->Detach(); }
void GetPortNames(vector<string> &InputNames,vector<string> &OutputNames) { JackClient::Get()->GetPortNames(InputNames,OutputNames); }
void ConnectInput(int n, const string &JackPort) { JackClient::Get()->ConnectInput(n,JackPort); }
void ConnectOutput(int n, const string &JackPort) { JackClient::Get()->ConnectOutput(n,JackPort); }
private:
static int m_RefCount;
static int m_NoExecuted;
bool m_UpdateNames;
bool m_Connected;
};

#endif

+ 23
- 4
SpiralSound/Plugins/JackPlugin/JackPluginGUI.C View File

@@ -75,8 +75,8 @@ int OptionsList(const vector<string> &List)

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

JackPluginGUI::JackPluginGUI(int w, int h,JackPlugin *o,const HostInfo *Info) :
SpiralPluginGUI(w,h,o)
JackPluginGUI::JackPluginGUI(int w, int h,JackPlugin *o,ChannelHandler *ch,const HostInfo *Info) :
SpiralPluginGUI(w,h,o,ch)
{
for (int n=0; n<255; n++) Numbers[n]=n;

@@ -122,7 +122,7 @@ SpiralPluginGUI(w,h,o)
end();
}

void JackPluginGUI::UpdateValues()
void JackPluginGUI::UpdateValues(SpiralPlugin *o)
{
}
@@ -146,7 +146,26 @@ inline void JackPluginGUI::cb_OutputConnect_i(Fl_Button* o, void* v)
{
cerr<<"cb_OutputConnect_i"<<endl;
vector<string> Inputs,Outputs;
m_Plugin->GetPortNames(Inputs,Outputs);
m_GUICH->Set("UpdateNames",true);
// bit of a hack for multithreaded safety
int ninputs=m_GUICH->GetInt("NumOutputPortNames"),
int noutputs=m_GUICH->GetInt("NumOutputPortNames");
char **inputs = new char[MAX_INPUTPORTS][256];
char **outputs = new char[MAX_OUTPUTPORTS][256];;
for (int n=0 n<m_GUICH->GetInt("NumInputPortNames"); n++)
{
Inputs.push_back(inputs[n]);
}
for (int n=0 n<m_GUICH->GetInt("NumOutputPortNames"); n++)
{
Inputs.push_back(outputs[n]);
}
delete[] inputs;
delete[] outputs;
// connect this plugin's output to a jack input
int choice=OptionsList(Inputs);


+ 3
- 7
SpiralSound/Plugins/JackPlugin/JackPluginGUI.h View File

@@ -35,14 +35,10 @@
class JackPluginGUI : public SpiralPluginGUI
{
public:
JackPluginGUI(int w, int h, JackPlugin *o,const HostInfo *Info);
JackPluginGUI(int w, int h, JackPlugin *o,ChannelHandler *ch,const HostInfo *Info);
virtual void UpdateValues();
virtual SpiralPlugin* GetPlugin() { return m_Plugin; }
void SetAttached(bool s) { m_Indicator->value(s); }
JackPlugin *m_Plugin;
virtual void UpdateValues(SpiralPlugin *o);
virtual void draw() { m_Indicator->value(m_GUICH->GetBool("Connected"); };
private:



+ 5
- 0
SpiralSound/Plugins/JackPlugin/Makefile.in View File

@@ -45,6 +45,7 @@ mandir = @mandir@

HEADERS = ../SpiralPlugin.h \
../SpiralPluginGUI.h \
../../ChannelHandler.h \
../Widgets/Fl_Knob.H \
../Widgets/Fl_DragBar.H \
../Widgets/Fl_LED_Button.H \
@@ -54,6 +55,7 @@ HEADERS = ../SpiralPlugin.h \
JackPluginGUI.h
SOURCES = ../SpiralPlugin.C \
../SpiralPluginGUI.C \
../../ChannelHandler.C \
../Widgets/Fl_Knob.cxx \
../Widgets/Fl_DragBar.cxx \
../Widgets/Fl_LED_Button.cxx \
@@ -63,6 +65,7 @@ SOURCES = ../SpiralPlugin.C \
JackPluginGUI.C
OBJECTS = ../SpiralPlugin.o \
../SpiralPluginGUI.o \
../ChannelHandler.o \
../Widgets/Fl_Knob.o \
../Widgets/Fl_DragBar.o \
../Widgets/Fl_LED_Button.o \
@@ -187,3 +190,5 @@ JackPluginGUI.o: JackPluginGUI.C \
../SpiralPluginGUI.h \
../Widgets/Fl_DragBar.H

../../ChannelHandler.o: ../../ChannelHandler.C \
../../ChannelHandler.h

+ 5
- 1
SpiralSound/Plugins/JoystickPlugin/Makefile.in View File

@@ -43,6 +43,7 @@ mandir = @mandir@

HEADERS = ../SpiralPlugin.h \
../SpiralPluginGUI.h \
../../ChannelHandler.h \
../Widgets/Fl_Knob.H \
../Widgets/Fl_DragBar.H \
../../Sample.h \
@@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \
JoystickPluginGUI.h
SOURCES = ../SpiralPlugin.C \
../SpiralPluginGUI.C \
../../ChannelHandler.C \
../Widgets/Fl_Knob.cxx \
../Widgets/Fl_DragBar.cxx \
../../Sample.C \
@@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \
JoystickPluginGUI.C
OBJECTS = ../SpiralPlugin.o \
../SpiralPluginGUI.o \
../../ChannelHandler.o \
../Widgets/Fl_Knob.o \
../Widgets/Fl_DragBar.o \
../../Sample.o \
@@ -166,4 +169,5 @@ JoystickPluginGUI.o: JoystickPluginGUI.C \
../SpiralPluginGUI.h \
../Widgets/Fl_DragBar.H


../../ChannelHandler.o: ../../ChannelHandler.C \
../../ChannelHandler.h

+ 135
- 28
SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.C View File

@@ -20,7 +20,75 @@
#include <stdio.h>
#include "SpiralIcon.xpm"
#include "utils.h"
#include <algorithm>

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

/* FIXME: No matter what, I can't let this as it!! */
static LADSPAPlugin * lg = NULL;

void describePluginLibrary(const char * pcFullFilename, void * pvPluginHandle,
LADSPA_Descriptor_Function pfDescriptorFunction) {
const LADSPA_Descriptor * psDescriptor;
long lIndex;
unsigned long lPluginIndex;
unsigned long lPortIndex;
unsigned long lLength;
LADSPA_PortRangeHintDescriptor iHintDescriptor;
LADSPA_Data fBound;

#define testcond(c,s) { \
if (!(c)) { \
cerr << (s); \
failure = 1; \
} \
}
for (lIndex = 0; (psDescriptor = pfDescriptorFunction(lIndex)) != NULL; lIndex++) {
int failure = 0;
testcond(!LADSPA_IS_REALTIME(psDescriptor->Properties), "ERROR: PLUGIN MUST RUN REAL TIME.\n");
testcond(psDescriptor->instantiate, "ERROR: PLUGIN HAS NO INSTANTIATE FUNCTION.\n");
testcond(psDescriptor->connect_port, "ERROR: PLUGIN HAS NO CONNECT_PORT FUNCTION.\n");
testcond(psDescriptor->run, "ERROR: PLUGIN HAS NO RUN FUNCTION.\n");
testcond(!(psDescriptor->run_adding != 0 && psDescriptor->set_run_adding_gain == 0),
"ERROR: PLUGIN HAS RUN_ADDING FUNCTION BUT NOT SET_RUN_ADDING_GAIN.\n");
testcond(!(psDescriptor->run_adding == 0 && psDescriptor->set_run_adding_gain != 0),
"ERROR: PLUGIN HAS SET_RUN_ADDING_GAIN FUNCTION BUT NOT RUN_ADDING.\n");
testcond(psDescriptor->cleanup, "ERROR: PLUGIN HAS NO CLEANUP FUNCTION.\n");
testcond(!LADSPA_IS_INPLACE_BROKEN(psDescriptor->Properties),
"ERROR: THIS PLUGIN CANNOT USE IN-PLACE PROCESSING.\n");
testcond(psDescriptor->PortCount, "ERROR: PLUGIN HAS NO PORTS.\n");

if (!failure) {
LPluginInfo pi;
pi.Filename = pcFullFilename;
pi.Label = psDescriptor->Label;
pi.Name = psDescriptor->Name;
/* ARGH! I really can't stand this ugly hack */
lg->m_LADSPAList.push_back(pi);
} else {
cerr << "Plugin ignored...\n\n";
}
}

dlclose(pvPluginHandle);
}

void LADSPAPlugin::LoadPluginList(void)
{
m_LADSPAList.clear();
m_CurrentPlugin.Name = "";
m_CurrentPlugin.Filename = "";
m_CurrentPlugin.Label = "";

lg = this;
LADSPAPluginSearch(describePluginLibrary);
lg = NULL;

sort(m_LADSPAList.begin(), m_LADSPAList.end(), LPluginInfoSortAsc());
}

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

extern "C" {
SpiralPlugin* CreateInstance()
{
@@ -54,6 +122,17 @@ m_Amped(false)
m_PluginInfo.NumInputs=0;
m_PluginInfo.NumOutputs=1;
m_PluginInfo.PortTips.push_back("Nuffink yet");
m_AudioCH->Register("Gain",&m_Gain);
m_AudioCH->Register("Amped",&m_Amped);
m_AudioCH->RegisterData("Desc",ChannelHandler::OUTPUT,&PlugDesc,sizeof(PlugDesc));
m_AudioCH->Register("Num",&m_GUIArgs.Num);
m_AudioCH->Register("Value",&m_GUIArgs.Value);
m_AudioCH->Register("Clamp",&m_GUIArgs.Clamp);
m_AudioCH->RegisterData("Filename",ChannelHandler::INPUT,&m_GUIArgs.Filename,sizeof(m_GUIArgs.Filename));
m_AudioCH->RegisterData("Label",ChannelHandler::INPUT,&m_GUIArgs.Label,sizeof(m_GUIArgs.Label));
LoadPluginList();
}

LADSPAPlugin::~LADSPAPlugin()
@@ -70,11 +149,7 @@ PluginInfo &LADSPAPlugin::Initialise(const HostInfo *Host)

SpiralGUIType *LADSPAPlugin::CreateGUI()
{
m_GUI = new LADSPAPluginGUI(m_PluginInfo.Width,
m_PluginInfo.Height,
this,m_HostInfo);
m_GUI->hide();
return m_GUI;
return new LADSPAPluginGUI(m_PluginInfo.Width,m_PluginInfo.Height,this,m_AudioCH,m_HostInfo,m_LADSPAList);
}

void LADSPAPlugin::Execute()
@@ -106,7 +181,7 @@ void LADSPAPlugin::Execute()
}
}
// Update the GUI outputs with the first value in the buffer
((LADSPAPluginGUI*)m_GUI)->UpdatePortDisplay(n,m_LADSPABufVec[n][0]);
//((LADSPAPluginGUI*)m_GUI)->UpdatePortDisplay(n,m_LADSPABufVec[n][0]);
}
else // zero
{
@@ -138,6 +213,20 @@ void LADSPAPlugin::Execute()
}
}

void LADSPAPlugin::ExecuteCommands()
{
if (m_AudioCH->IsCommandWaiting())
{
switch(m_AudioCH->GetCommand())
{
case (SETMIN) : SetMin(m_GUIArgs.Num,m_GUIArgs.Value); break;
case (SETMAX) : SetMax(m_GUIArgs.Num,m_GUIArgs.Value); break;
case (SETCLAMP) : SetPortClamp(m_GUIArgs.Num,m_GUIArgs.Clamp); break;
case (UPDATEPLUGIN) : UpdatePlugin(m_GUIArgs.Num); break;
};
}
}

void LADSPAPlugin::StreamOut(ostream &s)
{
s<<m_Version<<" ";
@@ -147,8 +236,8 @@ void LADSPAPlugin::StreamOut(ostream &s)
case 3:
{
s<<m_Gain<<" ";
s<<((LADSPAPluginGUI*)m_GUI)->GetFilename()<<" ";
s<<((LADSPAPluginGUI*)m_GUI)->GetLabel()<<" ";
s<<m_CurrentPlugin.Filename<<" ";
s<<m_CurrentPlugin.Label<<" ";
s<<m_PortMin.size()<<" ";
assert(m_PortMin.size()==m_PortMax.size());
assert(m_PortMin.size()==m_PortClamp.size());
@@ -174,8 +263,8 @@ void LADSPAPlugin::StreamOut(ostream &s)
// version is always 3!
{
s<<m_Gain<<" ";
s<<((LADSPAPluginGUI*)m_GUI)->GetFilename()<<" ";
s<<((LADSPAPluginGUI*)m_GUI)->GetLabel()<<" ";
s<<m_CurrentPlugin.Filename<<" ";
s<<m_CurrentPlugin.Label<<" ";
s<<m_PortMin.size()<<" ";
assert(m_PortMin.size()==m_PortMax.size());
for (vector<float>::iterator i=m_PortMin.begin();
@@ -194,8 +283,8 @@ void LADSPAPlugin::StreamOut(ostream &s)
case 1:
{
s<<m_Gain<<" ";
s<<((LADSPAPluginGUI*)m_GUI)->GetFilename()<<" ";
s<<((LADSPAPluginGUI*)m_GUI)->GetLabel()<<" ";
s<<m_CurrentPlugin.Filename<<" ";
s<<m_CurrentPlugin.Label<<" ";
}
break;
}
@@ -240,10 +329,14 @@ void LADSPAPlugin::StreamIn(istream &s)
{
UpdatePlugin(Filename.c_str(), Label.c_str(), false);
}

m_CurrentPlugin.Ports.reserve(PortCount);
for (int n=0; n<PortCount; n++)
{
((LADSPAPluginGUI*)m_GUI)->SetMinMax(n,m_PortMin[n],m_PortMax[n],m_PortClamp[n]);
m_CurrentPlugin.Ports[n].Min=m_PortMin[n];
m_CurrentPlugin.Ports[n].Max=m_PortMax[n];
m_CurrentPlugin.Ports[n].Clamped=m_PortClamp[n];
}
}
break;
@@ -279,10 +372,14 @@ void LADSPAPlugin::StreamIn(istream &s)
{
UpdatePlugin(Filename.c_str(), Label.c_str(), false);
}

m_CurrentPlugin.Ports.reserve(PortCount);
for (int n=0; n<PortCount; n++)
{
((LADSPAPluginGUI*)m_GUI)->SetMinMax(n,m_PortMin[n],m_PortMax[n],m_PortClamp[n]);
m_CurrentPlugin.Ports[n].Min=m_PortMin[n];
m_CurrentPlugin.Ports[n].Max=m_PortMax[n];
m_CurrentPlugin.Ports[n].Clamped=m_PortClamp[n];
}
}
break;
@@ -303,7 +400,12 @@ void LADSPAPlugin::StreamIn(istream &s)
}
}

bool LADSPAPlugin::UpdatePlugin(const char * filename, const char * label, bool PortClampReset)
bool LADSPAPlugin::UpdatePlugin(int n)
{
return UpdatePlugin(m_LADSPAList[n].Filename.c_str(),m_LADSPAList[n].Label.c_str());
}

bool LADSPAPlugin::UpdatePlugin(const char * filename, const char * label, bool PortClampReset=true)
{
// first call with same info, to clear the ports
UpdatePluginInfoWithHost();
@@ -385,11 +487,13 @@ bool LADSPAPlugin::UpdatePlugin(const char * filename, const char * label, bool
//////////////////////////////
// Update the GUI stuff

((LADSPAPluginGUI*)m_GUI)->SetName(PlugDesc->Name);
((LADSPAPluginGUI*)m_GUI)->SetMaker(PlugDesc->Maker);
m_CurrentPlugin.Name=PlugDesc->Name;
m_CurrentPlugin.Maker=PlugDesc->Maker;
m_CurrentPlugin.Filename=filename;
m_CurrentPlugin.Label=label;
m_CurrentPlugin.Ports.clear();
m_PluginInfo.PortTips.clear();
((LADSPAPluginGUI*)m_GUI)->ClearPortInfo();
string desc;
c=0;
@@ -400,7 +504,11 @@ bool LADSPAPlugin::UpdatePlugin(const char * filename, const char * label, bool
desc = string(PlugDesc->PortNames[i]) +
(LADSPA_IS_PORT_CONTROL(PlugDesc->PortDescriptors[i]) ? " (CV)" : " (AU)");
m_PluginInfo.PortTips.push_back(desc.c_str());
((LADSPAPluginGUI*)m_GUI)->AddPortInfo(m_PluginInfo.PortTips[c].c_str());
LPluginInfo::LPortDetails PortDetails;
PortDetails.Name=m_PluginInfo.PortTips[c].c_str();
m_CurrentPlugin.Ports.push_back(PortDetails);
c++;
}
}
@@ -415,10 +523,7 @@ bool LADSPAPlugin::UpdatePlugin(const char * filename, const char * label, bool
m_PluginInfo.PortTips.push_back(desc.c_str());
}
}
((LADSPAPluginGUI*)m_GUI)->SetFilename(filename);
((LADSPAPluginGUI*)m_GUI)->SetLabel(label);
UpdatePluginInfoWithHost();

if (PortClampReset)
@@ -455,8 +560,10 @@ bool LADSPAPlugin::UpdatePlugin(const char * filename, const char * label, bool
m_PortMax.push_back(Max);
// PortClamp defaults to true
m_PortClamp.push_back(true);
((LADSPAPluginGUI*)m_GUI)->SetMinMax(n, Min, Max, true);
m_CurrentPlugin.Ports[n].Min=Min;
m_CurrentPlugin.Ports[n].Max=Max;
m_CurrentPlugin.Ports[n].Clamped=true;
}
}
return true;


+ 58
- 12
SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.h View File

@@ -19,12 +19,42 @@
#include "../SpiralPlugin.h"
#include <FL/Fl_Pixmap.H>
#include "ladspa.h"
#include "utils.h"

#ifndef LADSPAPLUGIN
#define LADSPAPLUGIN

static const unsigned int NUM_PORTS = 8;

class LPluginInfo {
public:
string Filename;
string Label;
string Name;
string Maker;
struct LPortDetails
{
string Name;
float Min,Max;
bool Clamped;
};
vector<LPortDetails> Ports;
bool operator<(const LPluginInfo & li) { return (Name < li.Name); }
bool operator==(const LPluginInfo& li) { return (Name == li.Name); }
};

// For sorting vectors of LPluginInfo's
struct LPluginInfoSortAsc
{
bool operator()(const LPluginInfo & begin, const LPluginInfo & end)
{
return begin.Name < end.Name;
}
};

class LADSPAPlugin : public SpiralPlugin
{
public:
@@ -34,24 +64,36 @@ public:
virtual PluginInfo &Initialise(const HostInfo *Host);
virtual SpiralGUIType *CreateGUI();
virtual void Execute();
virtual void ExecuteCommands();
virtual void StreamOut(ostream &s);
virtual void StreamIn(istream &s);
// has to be defined in the plugin
virtual void UpdateGUI() { Fl::check(); }
void SetGain(float s) { m_Gain=s; }
float GetGain() { return m_Gain; }
void SetMin(int n,float min) { m_PortMin[n]=min; }
void SetMax(int n,float max) { m_PortMax[n]=max; }
void SetPortClamp(int n,bool i) { m_PortClamp[n]=i; }
void SetAmped(bool s) { m_Amped=s; }
bool GetAmped() { return m_Amped; }
bool UpdatePlugin(const char * filename, const char * label, bool PortClampReset=true);
const LADSPA_Descriptor * GetPlugDesc(void) { return PlugDesc; }
enum GUICommands{NONE,SETMIN,SETMAX,SETCLAMP,UPDATEPLUGIN};
struct GUIArgs
{
int Num;
float Value;
bool Clamp;
char Filename[256];
char Label[256];
};
private:

GUIArgs m_GUIArgs;

void SetMin(int n,float min) { m_PortMin[n]=min; }
void SetMax(int n,float max) { m_PortMax[n]=max; }
void SetPortClamp(int n,bool i) { m_PortClamp[n]=i; }
bool UpdatePlugin(int n);
bool UpdatePlugin(const char * filename, const char * label, bool PortClampReset=true);

friend void describePluginLibrary(const char * pcFullFilename, void * pvPluginHandle, LADSPA_Descriptor_Function pfDescriptorFunction);
void LoadPluginList(void);

void * PlugHandle;
const LADSPA_Descriptor * PlugDesc;
@@ -62,6 +104,10 @@ private:
vector<float> m_PortMax;
vector<bool> m_PortClamp;
// our database of ladspa plugins
vector<LPluginInfo> m_LADSPAList;
LPluginInfo m_CurrentPlugin;

float m_Gain;
bool m_Amped;
};


+ 22
- 90
SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.C View File

@@ -25,97 +25,30 @@
#include <math.h>
#include <dlfcn.h>
#include <vector>
#include <algorithm>
#include "utils.h"

static const int GUI_COLOUR = 179;
static const int GUIBG_COLOUR = 144;
static const int GUIBG2_COLOUR = 145;

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

/* FIXME: No matter what, I can't let this as it!! */
static LADSPAPluginGUI * lg = NULL;

void describePluginLibrary(const char * pcFullFilename, void * pvPluginHandle,
LADSPA_Descriptor_Function pfDescriptorFunction) {
const LADSPA_Descriptor * psDescriptor;
long lIndex;
unsigned long lPluginIndex;
unsigned long lPortIndex;
unsigned long lLength;
LADSPA_PortRangeHintDescriptor iHintDescriptor;
LADSPA_Data fBound;

#define testcond(c,s) { \
if (!(c)) { \
cerr << (s); \
failure = 1; \
} \
}
for (lIndex = 0; (psDescriptor = pfDescriptorFunction(lIndex)) != NULL; lIndex++) {
int failure = 0;
testcond(!LADSPA_IS_REALTIME(psDescriptor->Properties), "ERROR: PLUGIN MUST RUN REAL TIME.\n");
testcond(psDescriptor->instantiate, "ERROR: PLUGIN HAS NO INSTANTIATE FUNCTION.\n");
testcond(psDescriptor->connect_port, "ERROR: PLUGIN HAS NO CONNECT_PORT FUNCTION.\n");
testcond(psDescriptor->run, "ERROR: PLUGIN HAS NO RUN FUNCTION.\n");
testcond(!(psDescriptor->run_adding != 0 && psDescriptor->set_run_adding_gain == 0),
"ERROR: PLUGIN HAS RUN_ADDING FUNCTION BUT NOT SET_RUN_ADDING_GAIN.\n");
testcond(!(psDescriptor->run_adding == 0 && psDescriptor->set_run_adding_gain != 0),
"ERROR: PLUGIN HAS SET_RUN_ADDING_GAIN FUNCTION BUT NOT RUN_ADDING.\n");
testcond(psDescriptor->cleanup, "ERROR: PLUGIN HAS NO CLEANUP FUNCTION.\n");
testcond(!LADSPA_IS_INPLACE_BROKEN(psDescriptor->Properties),
"ERROR: THIS PLUGIN CANNOT USE IN-PLACE PROCESSING.\n");
testcond(psDescriptor->PortCount, "ERROR: PLUGIN HAS NO PORTS.\n");

if (!failure) {
LPluginInfo pi;
pi.Filename = pcFullFilename;
pi.Label = psDescriptor->Label;
pi.Name = psDescriptor->Name;
/* ARGH! I really can't stand this ugly hack */
lg->PluginList.push_back(pi);
} else {
cerr << "Plugin ignored...\n\n";
}
}

dlclose(pvPluginHandle);
}

void LADSPAPluginGUI::refreshPluginList(void)
{
PluginList.clear();
CurrentPlugin.Name = "";
CurrentPlugin.Filename = "";
CurrentPlugin.Label = "";

lg = this;
LADSPAPluginSearch(describePluginLibrary);
lg = NULL;

m_Browser->clear();

sort(PluginList.begin(), PluginList.end(), LPluginInfoSortAsc());

for (vector<LPluginInfo>::iterator i = PluginList.begin(); i != PluginList.end(); i++)
{
m_Browser->add((*i).Name.c_str());
}
}

LADSPAPluginGUI::LADSPAPluginGUI(int w, int h,LADSPAPlugin *o,const HostInfo *Info) :
SpiralPluginGUI(w,h,o)
LADSPAPluginGUI::LADSPAPluginGUI(int w, int h,LADSPAPlugin *o, ChannelHandler *ch,const HostInfo *Info, const vector<LPluginInfo> &PVec) :
SpiralPluginGUI(w,h,o,ch)
{
PluginList=PVec;
m_Filename="None";

m_Plugin=o;

int Width=20;
int Height=100;

m_Browser= new Fl_Hold_Browser(5,20,290,260,"LADSPA Plugins");
m_Browser->callback((Fl_Callback*)cb_Select);
for (vector<LPluginInfo>::iterator i=PluginList.begin();
i!=PluginList.end(); i++)
{
m_Browser->add((*i).Name.c_str());
}

m_InputScroll = new Fl_Scroll(300,80,290,150," Value Min Max Clamp?");
m_InputScroll->align(FL_ALIGN_TOP_LEFT);
@@ -165,10 +98,6 @@ SpiralPluginGUI(w,h,o)
m_PowerAmp->callback((Fl_Callback*)cb_PowerAmp);
add(m_PowerAmp);
inited = 0;
refreshPluginList();
inited = 1;
end();
}

@@ -280,21 +209,24 @@ void LADSPAPluginGUI::AddPortInfo(const char *Info)
}


void LADSPAPluginGUI::UpdateValues()
void LADSPAPluginGUI::UpdateValues(SpiralPlugin *o)
{
m_OutputGain->value(m_Plugin->GetGain());
LADSPAPlugin* Plugin = (LADSPAPlugin*)o;
m_OutputGain->value(Plugin->GetGain());
}

inline void LADSPAPluginGUI::cb_Gain_i(Fl_Knob* o, void* v)
{ m_Plugin->SetGain(o->value()); }
{ m_GUICH->Set("Gain",(float)(o->value())); }
void LADSPAPluginGUI::cb_Gain(Fl_Knob* o, void* v)
{ ((LADSPAPluginGUI*)(o->parent()))->cb_Gain_i(o,v); }

inline void LADSPAPluginGUI::cb_Select_i(Fl_Hold_Browser* o)
{
m_Filename=PluginList[o->value()-1].Filename;
m_Label=PluginList[o->value()-1].Label;
m_Plugin->UpdatePlugin(m_Filename.c_str(), m_Label.c_str());
m_Label=PluginList[o->value()-1].Label;
m_GUICH->Set("Num",o->value()-1);
m_GUICH->SetCommand(LADSPAPlugin::UPDATEPLUGIN);
}
void LADSPAPluginGUI::cb_Select(Fl_Hold_Browser* o)
{ ((LADSPAPluginGUI*)(o->parent()))->cb_Select_i(o);}
@@ -305,21 +237,21 @@ inline void LADSPAPluginGUI::cb_MinMax_i(Fl_Button* o, void* v)
for (vector<Fl_Input*>::iterator i=m_PortMin.begin();
i!=m_PortMin.end(); i++)
{
m_Plugin->SetMin(n,atof((*i)->value()));
m_GUICH->Set("Min",(float)(n,atof((*i)->value())));
n++;
}
n=0;
for (vector<Fl_Input*>::iterator i=m_PortMax.begin();
i!=m_PortMax.end(); i++)
{
m_Plugin->SetMax(n,atof((*i)->value()));
m_GUICH->Set("Max",(n,atof((*i)->value())));
n++;
}
n=0;
for (vector<Fl_Check_Button*>::iterator i=m_PortClamp.begin();
i!=m_PortClamp.end(); i++)
{
m_Plugin->SetPortClamp(n,(*i)->value());
m_GUICH->Set("Clamp",(bool)(n,(*i)->value()));
n++;
}
}
@@ -328,7 +260,7 @@ void LADSPAPluginGUI::cb_MinMax(Fl_Button* o, void* v)

inline void LADSPAPluginGUI::cb_PowerAmp_i(Fl_Button* o, void* v)
{
m_Plugin->SetAmped(o->value());
m_GUICH->Set("Amped",(bool)(o->value()));
}
void LADSPAPluginGUI::cb_PowerAmp(Fl_Button* o, void* v)
{ ((LADSPAPluginGUI*)(o->parent()))->cb_PowerAmp_i(o,v);}

+ 6
- 31
SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.h View File

@@ -31,7 +31,6 @@
#include "../Widgets/Fl_Knob.H"

#include <vector>
#include "ladspa.h"
#include <string>

#include "LADSPAPlugin.h"
@@ -40,39 +39,18 @@
#ifndef LADSPAGUI
#define LADSPAGUI

#include "ladspa.h"
#include <stdio.h>
#include <math.h>
#include <dlfcn.h>
#include <vector>
#include "utils.h"

class LPluginInfo {
public:
string Filename;
string Label;
string Name;
bool operator<(const LPluginInfo & li) { return (Name < li.Name); }
bool operator==(const LPluginInfo& li) { return (Name == li.Name); }
};

// For sorting vectors of LPluginInfo's
struct LPluginInfoSortAsc
{
bool operator()(const LPluginInfo & begin, const LPluginInfo & end)
{
return begin.Name < end.Name;
}
};

class LADSPAPluginGUI : public SpiralPluginGUI
{
public:
LADSPAPluginGUI(int w, int h, LADSPAPlugin *o,const HostInfo *Info);
LADSPAPluginGUI(int w, int h, LADSPAPlugin *o, ChannelHandler *ch, const HostInfo *Info, const vector<LPluginInfo> &PVec);
~LADSPAPluginGUI();

virtual void UpdateValues();
virtual SpiralPlugin* GetPlugin() { return m_Plugin; }
virtual void UpdateValues(SpiralPlugin *o);

void SetName(const char *s);
void SetMaker(const char *s);
@@ -87,14 +65,9 @@ public:
string GetLabel() { return m_Label; }
void SetFilename(string s) { m_Filename=s; }
void SetLabel(string s) { m_Label=s; }
LADSPAPlugin *m_Plugin;
private:
vector<LPluginInfo> PluginList;
LPluginInfo CurrentPlugin;
friend void describePluginLibrary(const char * pcFullFilename, void * pvPluginHandle, LADSPA_Descriptor_Function pfDescriptorFunction);
void refreshPluginList(void);
LPluginInfo m_CurrentPlugin;

Fl_Scroll *m_InputScroll;
Fl_Pack *m_InputPack;
@@ -110,6 +83,8 @@ private:
vector<Fl_Input*> m_PortMax;
vector<Fl_Check_Button*> m_PortClamp;
vector<LPluginInfo> PluginList;
// this is needed as fltk seems to crash if you delete
// the pack, is won't delete the children properly???
vector<Fl_Group*> m_PackVec;


+ 5
- 0
SpiralSound/Plugins/LADSPAPlugin/Makefile.in View File

@@ -43,6 +43,7 @@ mandir = @mandir@

HEADERS = ../SpiralPlugin.h \
../SpiralPluginGUI.h \
../../ChannelHandler.h \
../Widgets/Fl_Knob.H \
../Widgets/Fl_DragBar.H \
../../Sample.h \
@@ -52,6 +53,7 @@ HEADERS = ../SpiralPlugin.h \
utils.h
SOURCES = ../SpiralPlugin.C \
../SpiralPluginGUI.C \
../../ChannelHandler.C \
../Widgets/Fl_Knob.cxx \
../Widgets/Fl_DragBar.cxx \
../../Sample.C \
@@ -63,6 +65,7 @@ SOURCES = ../SpiralPlugin.C \
search.c
OBJECTS = ../SpiralPlugin.o \
../SpiralPluginGUI.o \
../../ChannelHandler.o \
../Widgets/Fl_Knob.o \
../Widgets/Fl_DragBar.o \
../../Sample.o \
@@ -190,3 +193,5 @@ misc.o: misc.c \
search.o: search.c \
utils.h

../../ChannelHandler.o: ../../ChannelHandler.C \
../../ChannelHandler.h

+ 4
- 3
SpiralSound/Plugins/LFOPlugin/LFOPlugin.C View File

@@ -45,6 +45,9 @@ m_TableLength (DEFAULT_TABLE_LEN) {
m_PluginInfo.PortTips.push_back ("Output");
m_PluginInfo.PortTips.push_back ("'Cosine' Output");
m_PluginInfo.PortTips.push_back ("Inverted Output");
m_AudioCH->Register("Freq",&m_Freq);
m_AudioCH->Register("Type",(char*)&m_Type);
}

LFOPlugin::~LFOPlugin() {
@@ -59,9 +62,7 @@ PluginInfo &LFOPlugin::Initialise (const HostInfo *Host) {
}

SpiralGUIType *LFOPlugin::CreateGUI() {
m_GUI = new LFOPluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, this, m_HostInfo);
m_GUI->hide();
return m_GUI;
return new LFOPluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, this, m_AudioCH, m_HostInfo);
}

void LFOPlugin::WriteWaves() {


+ 4
- 4
SpiralSound/Plugins/LFOPlugin/LFOPlugin.h View File

@@ -34,16 +34,16 @@ class LFOPlugin : public SpiralPlugin {
virtual void Execute();
virtual void StreamOut (ostream &s);
virtual void StreamIn (istream &s);
// has to be defined in the plugin
virtual void UpdateGUI() { Fl::check(); }
enum Type {SINE, TRIANGLE, SQUARE, SAW};
void WriteWaves();
void NoteTrigger (int V, int s, int v);
void SetFreq (float s) { m_Freq=s; }
float GetFreq() { return m_Freq; }
void SetType (Type t) { m_Type=t; }
Type GetType() { return m_Type; }
private:
float AdjustPos (float pos);
// Voice specific parameter
int m_Note;


+ 14
- 17
SpiralSound/Plugins/LFOPlugin/LFOPluginGUI.C View File

@@ -124,15 +124,13 @@ static unsigned char *image_Saw[] = {
(unsigned char*)" ",
(unsigned char*)" "};
LFOPluginGUI::LFOPluginGUI(int w, int h,LFOPlugin *o,const HostInfo *Info) :
SpiralPluginGUI(w,h,o),
LFOPluginGUI::LFOPluginGUI(int w, int h,LFOPlugin *o,ChannelHandler *ch,const HostInfo *Info) :
SpiralPluginGUI(w,h,o,ch),
pixmap_Sine(image_Sine),
pixmap_Tri(image_Tri),
pixmap_Square(image_Square),
pixmap_Saw(image_Saw) {
m_Plugin=o;
ShapeSine = new Fl_Check_Button (5, 15, 55, 30);
ShapeSine->type (FL_RADIO_BUTTON);
ShapeSine->down_box (FL_DIAMOND_DOWN_BOX);
@@ -196,18 +194,20 @@ pixmap_Saw(image_Saw) {
end();
}
void LFOPluginGUI::UpdateValues() {
void LFOPluginGUI::UpdateValues(SpiralPlugin *o) {
LFOPlugin* Plugin = (LFOPlugin*)o;
ShapeSine->value (0);
ShapeTri->value (0);
ShapeSquare->value (0);
ShapeSaw->value (0);
switch (m_Plugin->GetType()) {
switch (Plugin->GetType()) {
case LFOPlugin::SINE : ShapeSine->value (1); break;
case LFOPlugin::TRIANGLE : ShapeTri->value (1); break;
case LFOPlugin::SQUARE : ShapeSquare->value (1); break;
case LFOPlugin::SAW : ShapeSaw->value (1); break;
}
float x = m_Plugin->GetFreq();
float x = Plugin->GetFreq();
NumFreq->value (x);
x = 1 / x;
Perd->value (x);
@@ -217,8 +217,7 @@ void LFOPluginGUI::UpdateValues() {
// Callbacks for knobs and counters
inline void LFOPluginGUI::cb_Perd_i (Fl_Knob* o, void* v) {
m_Plugin->SetFreq (1 / o->value());
UpdateValues();
m_GUICH->Set("Freq",(float)(1.0f / o->value()));
}
void LFOPluginGUI::cb_Perd (Fl_Knob* o, void* v) {
((LFOPluginGUI*)(o->parent()))->cb_Perd_i (o, v);
@@ -226,8 +225,7 @@ void LFOPluginGUI::cb_Perd (Fl_Knob* o, void* v) {
inline void LFOPluginGUI::cb_NumPerd_i (Fl_Knob* o, void* v) {
m_Plugin->SetFreq (1 / o->value());
UpdateValues();
m_GUICH->Set("Freq",(float)(1.0f / o->value()));
}
void LFOPluginGUI::cb_NumPerd (Fl_Knob* o, void* v) {
((LFOPluginGUI*)(o->parent()))->cb_NumPerd_i (o, v);
@@ -235,8 +233,7 @@ void LFOPluginGUI::cb_NumPerd (Fl_Knob* o, void* v) {
inline void LFOPluginGUI::cb_NumFreq_i (Fl_Knob* o, void* v) {
m_Plugin->SetFreq (o->value());
UpdateValues();
m_GUICH->Set("Freq",(float)(o->value()));
}
void LFOPluginGUI::cb_NumFreq (Fl_Knob* o, void* v) {
@@ -246,7 +243,7 @@ void LFOPluginGUI::cb_NumFreq (Fl_Knob* o, void* v) {
// Callbacks for waveform buttons
inline void LFOPluginGUI::cb_Sine_i (Fl_Check_Button* o, void* v) {
m_Plugin->SetType (LFOPlugin::SINE);
m_GUICH->Set("Type",(char)(LFOPlugin::SINE));
}
void LFOPluginGUI::cb_Sine(Fl_Check_Button* o, void* v) {
((LFOPluginGUI*)(o->parent()))->cb_Sine_i (o, v);
@@ -254,7 +251,7 @@ void LFOPluginGUI::cb_Sine(Fl_Check_Button* o, void* v) {
inline void LFOPluginGUI::cb_Tri_i (Fl_Check_Button* o, void* v) {
m_Plugin->SetType (LFOPlugin::TRIANGLE);
m_GUICH->Set("Type",(char)(LFOPlugin::TRIANGLE));
}
void LFOPluginGUI::cb_Tri (Fl_Check_Button* o, void* v) {
((LFOPluginGUI*)(o->parent()))->cb_Tri_i (o, v);
@@ -262,7 +259,7 @@ void LFOPluginGUI::cb_Tri (Fl_Check_Button* o, void* v) {
inline void LFOPluginGUI::cb_Square_i (Fl_Check_Button* o, void* v) {
m_Plugin->SetType (LFOPlugin::SQUARE);
m_GUICH->Set("Type",(char)(LFOPlugin::SQUARE));
}
void LFOPluginGUI::cb_Square (Fl_Check_Button* o, void* v) {
((LFOPluginGUI*)(o->parent()))->cb_Square_i (o, v);
@@ -270,7 +267,7 @@ void LFOPluginGUI::cb_Square (Fl_Check_Button* o, void* v) {
inline void LFOPluginGUI::cb_Saw_i (Fl_Check_Button* o, void* v) {
m_Plugin->SetType (LFOPlugin::SAW);
m_GUICH->Set("Type",(LFOPlugin::SAW));
}
void LFOPluginGUI::cb_Saw (Fl_Check_Button* o, void* v) {
((LFOPluginGUI*)(o->parent()))->cb_Saw_i (o, v);


+ 4
- 5
SpiralSound/Plugins/LFOPlugin/LFOPluginGUI.h View File

@@ -28,11 +28,10 @@
class LFOPluginGUI : public SpiralPluginGUI {
public:
LFOPluginGUI(int w, int h, LFOPlugin *o,const HostInfo *Info);
virtual void UpdateValues();
virtual SpiralPlugin* GetPlugin() { return m_Plugin; }
LFOPlugin *m_Plugin;
private:
LFOPluginGUI(int w, int h, LFOPlugin *o,ChannelHandler *ch,const HostInfo *Info);
virtual void UpdateValues(SpiralPlugin *o);
private:
Fl_Check_Button* ShapeSine;
Fl_Pixmap pixmap_Sine;
Fl_Check_Button* ShapeTri;


+ 7
- 2
SpiralSound/Plugins/LFOPlugin/Makefile View File

@@ -10,8 +10,8 @@

CC = gcc
CXX = g++
CFLAGS = -pipe -Wall -O3 -ffast-math -DNO_DEBUG -Wno-unused
CXXFLAGS= -pipe -Wall -O3 -ffast-math -DNO_DEBUG -Wno-unused
CFLAGS = -pipe -Wall -O3 -ffast-math -DNO_DEBUG -Wno-unused -fPIC
CXXFLAGS= -pipe -Wall -O3 -ffast-math -DNO_DEBUG -Wno-unused -fPIC -fPIC
INCPATH = -I/usr/X11R6/include
LINK = g++ -shared
LFLAGS =
@@ -44,6 +44,7 @@ mandir = ${prefix}/man

HEADERS = ../SpiralPlugin.h \
../SpiralPluginGUI.h \
../../ChannelHandler.h \
../Widgets/Fl_Knob.H \
../Widgets/Fl_DragBar.H \
../../Sample.h \
@@ -51,6 +52,7 @@ HEADERS = ../SpiralPlugin.h \
LFOPluginGUI.h
SOURCES = ../SpiralPlugin.C \
../SpiralPluginGUI.C \
../../ChannelHandler.C \
../Widgets/Fl_Knob.cxx \
../Widgets/Fl_DragBar.cxx \
../../Sample.C \
@@ -58,6 +60,7 @@ SOURCES = ../SpiralPlugin.C \
LFOPluginGUI.C
OBJECTS = ../SpiralPlugin.o \
../SpiralPluginGUI.o \
../../ChannelHandler.o \
../Widgets/Fl_Knob.o \
../Widgets/Fl_DragBar.o \
../../Sample.o \
@@ -165,3 +168,5 @@ LFOPluginGUI.o: LFOPluginGUI.C \
../../SpiralInfo.h \
../../Sample.h

../../ChannelHandler.o: ../../ChannelHandler.C \
../../ChannelHandler.h

+ 5
- 0
SpiralSound/Plugins/LFOPlugin/Makefile.in View File

@@ -43,6 +43,7 @@ mandir = @mandir@

HEADERS = ../SpiralPlugin.h \
../SpiralPluginGUI.h \
../../ChannelHandler.h \
../Widgets/Fl_Knob.H \
../Widgets/Fl_DragBar.H \
../../Sample.h \
@@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \
LFOPluginGUI.h
SOURCES = ../SpiralPlugin.C \
../SpiralPluginGUI.C \
../../ChannelHandler.C \
../Widgets/Fl_Knob.cxx \
../Widgets/Fl_DragBar.cxx \
../../Sample.C \
@@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \
LFOPluginGUI.C
OBJECTS = ../SpiralPlugin.o \
../SpiralPluginGUI.o \
../../ChannelHandler.o \
../Widgets/Fl_Knob.o \
../Widgets/Fl_DragBar.o \
../../Sample.o \
@@ -164,3 +167,5 @@ LFOPluginGUI.o: LFOPluginGUI.C \
../../SpiralInfo.h \
../../Sample.h

../../ChannelHandler.o: ../../ChannelHandler.C \
../../ChannelHandler.h

+ 5
- 0
SpiralSound/Plugins/MatrixPlugin/Makefile.in View File

@@ -43,6 +43,7 @@ mandir = @mandir@

HEADERS = ../SpiralPlugin.h \
../SpiralPluginGUI.h \
../../ChannelHandler.h \
../Widgets/Fl_Knob.H \
../Widgets/Fl_DragBar.H \
../Widgets/Fl_LED_Button.H \
@@ -51,6 +52,7 @@ HEADERS = ../SpiralPlugin.h \
MatrixPluginGUI.h
SOURCES = ../SpiralPlugin.C \
../SpiralPluginGUI.C \
../../ChannelHandler.C \
../Widgets/Fl_Knob.cxx \
../Widgets/Fl_DragBar.cxx \
../Widgets/Fl_LED_Button.cxx \
@@ -59,6 +61,7 @@ SOURCES = ../SpiralPlugin.C \
MatrixPluginGUI.C
OBJECTS = ../SpiralPlugin.o \
../SpiralPluginGUI.o \
../../ChannelHandler.o \
../Widgets/Fl_Knob.o \
../Widgets/Fl_DragBar.o \
../Widgets/Fl_LED_Button.o \
@@ -174,3 +177,5 @@ MatrixPluginGUI.o: MatrixPluginGUI.C \
../Widgets/Fl_Knob.H \
../Widgets/Fl_LED_Button.H

../../ChannelHandler.o: ../../ChannelHandler.C \
../../ChannelHandler.h

+ 61
- 9
SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.C View File

@@ -101,6 +101,18 @@ m_CopyPattern(0)
m_TriggerLevel[n]=0;
}
m_AudioCH->Register("NoteCut",&m_NoteCut,ChannelHandler::INPUT);
m_AudioCH->Register("Current",&m_Current,ChannelHandler::INPUT);
m_AudioCH->Register("StepTime",&m_StepTime,ChannelHandler::INPUT);
m_AudioCH->Register("Num",&m_GUIArgs.Num,ChannelHandler::INPUT);
m_AudioCH->Register("Length",&m_GUIArgs.Length,ChannelHandler::INPUT);
m_AudioCH->Register("Speed",&m_GUIArgs.Speed,ChannelHandler::INPUT);
m_AudioCH->Register("X",&m_GUIArgs.X,ChannelHandler::INPUT);
m_AudioCH->Register("Y",&m_GUIArgs.Y,ChannelHandler::INPUT);
m_AudioCH->Register("Octave",&m_GUIArgs.Octave,ChannelHandler::INPUT);
m_AudioCH->Register("Step",&m_Step,ChannelHandler::OUTPUT);
m_AudioCH->RegisterData("Matrix",ChannelHandler::OUTPUT_REQUEST,&m_Matrix,sizeof(m_Matrix));
}

MatrixPlugin::~MatrixPlugin()
@@ -116,11 +128,9 @@ PluginInfo &MatrixPlugin::Initialise(const HostInfo *Host)

SpiralGUIType *MatrixPlugin::CreateGUI()
{
m_GUI = new MatrixPluginGUI(m_PluginInfo.Width,
return new MatrixPluginGUI(m_PluginInfo.Width,
m_PluginInfo.Height,
this,m_HostInfo);
m_GUI->hide();
return m_GUI;
this,m_AudioCH,m_HostInfo);
}

void MatrixPlugin::Execute()
@@ -157,7 +167,7 @@ void MatrixPlugin::Execute()
// make it so the next note to trigger
// will be the first one
if (m_GUI) ((MatrixPluginGUI*)m_GUI)->UpdateValues();
//if (m_GUI) ((MatrixPluginGUI*)m_GUI)->UpdateValues();
m_Time=m_StepTime*(1/m_Matrix[m_Current].Speed);
m_Step=-1;
@@ -206,7 +216,7 @@ void MatrixPlugin::Execute()
if (m_Step >= m_Matrix[m_Current].Length) m_Step=0;
if (m_GUI) ((MatrixPluginGUI*)m_GUI)->SetLED(m_Step);
//if (m_GUI) ((MatrixPluginGUI*)m_GUI)->SetLED(m_Step);
// Reset the values
m_CurrentTriggerCV=0;
@@ -236,10 +246,52 @@ void MatrixPlugin::Execute()
}
}
}
void MatrixPlugin::PastePattern() {
cerr<<hex<<this<<dec<<endl;
cerr<<m_CopyPattern<<endl;

void MatrixPlugin::ExecuteCommands()
{
if (m_AudioCH->IsCommandWaiting())
{
switch (m_AudioCH->GetCommand())
{
case MAT_LENGTH :
cerr<<m_GUIArgs.Length<<endl;
m_Matrix[m_Current].Length=m_GUIArgs.Length;
break;
case MAT_SPEED :
m_Matrix[m_Current].Speed=m_GUIArgs.Speed;
break;
case MAT_ACTIVATE :
m_Matrix[m_Current].Matrix[m_GUIArgs.X][m_GUIArgs.Y]=true;
break;
case MAT_DEACTIVATE :
m_Matrix[m_Current].Matrix[m_GUIArgs.X][m_GUIArgs.Y]=false;
break;
case MAT_OCTAVE :
m_Matrix[m_Current].Octave=m_GUIArgs.Octave;
break;
case COPY :
CopyPattern();
break;
case PASTE :
PastePattern();
break;
case CLEAR :
ClearPattern();
break;
case TUP :
if (CanTransposeUp()) TransposeUp();
break;
case TDOWN :
if (CanTransposeDown()) TransposeDown();
break;
}
}
}

void MatrixPlugin::PastePattern() {
m_Matrix[m_Current].Length = m_Matrix[m_CopyPattern].Length;
m_Matrix[m_Current].Speed = m_Matrix[m_CopyPattern].Speed;
m_Matrix[m_Current].Octave = m_Matrix[m_CopyPattern].Octave;


+ 18
- 8
SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.h View File

@@ -43,20 +43,31 @@ public:
virtual PluginInfo &Initialise(const HostInfo *Host);
virtual SpiralGUIType *CreateGUI();
virtual void Execute();
virtual void ExecuteCommands();
virtual void StreamOut(ostream &s);
virtual void StreamIn(istream &s);
// has to be defined in the plugin
virtual void UpdateGUI() { Fl::check(); }
void SetNoteCut(bool s) { m_NoteCut=s; }
bool GetNoteCut() { return m_NoteCut; }
void SetCurrent(int s) { m_Current=s; }
int GetCurrent() { return m_Current; }
void SetStepTime(float s) { m_StepTime=s; }
float GetStepTime() { return m_StepTime; }
Pattern* GetPattern() { return &m_Matrix[m_Current]; }
enum GUICommands{NONE,MAT_LENGTH,MAT_SPEED,MAT_ACTIVATE,MAT_DEACTIVATE,
MAT_OCTAVE,COPY,PASTE,CLEAR,TUP,TDOWN};
struct GUIArgs
{
int Num;
int Length;
float Speed;
int X,Y;
int Octave;
};
private:

GUIArgs m_GUIArgs;

void CopyPattern() { m_CopyPattern = m_Current; }
void PastePattern();
void ClearPattern();
@@ -65,7 +76,6 @@ public:
void TransposeDown();
bool CanTransposeDown();
private:
float m_TickTime;
float m_StepTime;
float m_Time;


+ 70
- 33
SpiralSound/Plugins/MatrixPlugin/MatrixPluginGUI.C View File

@@ -27,10 +27,9 @@ static const int GUIBG2_COLOUR = 145;

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

MatrixPluginGUI::MatrixPluginGUI(int w, int h,MatrixPlugin *o,const HostInfo *Info) :
SpiralPluginGUI(w,h,o)
MatrixPluginGUI::MatrixPluginGUI(int w, int h,MatrixPlugin *o,ChannelHandler *ch,const HostInfo *Info) :
SpiralPluginGUI(w,h,o,ch)
{
m_Plugin=o;
//size_range(10,10);
m_NoteCut = new Fl_Button (5, h-30, 85, 20,"NoteCut");
m_NoteCut->type(1);
@@ -142,25 +141,39 @@ SpiralPluginGUI(w,h,o)
end();
}

void MatrixPluginGUI::UpdateValues()
void MatrixPluginGUI::draw()
{
SpiralPluginGUI::draw();
for(int x=0; x<MATX; x++)
{
m_Flash[x]->value(0);
}

m_Flash[m_GUICH->GetInt("Step")]->value(1);
}

void MatrixPluginGUI::UpdateValues(SpiralPlugin *o)
{
m_Pattern->value(m_Plugin->GetCurrent());
m_Length->value(m_Plugin->GetPattern()->Length);
m_Speed->value(m_Plugin->GetPattern()->Speed);
MatrixPlugin *Plugin = (MatrixPlugin*)o;
m_Pattern->value(Plugin->GetCurrent());
m_Length->value(Plugin->GetPattern()->Length);
m_Speed->value(Plugin->GetPattern()->Speed);
m_SpeedVal->value((int)m_Speed->value());
m_Octave->value(m_Plugin->GetPattern()->Octave);
m_Octave->value(Plugin->GetPattern()->Octave);
for(int x=0; x<MATX; x++)
for(int y=0; y<MATY; y++)
{
m_Matrix[x][y]->value(m_Plugin->GetPattern()->Matrix[x][y]);
m_Matrix[x][y]->value(Plugin->GetPattern()->Matrix[x][y]);
}
if (m_Plugin->CanTransposeUp()) m_TransUpBtn->activate(); else m_TransUpBtn->deactivate();
if (m_Plugin->CanTransposeDown()) m_TransDnBtn->activate(); else m_TransDnBtn->deactivate();
//if (Plugin->CanTransposeUp()) m_TransUpBtn->activate(); else m_TransUpBtn->deactivate();
//if (Plugin->CanTransposeDown()) m_TransDnBtn->activate(); else m_TransDnBtn->deactivate();
}
void MatrixPluginGUI::SetLED(int n)
/*void MatrixPluginGUI::SetLED(int n)
{
for (int i=0; i<MATX; i++)
{
@@ -168,20 +181,35 @@ void MatrixPluginGUI::SetLED(int n)
}
m_Flash[n]->value(true);
}
}*/
void MatrixPluginGUI::UpdateMatrix()
{
m_GUICH->RequestChannelAndWait("Matrix");
m_GUICH->GetData("Matrix",(void*)m_GUIMatrix);
for(int x=0; x<MATX; x++)
for(int y=0; y<MATY; y++)
{
m_Matrix[x][y]->value(m_GUIMatrix[(int)m_Pattern->value()].Matrix[x][y]);
}

}

inline void MatrixPluginGUI::cb_NoteCut_i(Fl_Button* o, void* v)
{
m_Plugin->SetNoteCut(o->value());
m_GUICH->Set("NoteCut",o->value());
}
void MatrixPluginGUI::cb_NoteCut(Fl_Button* o, void* v)
{ ((MatrixPluginGUI*)(o->parent()))->cb_NoteCut_i(o,v);}

inline void MatrixPluginGUI::cb_Matrix_i(Fl_Button* o, void* v)
{
m_Plugin->GetPattern()->Matrix[*(int*)v/MATY][*(int*)v%MATY]=o->value();
UpdateValues();
m_GUICH->Set("X",*(int*)v/MATY);
m_GUICH->Set("Y",*(int*)v%MATY);

if (o->value()) m_GUICH->SetCommand(MatrixPlugin::MAT_ACTIVATE);
else m_GUICH->SetCommand(MatrixPlugin::MAT_DEACTIVATE);
}
void MatrixPluginGUI::cb_Matrix(Fl_Button* o, void* v)
{ ((MatrixPluginGUI*)(o->parent()))->cb_Matrix_i(o,v);}
@@ -190,8 +218,8 @@ inline void MatrixPluginGUI::cb_Pattern_i(Fl_Counter* o, void* v)
{
if (o->value()<0) o->value(0);
if (o->value()>NUM_PATTERNS-1) o->value(NUM_PATTERNS-1);
m_Plugin->SetCurrent((int)o->value());
UpdateValues();
m_GUICH->Set("Current",(int)o->value());
UpdateMatrix();
}
void MatrixPluginGUI::cb_Pattern(Fl_Counter* o, void* v)
{ ((MatrixPluginGUI*)(o->parent()))->cb_Pattern_i(o,v);}
@@ -200,7 +228,13 @@ inline void MatrixPluginGUI::cb_Length_i(Fl_Counter* o, void* v)
{
if (o->value()<1) o->value(1);
if (o->value()>64) o->value(64);
m_Plugin->GetPattern()->Length=(int)o->value();
//m_GUICH->GetPattern()->Length=(int)o->value();
cerr<<(int)o->value()<<endl;
m_GUICH->Set("Length",(int)o->value());
m_GUICH->SetCommand(MatrixPlugin::MAT_LENGTH);

}
void MatrixPluginGUI::cb_Length(Fl_Counter* o, void* v)
{ ((MatrixPluginGUI*)(o->parent()))->cb_Length_i(o,v);}
@@ -209,8 +243,10 @@ inline void MatrixPluginGUI::cb_Speed_i(Fl_Knob* o, void* v)
{
// Round off value, but it should be a float for tweaking
float value=o->value()+((int)o->value()-o->value());
m_Plugin->GetPattern()->Speed=o->value();
m_SpeedVal->value(value);
m_GUICH->Set("Speed",(float)value);
m_GUICH->SetCommand(MatrixPlugin::MAT_SPEED);
}
void MatrixPluginGUI::cb_Speed(Fl_Knob* o, void* v)
{ ((MatrixPluginGUI*)(o->parent()))->cb_Speed_i(o,v);}
@@ -218,16 +254,17 @@ void MatrixPluginGUI::cb_Speed(Fl_Knob* o, void* v)
inline void MatrixPluginGUI::cb_Octave_i(Fl_Counter* o, void* v)
{
if (o->value()<0) o->value(0);
if (o->value()>6) o->value(6);
m_Plugin->GetPattern()->Octave=(int)o->value();
if (o->value()>6) o->value(6);
m_GUICH->Set("Octave",(int)o->value());
m_GUICH->SetCommand(MatrixPlugin::MAT_OCTAVE);
}
void MatrixPluginGUI::cb_Octave(Fl_Counter* o, void* v)
{ ((MatrixPluginGUI*)(o->parent()))->cb_Octave_i(o,v);}

inline void MatrixPluginGUI::cb_SpeedVal_i (Fl_Counter* o, void* v)
{
m_Speed->value (o->value());
m_Plugin->GetPattern()->Speed = (float)o->value() * 0.1;
m_Speed->value(o->value());
}

void MatrixPluginGUI::cb_SpeedVal (Fl_Counter* o, void* v)
@@ -238,7 +275,7 @@ void MatrixPluginGUI::cb_SpeedVal (Fl_Counter* o, void* v)
inline void MatrixPluginGUI::cb_CopyBtn_i (Fl_Button* o, void* v)
{
m_PasteBtn->activate();
m_Plugin->CopyPattern();
m_GUICH->SetCommand(MatrixPlugin::COPY);
}

void MatrixPluginGUI::cb_CopyBtn (Fl_Button* o, void* v)
@@ -248,8 +285,8 @@ void MatrixPluginGUI::cb_CopyBtn (Fl_Button* o, void* v)

inline void MatrixPluginGUI::cb_PasteBtn_i (Fl_Button* o, void* v)
{
m_Plugin->PastePattern();
UpdateValues();
m_GUICH->SetCommand(MatrixPlugin::PASTE);
UpdateMatrix();
}

void MatrixPluginGUI::cb_PasteBtn (Fl_Button* o, void* v)
@@ -259,8 +296,8 @@ void MatrixPluginGUI::cb_PasteBtn (Fl_Button* o, void* v)

inline void MatrixPluginGUI::cb_ClearBtn_i (Fl_Button* o, void* v)
{
m_Plugin->ClearPattern();
UpdateValues();
m_GUICH->SetCommand(MatrixPlugin::CLEAR);
UpdateMatrix();
}

void MatrixPluginGUI::cb_ClearBtn (Fl_Button* o, void* v)
@@ -270,8 +307,8 @@ void MatrixPluginGUI::cb_ClearBtn (Fl_Button* o, void* v)

inline void MatrixPluginGUI::cb_TransUpBtn_i (Fl_Button* o, void* v)
{
m_Plugin->TransposeUp();
UpdateValues();
m_GUICH->SetCommand(MatrixPlugin::TUP);
UpdateMatrix();
}

void MatrixPluginGUI::cb_TransUpBtn (Fl_Button* o, void* v)
@@ -281,8 +318,8 @@ void MatrixPluginGUI::cb_TransUpBtn (Fl_Button* o, void* v)

inline void MatrixPluginGUI::cb_TransDnBtn_i (Fl_Button* o, void* v)
{
m_Plugin->TransposeDown();
UpdateValues();
m_GUICH->SetCommand(MatrixPlugin::TDOWN);
UpdateMatrix();
}

void MatrixPluginGUI::cb_TransDnBtn (Fl_Button* o, void* v)


+ 6
- 8
SpiralSound/Plugins/MatrixPlugin/MatrixPluginGUI.h View File

@@ -33,21 +33,19 @@
#ifndef MatrixGUI
#define MatrixGUI


class MatrixPluginGUI : public SpiralPluginGUI
{
public:
MatrixPluginGUI(int w, int h, MatrixPlugin *o,const HostInfo *Info);
virtual void UpdateValues();
virtual SpiralPlugin* GetPlugin() { return m_Plugin; }
MatrixPluginGUI(int w, int h, MatrixPlugin *o,ChannelHandler *ch,const HostInfo *Info);
virtual void draw();
virtual void UpdateValues(SpiralPlugin *o);
void SetLED(int n);
MatrixPlugin *m_Plugin;
private:
void UpdateMatrix();
int Numbers[MATX*MATY];
Pattern m_GUIMatrix[NUM_PATTERNS];
Fl_Button* m_NoteCut;
Fl_Counter* m_Pattern;


+ 2
- 2
SpiralSound/Plugins/MeterPlugin/Makefile View File

@@ -7,8 +7,8 @@

CC = gcc
CXX = g++
CFLAGS = -pipe -Wall -O3 -ffast-math -DNO_DEBUG -Wno-unused
CXXFLAGS= -pipe -Wall -O3 -ffast-math -DNO_DEBUG -Wno-unused
CFLAGS = -pipe -Wall -O3 -ffast-math -DNO_DEBUG -Wno-unused -fPIC
CXXFLAGS= -pipe -Wall -O3 -ffast-math -DNO_DEBUG -Wno-unused -fPIC -fPIC
INCPATH = -I/usr/X11R6/include
LINK = g++ -shared
LFLAGS =


+ 5
- 0
SpiralSound/Plugins/MidiPlugin/Makefile.in View File

@@ -43,6 +43,7 @@ mandir = @mandir@

HEADERS = ../SpiralPlugin.h \
../SpiralPluginGUI.h \
../../ChannelHandler.h \
../Widgets/Fl_Knob.H \
../Widgets/Fl_DragBar.H \
../../Sample.h \
@@ -51,6 +52,7 @@ HEADERS = ../SpiralPlugin.h \
MidiPluginGUI.h
SOURCES = ../SpiralPlugin.C \
../SpiralPluginGUI.C \
../../ChannelHandler.C \
../Widgets/Fl_Knob.cxx \
../Widgets/Fl_DragBar.cxx \
../../Sample.C \
@@ -59,6 +61,7 @@ SOURCES = ../SpiralPlugin.C \
MidiPluginGUI.C
OBJECTS = ../SpiralPlugin.o \
../SpiralPluginGUI.o \
../../ChannelHandler.o \
../Widgets/Fl_Knob.o \
../Widgets/Fl_DragBar.o \
../../Sample.o \
@@ -175,3 +178,5 @@ MidiPluginGUI.o: MidiPluginGUI.C \
../SpiralPluginGUI.h \
../Widgets/Fl_DragBar.H

../../ChannelHandler.o: ../../ChannelHandler.C \
../../ChannelHandler.h

+ 22
- 5
SpiralSound/Plugins/MidiPlugin/MidiPlugin.C View File

@@ -73,6 +73,12 @@ m_CurrentNote(0)
m_PluginInfo.PortTips.push_back("Aftertouch CV");
for (int n=0; n<128; n++) m_ControlLevel[n]=0;
m_AudioCH->Register("DeviceNum",&m_DeviceNum);
m_AudioCH->Register("NoteCut",&m_NoteCut);
m_AudioCH->Register("CC",&m_GUIArgs.s);
m_AudioCH->RegisterData("Name",ChannelHandler::INPUT,
&m_GUIArgs.Name,sizeof(m_GUIArgs.Name));
}

MidiPlugin::~MidiPlugin()
@@ -91,16 +97,14 @@ PluginInfo &MidiPlugin::Initialise(const HostInfo *Host)

SpiralGUIType *MidiPlugin::CreateGUI()
{
m_GUI = new MidiPluginGUI(m_PluginInfo.Width,
return new MidiPluginGUI(m_PluginInfo.Width,
m_PluginInfo.Height,
this,m_HostInfo);
// m_GUI->show();
m_GUI->hide();
return m_GUI;
this,m_AudioCH,m_HostInfo);
}

void MidiPlugin::Execute()
{

// Done to clear IsEmpty field...
GetOutputBuf(0)->Zero();
GetOutputBuf(1)->Zero();
@@ -229,6 +233,19 @@ void MidiPlugin::Execute()
if (Triggered && !m_ContinuousNotes) SetOutput(1,0,0);
}

void MidiPlugin::ExecuteCommands()
{
// Process any commands from the GUI
if (m_AudioCH->IsCommandWaiting())
{
switch (m_AudioCH->GetCommand())
{
case (ADDCONTROL) : AddControl(m_GUIArgs.s,m_GUIArgs.Name); break;
case (DELCONTROL) : DeleteControl();
};
}
}

void MidiPlugin::AddControl(int s, const string &Name)
{
m_ControlList.push_back(s);


+ 12
- 5
SpiralSound/Plugins/MidiPlugin/MidiPlugin.h View File

@@ -31,22 +31,29 @@ public:
virtual PluginInfo& Initialise(const HostInfo *Host);
virtual SpiralGUIType* CreateGUI();
virtual void Execute();
virtual void ExecuteCommands();
virtual void StreamOut(ostream &s);
virtual void StreamIn(istream &s);
// has to be defined in the plugin
virtual void UpdateGUI() { Fl::check(); }
void SetDeviceNum(int s) { m_DeviceNum=s; }
int GetDeviceNum() { return m_DeviceNum; }
void SetNoteCut(bool s) { m_NoteCut=s; }
bool GetNoteCut() { return m_NoteCut; }
void SetContinuousNotes(bool s) { m_ContinuousNotes=s; }
bool GetContinuousNotes() { return m_ContinuousNotes; }
void AddControl(int s,const string &Name);
void DeleteControl();
enum GUICommands{NONE,ADDCONTROL,DELCONTROL};
struct GUIArgs
{
int s;
char Name[256];
};
private:
GUIArgs m_GUIArgs;
void AddControl(int s,const string &Name);
void DeleteControl();
int m_DeviceNum;



+ 21
- 11
SpiralSound/Plugins/MidiPlugin/MidiPluginGUI.C View File

@@ -74,11 +74,9 @@ int OptionsList(const vector<string> &List)

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

MidiPluginGUI::MidiPluginGUI(int w, int h,MidiPlugin *o,const HostInfo *Info) :
SpiralPluginGUI(w,h,o)
MidiPluginGUI::MidiPluginGUI(int w, int h,MidiPlugin *o,ChannelHandler *ch,const HostInfo *Info) :
SpiralPluginGUI(w,h,o,ch)
{
m_Plugin=o;
m_DeviceNum = new Fl_Counter(20,30,40,20,"Channel");
m_DeviceNum->type(FL_SIMPLE_COUNTER);
m_DeviceNum->step(1);
@@ -103,24 +101,25 @@ SpiralPluginGUI(w,h,o)
m_RemoveControl->callback((Fl_Callback*)cb_RemoveControl, NULL);
}

void MidiPluginGUI::UpdateValues()
void MidiPluginGUI::UpdateValues(SpiralPlugin *o)
{
m_DeviceNum->value(m_Plugin->GetDeviceNum());
MidiPlugin *Plugin = (MidiPlugin*)o;
m_DeviceNum->value(Plugin->GetDeviceNum());
}
//// Callbacks ////
inline void MidiPluginGUI::cb_DeviceNum_i(Fl_Counter* o, void* v)
{ m_Plugin->SetDeviceNum((int)o->value()); }
{ m_GUICH->Set("DeviceNum",(int)o->value()); }
void MidiPluginGUI::cb_DeviceNum(Fl_Counter* o, void* v)
{ ((MidiPluginGUI*)(o->parent()))->cb_DeviceNum_i(o,v);}

inline void MidiPluginGUI::cb_NoteCut_i(Fl_Button* o, void* v)
{ m_Plugin->SetNoteCut(o->value()); }
{ m_GUICH->Set("NoteCut",o->value()); }
void MidiPluginGUI::cb_NoteCut(Fl_Button* o, void* v)
{ ((MidiPluginGUI*)(o->parent()))->cb_NoteCut_i(o,v);}

inline void MidiPluginGUI::cb_ContinuousNotes_i(Fl_Button* o, void* v)
{ m_Plugin->SetContinuousNotes(o->value()); }
{ m_GUICH->Set("ContinuousNotes",o->value()); }
void MidiPluginGUI::cb_ContinuousNotes(Fl_Button* o, void* v)
{ ((MidiPluginGUI*)(o->parent()))->cb_ContinuousNotes_i(o,v);}

@@ -258,12 +257,23 @@ inline void MidiPluginGUI::cb_AddControl_i(Fl_Button* o, void* v)
List.push_back("127 Poly Operation");
int c=OptionsList(List)-1;
if (c>-1) m_Plugin->AddControl(c,List[c]);
if (c>-1)
{
m_GUICH->Set("CC",c);
char Temp[256];
sprintf(Temp,"%s",List[c].c_str());
m_GUICH->SetData("Name",Temp);
m_GUICH->SetCommand(MidiPlugin::ADDCONTROL);
//m_Plugin->AddControl(c,List[c]);
}
}
void MidiPluginGUI::cb_AddControl(Fl_Button* o, void* v)
{ ((MidiPluginGUI*)(o->parent()))->cb_AddControl_i(o,v);}

inline void MidiPluginGUI::cb_RemoveControl_i(Fl_Button* o, void* v)
{ m_Plugin->DeleteControl(); }
{
m_GUICH->SetCommand(MidiPlugin::DELCONTROL);
}
void MidiPluginGUI::cb_RemoveControl(Fl_Button* o, void* v)
{ ((MidiPluginGUI*)(o->parent()))->cb_RemoveControl_i(o,v);}

+ 2
- 5
SpiralSound/Plugins/MidiPlugin/MidiPluginGUI.h View File

@@ -36,12 +36,9 @@ int OptionsList(const vector<string> &List);
class MidiPluginGUI : public SpiralPluginGUI
{
public:
MidiPluginGUI(int w, int h, MidiPlugin *o,const HostInfo *Info);
MidiPluginGUI(int w, int h, MidiPlugin *o,ChannelHandler *ch,const HostInfo *Info);
virtual void UpdateValues();
virtual SpiralPlugin* GetPlugin() { return m_Plugin; }
MidiPlugin *m_Plugin;
virtual void UpdateValues(SpiralPlugin *o);
private:


+ 5
- 0
SpiralSound/Plugins/MixerPlugin/Makefile.in View File

@@ -43,6 +43,7 @@ mandir = @mandir@

HEADERS = ../SpiralPlugin.h \
../SpiralPluginGUI.h \
../../ChannelHandler.h \
../Widgets/Fl_Knob.H \
../Widgets/Fl_DragBar.H \
../../Sample.h \
@@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \
MixerPluginGUI.h
SOURCES = ../SpiralPlugin.C \
../SpiralPluginGUI.C \
../../ChannelHandler.C \
../Widgets/Fl_Knob.cxx \
../Widgets/Fl_DragBar.cxx \
../../Sample.C \
@@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \
MixerPluginGUI.C
OBJECTS = ../SpiralPlugin.o \
../SpiralPluginGUI.o \
../../ChannelHandler.o \
../Widgets/Fl_Knob.o \
../Widgets/Fl_DragBar.o \
../../Sample.o \
@@ -162,3 +165,5 @@ MixerPluginGUI.o: MixerPluginGUI.C \
../SpiralPluginGUI.h \
../Widgets/Fl_DragBar.H

../../ChannelHandler.o: ../../ChannelHandler.C \
../../ChannelHandler.h

+ 16
- 4
SpiralSound/Plugins/MixerPlugin/MixerPlugin.C View File

@@ -56,6 +56,9 @@ MixerPlugin::MixerPlugin()
{
m_ChannelVal[n]=1.0f;
}
m_AudioCH->Register("Value",&m_GUIArgs.Value);
m_AudioCH->Register("Num",&m_GUIArgs.Num);
}

MixerPlugin::~MixerPlugin()
@@ -69,11 +72,9 @@ PluginInfo &MixerPlugin::Initialise(const HostInfo *Host)

SpiralGUIType *MixerPlugin::CreateGUI()
{
m_GUI = new MixerPluginGUI(m_PluginInfo.Width,
return new MixerPluginGUI(m_PluginInfo.Width,
m_PluginInfo.Height,
this,m_HostInfo);
m_GUI->hide();
return m_GUI;
this,m_AudioCH,m_HostInfo);
}

void MixerPlugin::Execute()
@@ -88,6 +89,17 @@ void MixerPlugin::Execute()
}
}

void MixerPlugin::ExecuteCommands()
{
if (m_AudioCH->IsCommandWaiting())
{
switch (m_AudioCH->GetCommand())
{
case (SETCH) : SetChannel(m_GUIArgs.Num,m_GUIArgs.Value); break;
}
}
}

void MixerPlugin::StreamOut(ostream &s)
{
s<<m_Version<<" ";


+ 13
- 2
SpiralSound/Plugins/MixerPlugin/MixerPlugin.h View File

@@ -33,16 +33,27 @@ public:
virtual PluginInfo &Initialise(const HostInfo *Host);
virtual SpiralGUIType *CreateGUI();
virtual void Execute();
virtual void ExecuteCommands();
virtual void StreamOut(ostream &s);
virtual void StreamIn(istream &s);
// has to be defined in the plugin
virtual void UpdateGUI() { Fl::check(); }
void SetChannel(int n, float s) { m_ChannelVal[n]=s; }
enum GUICommands{NONE,SETCH};
struct GUIArgs
{
int Num;
float Value;
};
float GetChannel(int n) { return m_ChannelVal[n]; }
private:

GUIArgs m_GUIArgs;

void SetChannel(int n, float s) { m_ChannelVal[n]=s; }
float m_ChannelVal[NUM_CHANNELS];
};



+ 12
- 7
SpiralSound/Plugins/MixerPlugin/MixerPluginGUI.C View File

@@ -26,11 +26,9 @@ static const int GUIBG2_COLOUR = 145;

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

MixerPluginGUI::MixerPluginGUI(int w, int h,MixerPlugin *o,const HostInfo *Info) :
SpiralPluginGUI(w,h,o)
MixerPluginGUI::MixerPluginGUI(int w, int h,MixerPlugin *o,ChannelHandler *ch,const HostInfo *Info) :
SpiralPluginGUI(w,h,o,ch)
{
m_Plugin=o;
int Width=20;
int Height=100;
@@ -52,15 +50,22 @@ SpiralPluginGUI(w,h,o)
end();
}

void MixerPluginGUI::UpdateValues()
void MixerPluginGUI::UpdateValues(SpiralPlugin *o)
{
MixerPlugin *Plugin = (MixerPlugin *)o;
for (int n=0; n<NUM_CHANNELS; n++)
{
m_Chan[n]->value(2.0f-m_Plugin->GetChannel(n));
m_Chan[n]->value(2.0f-Plugin->GetChannel(n));
}
}
inline void MixerPluginGUI::cb_Chan_i(Fl_Slider* o, void* v)
{ m_Plugin->SetChannel(*(int*)(v),2.0f-o->value()); }
{
m_GUICH->Set("Num",(*(int*)(v)));
m_GUICH->Set("Value",(float)(2.0f-o->value()));
m_GUICH->SetCommand(MixerPlugin::SETCH);
}

void MixerPluginGUI::cb_Chan(Fl_Slider* o, void* v)
{ ((MixerPluginGUI*)(o->parent()))->cb_Chan_i(o,v);}

+ 3
- 5
SpiralSound/Plugins/MixerPlugin/MixerPluginGUI.h View File

@@ -31,12 +31,10 @@
class MixerPluginGUI : public SpiralPluginGUI
{
public:
MixerPluginGUI(int w, int h, MixerPlugin *o,const HostInfo *Info);
MixerPluginGUI(int w, int h, MixerPlugin *o,ChannelHandler *ch,const HostInfo *Info);
virtual void UpdateValues();
virtual SpiralPlugin* GetPlugin() { return m_Plugin; }
MixerPlugin *m_Plugin;
virtual void UpdateValues(SpiralPlugin *o);

private:
int Numbers[NUM_CHANNELS];


+ 6
- 0
SpiralSound/Plugins/MoogFilterPlugin/Makefile.in View File

@@ -43,6 +43,7 @@ mandir = @mandir@

HEADERS = ../SpiralPlugin.h \
../SpiralPluginGUI.h \
../../ChannelHandler.h \
../Widgets/Fl_Knob.H \
../Widgets/Fl_DragBar.H \
../../Sample.h \
@@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \
MoogFilterPluginGUI.h
SOURCES = ../SpiralPlugin.C \
../SpiralPluginGUI.C \
../../ChannelHandler.C \
../Widgets/Fl_Knob.cxx \
../Widgets/Fl_DragBar.cxx \
../../Sample.C \
@@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \
MoogFilterPluginGUI.C
OBJECTS = ../SpiralPlugin.o \
../SpiralPluginGUI.o \
../../ChannelHandler.o \
../Widgets/Fl_Knob.o \
../Widgets/Fl_DragBar.o \
../../Sample.o \
@@ -164,3 +167,6 @@ MoogFilterPluginGUI.o: MoogFilterPluginGUI.C \
../Widgets/Fl_DragBar.H \
../Widgets/Fl_Knob.H

../../ChannelHandler.o: ../../ChannelHandler.C \
../../ChannelHandler.h


+ 5
- 4
SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPlugin.C View File

@@ -71,6 +71,9 @@ t2(0.0f)
m_PluginInfo.PortTips.push_back("LowPass output");
m_PluginInfo.PortTips.push_back("BandPass output");
m_PluginInfo.PortTips.push_back("HighPass output");
m_AudioCH->Register("Cutoff",&Cutoff);
m_AudioCH->Register("Resonance",&Resonance);
}

MoogFilterPlugin::~MoogFilterPlugin()
@@ -86,11 +89,9 @@ PluginInfo &MoogFilterPlugin::Initialise(const HostInfo *Host)

SpiralGUIType *MoogFilterPlugin::CreateGUI()
{
m_GUI = new MoogFilterPluginGUI(m_PluginInfo.Width,
return new MoogFilterPluginGUI(m_PluginInfo.Width,
m_PluginInfo.Height,
this,m_HostInfo);
m_GUI->hide();
return m_GUI;
this,m_AudioCH,m_HostInfo);
}

void MoogFilterPlugin::Execute()


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

@@ -34,11 +34,6 @@ public:
virtual void StreamOut(ostream &s);
virtual void StreamIn(istream &s);
// has to be defined in the plugin
virtual void UpdateGUI() { Fl::check(); }
void SetCutoff(float s) { Cutoff=s; }
void SetResonance(float s) { Resonance=s; }
float GetCutoff() { return Cutoff; }
float GetResonance() { return Resonance; }


+ 9
- 9
SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPluginGUI.C View File

@@ -26,11 +26,9 @@ static const int GUIBG2_COLOUR = 145;

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

MoogFilterPluginGUI::MoogFilterPluginGUI(int w, int h,MoogFilterPlugin *o,const HostInfo *Info) :
SpiralPluginGUI(w,h,o)
MoogFilterPluginGUI::MoogFilterPluginGUI(int w, int h,MoogFilterPlugin *o,ChannelHandler *ch,const HostInfo *Info) :
SpiralPluginGUI(w,h,o,ch)
{
m_Plugin=o;
Cutoff = new Fl_Slider(15, 20, 20, 70, "Cutoff");
Cutoff->type(4);
Cutoff->selection_color(GUI_COLOUR);
@@ -52,22 +50,24 @@ SpiralPluginGUI(w,h,o)
end();
}

void MoogFilterPluginGUI::UpdateValues()
void MoogFilterPluginGUI::UpdateValues(SpiralPlugin *o)
{
Cutoff->value(1.0f-m_Plugin->GetCutoff());
Resonance->value(m_Plugin->GetResonance());
MoogFilterPlugin *Plugin = (MoogFilterPlugin*)o;
Cutoff->value(1.0f-Plugin->GetCutoff());
Resonance->value(Plugin->GetResonance());
}

inline void MoogFilterPluginGUI::cb_Cutoff_i(Fl_Slider* o, void* v)
{
float value=1.0f-o->value();
// m_Plugin->SetCutoff((value*value)+10.0f);
m_Plugin->SetCutoff(value);
m_GUICH->Set("Cutoff",value);
}
void MoogFilterPluginGUI::cb_Cutoff(Fl_Slider* o, void* v)
{ ((MoogFilterPluginGUI*)(o->parent()))->cb_Cutoff_i(o,v); }

inline void MoogFilterPluginGUI::cb_Resonance_i(Fl_Knob* o, void* v)
{ m_Plugin->SetResonance(o->value()); }
{ m_GUICH->Set("Resonance",o->value()); }
void MoogFilterPluginGUI::cb_Resonance(Fl_Knob* o, void* v)
{ ((MoogFilterPluginGUI*)(o->parent()))->cb_Resonance_i(o,v); }

+ 2
- 5
SpiralSound/Plugins/MoogFilterPlugin/MoogFilterPluginGUI.h View File

@@ -32,12 +32,9 @@
class MoogFilterPluginGUI : public SpiralPluginGUI
{
public:
MoogFilterPluginGUI(int w, int h, MoogFilterPlugin *o,const HostInfo *Info);
MoogFilterPluginGUI(int w, int h, MoogFilterPlugin *o,ChannelHandler *ch,const HostInfo *Info);
virtual void UpdateValues();
virtual SpiralPlugin* GetPlugin() { return m_Plugin; }
MoogFilterPlugin *m_Plugin;
virtual void UpdateValues(SpiralPlugin *o);
private:


+ 5
- 0
SpiralSound/Plugins/NoteSnapPlugin/Makefile.in View File

@@ -43,6 +43,7 @@ mandir = @mandir@

HEADERS = ../SpiralPlugin.h \
../SpiralPluginGUI.h \
../../ChannelHandler.h \
../Widgets/Fl_Knob.H \
../Widgets/Fl_DragBar.H \
../../Sample.h \
@@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \
NoteSnapPluginGUI.h
SOURCES = ../SpiralPlugin.C \
../SpiralPluginGUI.C \
../../ChannelHandler.C \
../Widgets/Fl_Knob.cxx \
../Widgets/Fl_DragBar.cxx \
../../Sample.C \
@@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \
NoteSnapPluginGUI.C
OBJECTS = ../SpiralPlugin.o \
../SpiralPluginGUI.o \
../../ChannelHandler.o \
../Widgets/Fl_Knob.o \
../Widgets/Fl_DragBar.o \
../../Sample.o \
@@ -148,3 +151,5 @@ NoteSnapPlugin.o: NoteSnapPlugin.C \

NoteSnapPluginGUI.o: NoteSnapPluginGUI.C

../../ChannelHandler.o: ../../ChannelHandler.C \
../../ChannelHandler.h

+ 1
- 2
SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPlugin.C View File

@@ -62,8 +62,7 @@ PluginInfo &NoteSnapPlugin::Initialise(const HostInfo *Host)

SpiralGUIType *NoteSnapPlugin::CreateGUI()
{
m_GUI=NULL;
return m_GUI;
return NULL;
}

void NoteSnapPlugin::Execute()


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

@@ -33,9 +33,6 @@ public:
virtual void Execute();
virtual void StreamOut(ostream &s) {}
virtual void StreamIn(istream &s) {}
// has to be defined in the plugin
virtual void UpdateGUI() { Fl::check(); }

private:
};


+ 3
- 4
SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPluginGUI.C View File

@@ -26,16 +26,15 @@ static const int GUIBG2_COLOUR = 145;

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

NoteSnapPluginGUI::NoteSnapPluginGUI(int w, int h,NoteSnapPlugin *o,const HostInfo *Info) :
SpiralPluginGUI(w,h,o)
NoteSnapPluginGUI::NoteSnapPluginGUI(int w, int h,NoteSnapPlugin *o,ChannelHandler *ch,const HostInfo *Info) :
SpiralPluginGUI(w,h,o,ch)
{
m_Plugin=o;
end();
}



void NoteSnapPluginGUI::UpdateValues()
void NoteSnapPluginGUI::UpdateValues(SpiralPlugin *o)
{
}

+ 2
- 4
SpiralSound/Plugins/NoteSnapPlugin/NoteSnapPluginGUI.h View File

@@ -33,12 +33,10 @@
class NoteSnapPluginGUI : public SpiralPluginGUI
{
public:
NoteSnapPluginGUI(int w, int h, NoteSnapPlugin *o,const HostInfo *Info);
NoteSnapPluginGUI(int w, int h, NoteSnapPlugin *o,ChannelHandler *ch,const HostInfo *Info);
virtual void UpdateValues();
virtual SpiralPlugin* GetPlugin() { return m_Plugin; }
virtual void UpdateValues(SpiralPlugin *o);
NoteSnapPlugin *m_Plugin;
private:

//// Callbacks ////


+ 5
- 0
SpiralSound/Plugins/OscillatorPlugin/Makefile.in View File

@@ -43,6 +43,7 @@ mandir = @mandir@

HEADERS = ../SpiralPlugin.h \
../SpiralPluginGUI.h \
../../ChannelHandler.h \
../Widgets/Fl_Knob.H \
../Widgets/Fl_DragBar.H \
../../Sample.h \
@@ -50,6 +51,7 @@ HEADERS = ../SpiralPlugin.h \
OscillatorPluginGUI.h
SOURCES = ../SpiralPlugin.C \
../SpiralPluginGUI.C \
../../ChannelHandler.C \
../Widgets/Fl_Knob.cxx \
../Widgets/Fl_DragBar.cxx \
../../Sample.C \
@@ -57,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \
OscillatorPluginGUI.C
OBJECTS = ../SpiralPlugin.o \
../SpiralPluginGUI.o \
../../ChannelHandler.o \
../Widgets/Fl_Knob.o \
../Widgets/Fl_DragBar.o \
../../Sample.o \
@@ -164,3 +167,5 @@ OscillatorPluginGUI.o: OscillatorPluginGUI.C \
../../SpiralInfo.h \
../../Sample.h

../../ChannelHandler.o: ../../ChannelHandler.C \
../../ChannelHandler.h

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

@@ -71,6 +71,13 @@ m_SHModBuf(NULL)
m_PluginInfo.PortTips.push_back("PulseWidth CV");
m_PluginInfo.PortTips.push_back("Sample & Hold length CV");
m_PluginInfo.PortTips.push_back("Output");
m_AudioCH->Register("Octave",&m_Octave);
m_AudioCH->Register("FineFreq",&m_FineFreq);
m_AudioCH->Register("PulseWidth",&m_PulseWidth);
m_AudioCH->Register("Type",(char*)&m_Type);
m_AudioCH->Register("SHLen",&m_SHLen);
m_AudioCH->Register("ModAmount",&m_ModAmount);
}

OscillatorPlugin::~OscillatorPlugin()
@@ -84,11 +91,9 @@ PluginInfo &OscillatorPlugin::Initialise(const HostInfo *Host)

SpiralGUIType *OscillatorPlugin::CreateGUI()
{
m_GUI = new OscillatorPluginGUI(m_PluginInfo.Width,
return new OscillatorPluginGUI(m_PluginInfo.Width,
m_PluginInfo.Height,
this,m_HostInfo);
m_GUI->hide();
return m_GUI;
this,m_AudioCH,m_HostInfo);
}

void OscillatorPlugin::Execute()


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

@@ -34,9 +34,6 @@ public:
virtual void StreamOut(ostream &s);
virtual void StreamIn(istream &s);
// has to be defined in the plugin
virtual void UpdateGUI() { Fl::check(); }

enum Type{NONE,SQUARE,SAW,NOISE};
void ModulateFreq(Sample *data) {m_FreqModBuf=data;}
@@ -44,12 +41,6 @@ public:
void ModulateSHLen(Sample *data) {m_SHModBuf=data;}
void NoteTrigger(int V,int s,int v);
void SetOctave(int o) {m_Octave=o;}
void SetFineFreq(float s) {m_FineFreq=s;}
void SetPulseWidth(float p) {m_PulseWidth=p;}
void SetType(Type t) {m_Type=t;}
void SetSHLen(float s) {m_SHLen=s;}
void SetModAmount(float s) {m_ModAmount=s;}
int GetOctave() {return m_Octave;}
float GetFineFreq() {return m_FineFreq;}
float GetPulseWidth() {return m_PulseWidth;}


+ 36
- 36
SpiralSound/Plugins/OscillatorPlugin/OscillatorPluginGUI.C View File

@@ -100,14 +100,12 @@ static unsigned char *image_Saw[] = {
(unsigned char*)" "};
OscillatorPluginGUI::OscillatorPluginGUI(int w, int h,OscillatorPlugin *o,const HostInfo *Info) :
SpiralPluginGUI(w,h,o),
OscillatorPluginGUI::OscillatorPluginGUI(int w, int h,OscillatorPlugin *o,ChannelHandler *ch,const HostInfo *Info) :
SpiralPluginGUI(w,h,o,ch),
pixmap_Square(image_Square),
pixmap_Noise(image_Noise),
pixmap_Saw(image_Saw)
{
m_Plugin=o;
ShapeSquare = new Fl_Check_Button(5, 15, 55, 30);
ShapeSquare->type(102);
ShapeSquare->down_box(FL_DIAMOND_DOWN_BOX);
@@ -224,13 +222,15 @@ pixmap_Saw(image_Saw)
extern "C" int sprintf(char *,const char *,...);
void OscillatorPluginGUI::UpdateValues()
void OscillatorPluginGUI::UpdateValues(SpiralPlugin *o)
{
OscillatorPlugin *Plugin = (OscillatorPlugin*)o;
ShapeSquare->value(0);
ShapeNoise->value(0);
ShapeSaw->value(0);
switch (m_Plugin->GetType())
switch (Plugin->GetType())
{
case OscillatorPlugin::SQUARE : ShapeSquare->value(1); break;
case OscillatorPlugin::NOISE : ShapeNoise->value(1); break;
@@ -238,25 +238,25 @@ void OscillatorPluginGUI::UpdateValues()
case OscillatorPlugin::NONE : break;
}
Freq->value(m_Plugin->GetOctave()+3);
ModAmount->value(m_Plugin->GetModAmount());
FineTune->value(sqrt(m_Plugin->GetFineFreq()));
PulseWidth->value(m_Plugin->GetPulseWidth());
Freq->value(Plugin->GetOctave()+3);
ModAmount->value(Plugin->GetModAmount());
FineTune->value(sqrt(Plugin->GetFineFreq()));
PulseWidth->value(Plugin->GetPulseWidth());
SHLen->value(0.2f-m_Plugin->GetSHLen());
SHLen->value(0.2f-Plugin->GetSHLen());
char str[10];
float fr = 110.0f * m_Plugin->GetFineFreq();
int oc = m_Plugin->GetOctave();
float fr = 110.0f * Plugin->GetFineFreq();
int oc = Plugin->GetOctave();
if (oc > 0) fr *= 1 << oc;
if (oc < 0) fr /= 1 << (-oc);
sprintf(str,"%4.1f Hz", fr);
m_out_freq->value(str);
sprintf(str,"%4.0f %%", 100*m_Plugin->GetPulseWidth());
sprintf(str,"%4.0f %%", 100*Plugin->GetPulseWidth());
m_out_pulseW->value(str);
sprintf(str,"%4.0f %%", 100*m_Plugin->GetModAmount());
sprintf(str,"%4.0f %%", 100*Plugin->GetModAmount());
m_out_mod->value(str);
sprintf(str,"%4.3f s", m_Plugin->GetSHLen());
sprintf(str,"%4.3f s", Plugin->GetSHLen());
m_out_SHlen->value(str);
}
@@ -266,13 +266,13 @@ void OscillatorPluginGUI::UpdateValues()
inline void OscillatorPluginGUI::cb_Freq_i(Fl_Knob* o, void* v)
{
char str[10];
m_Plugin->SetOctave((int)o->value()-3);
float fr = 110.0f * m_Plugin->GetFineFreq();
int oc = m_Plugin->GetOctave();
if (oc > 0) fr *= 1 << oc;
if (oc < 0) fr /= 1 << (-oc);
sprintf(str,"%4.1f Hz", fr);
m_out_freq->value(str);
m_GUICH->Set("Octave",(int)o->value()-3);
//float fr = 110.0f * m_Plugin->GetFineFreq();
//int oc = m_Plugin->GetOctave();
//if (oc > 0) fr *= 1 << oc;
//if (oc < 0) fr /= 1 << (-oc);
//sprintf(str,"%4.1f Hz", fr);
//m_out_freq->value(str);
}
void OscillatorPluginGUI::cb_Freq(Fl_Knob* o, void* v)
@@ -281,13 +281,13 @@ void OscillatorPluginGUI::cb_Freq(Fl_Knob* o, void* v)
inline void OscillatorPluginGUI::cb_FineTune_i(Fl_Knob* o, void* v)
{
char str[10];
m_Plugin->SetFineFreq(o->value()*o->value());
float fr = 110.0f * m_Plugin->GetFineFreq();
int oc = m_Plugin->GetOctave();
if (oc > 0) fr *= 1 << oc;
if (oc < 0) fr /= 1 << (-oc);
sprintf(str,"%4.1f Hz", fr);
m_out_freq->value(str);
m_GUICH->Set("FineFreq",o->value()*o->value());
//float fr = 110.0f * m_Plugin->GetFineFreq();
//int oc = m_Plugin->GetOctave();
//if (oc > 0) fr *= 1 << oc;
//if (oc < 0) fr /= 1 << (-oc);
//sprintf(str,"%4.1f Hz", fr);
//m_out_freq->value(str);
}
void OscillatorPluginGUI::cb_FineTune(Fl_Knob* o, void* v)
@@ -296,7 +296,7 @@ void OscillatorPluginGUI::cb_FineTune(Fl_Knob* o, void* v)
inline void OscillatorPluginGUI::cb_PulseWidth_i(Fl_Slider* o, void* v)
{
char str[10];
m_Plugin->SetPulseWidth(o->value());
m_GUICH->Set("PulseWidth",o->value());
sprintf(str,"%4.0f %%", 100*o->value());
m_out_pulseW->value(str);
}
@@ -305,24 +305,24 @@ void OscillatorPluginGUI::cb_PulseWidth(Fl_Slider* o, void* v)
{ ((OscillatorPluginGUI*)(o->parent()))->cb_PulseWidth_i(o,v);}
inline void OscillatorPluginGUI::cb_Square_i(Fl_Check_Button* o, void* v)
{ m_Plugin->SetType(OscillatorPlugin::SQUARE); }
{ m_GUICH->Set("Type",(char)OscillatorPlugin::SQUARE); }
void OscillatorPluginGUI::cb_Square(Fl_Check_Button* o, void* v)
{ ((OscillatorPluginGUI*)(o->parent()))->cb_Square_i(o,v); }
inline void OscillatorPluginGUI::cb_Saw_i(Fl_Check_Button* o, void* v)
{ m_Plugin->SetType(OscillatorPlugin::SAW); }
{ m_GUICH->Set("Type",(char)OscillatorPlugin::SAW); }
void OscillatorPluginGUI::cb_Saw(Fl_Check_Button* o, void* v)
{ ((OscillatorPluginGUI*)(o->parent()))->cb_Saw_i(o,v); }
inline void OscillatorPluginGUI::cb_Noise_i(Fl_Check_Button* o, void* v)
{ m_Plugin->SetType(OscillatorPlugin::NOISE); }
{ m_GUICH->Set("Type",(char)OscillatorPlugin::NOISE); }
void OscillatorPluginGUI::cb_Noise(Fl_Check_Button* o, void* v)
{ ((OscillatorPluginGUI*)(o->parent()))->cb_Noise_i(o,v); }
inline void OscillatorPluginGUI::cb_SHLen_i(Fl_Slider* o, void* v)
{
char str[10];
m_Plugin->SetSHLen(0.2f-o->value());
m_GUICH->Set("SHLen",0.2f-o->value());
sprintf(str,"%4.3f s", 0.2f-o->value());
m_out_SHlen->value(str);
}
@@ -333,7 +333,7 @@ void OscillatorPluginGUI::cb_SHLen(Fl_Slider* o, void* v)
inline void OscillatorPluginGUI::cb_ModAmount_i(Fl_Knob* o, void* v)
{
char str[10];
m_Plugin->SetModAmount(o->value());
m_GUICH->Set("ModAmount",o->value());
sprintf(str,"%4.0f %%", 100*o->value());
m_out_mod->value(str);
}


+ 2
- 5
SpiralSound/Plugins/OscillatorPlugin/OscillatorPluginGUI.h View File

@@ -33,13 +33,10 @@
class OscillatorPluginGUI : public SpiralPluginGUI
{
public:
OscillatorPluginGUI(int w, int h, OscillatorPlugin *o,const HostInfo *Info);
OscillatorPluginGUI(int w, int h, OscillatorPlugin *o,ChannelHandler *ch,const HostInfo *Info);
virtual void UpdateValues();
virtual SpiralPlugin* GetPlugin() { return m_Plugin; }
virtual void UpdateValues(SpiralPlugin *o);
OscillatorPlugin *m_Plugin;
private:

Fl_Check_Button *ShapeSquare;


+ 5
- 0
SpiralSound/Plugins/OutputPlugin/Makefile.in View File

@@ -43,6 +43,7 @@ mandir = @mandir@

HEADERS = ../SpiralPlugin.h \
../SpiralPluginGUI.h \
../../ChannelHandler.h \
../Widgets/Fl_Knob.H \
../Widgets/Fl_DragBar.H \
../../Sample.h \
@@ -51,6 +52,7 @@ HEADERS = ../SpiralPlugin.h \
OutputPluginGUI.h
SOURCES = ../SpiralPlugin.C \
../SpiralPluginGUI.C \
../../ChannelHandler.C \
../Widgets/Fl_Knob.cxx \
../Widgets/Fl_DragBar.cxx \
../../Sample.C \
@@ -59,6 +61,7 @@ SOURCES = ../SpiralPlugin.C \
OutputPluginGUI.C
OBJECTS = ../SpiralPlugin.o \
../SpiralPluginGUI.o \
../../ChannelHandler.o \
../Widgets/Fl_Knob.o \
../Widgets/Fl_DragBar.o \
../../Sample.o \
@@ -176,3 +179,5 @@ OutputPluginGUI.o: OutputPluginGUI.C \
../SpiralPluginGUI.h \
../Widgets/Fl_DragBar.H

../../ChannelHandler.o: ../../ChannelHandler.C \
../../ChannelHandler.h

+ 8
- 8
SpiralSound/Plugins/OutputPlugin/OutputPlugin.C View File

@@ -63,7 +63,8 @@ int OutputPlugin::m_NoExecuted=0;
return; \
}

extern "C" {
extern "C"
{
SpiralPlugin* CreateInstance()
{
return new OutputPlugin;
@@ -97,6 +98,8 @@ OutputPlugin::OutputPlugin()
m_PluginInfo.PortTips.push_back("Left In");
m_PluginInfo.PortTips.push_back("Right In");
m_AudioCH->Register("Mode",(char*)&m_Mode,ChannelHandler::INPUT);
m_Mode=OUTPUT;
}

@@ -119,11 +122,11 @@ PluginInfo &OutputPlugin::Initialise(const HostInfo *Host)

SpiralGUIType *OutputPlugin::CreateGUI()
{
m_GUI = new OutputPluginGUI(m_PluginInfo.Width,
return new OutputPluginGUI(m_PluginInfo.Width,
m_PluginInfo.Height,
this,m_HostInfo);
m_GUI->hide();
return m_GUI;
this,
m_AudioCH,
m_HostInfo);
}

void OutputPlugin::Execute()
@@ -472,6 +475,3 @@ void OSSOutput::OpenReadWrite()
result = ioctl(m_Dspfd,SNDCTL_DSP_SPEED,&val);
CHECK_AND_REPORT_ERROR;
}




+ 3
- 6
SpiralSound/Plugins/OutputPlugin/OutputPlugin.h View File

@@ -74,16 +74,13 @@ public:
virtual ~OutputPlugin();

virtual PluginInfo& Initialise(const HostInfo *Host);
virtual SpiralGUIType* CreateGUI();
virtual SpiralGUIType* CreateGUI();
virtual void Execute();
virtual void StreamOut(ostream &s) {}
virtual void StreamIn(istream &s) {}
// has to be defined in the plugin
virtual void UpdateGUI() { Fl::check(); }
void SetMode(Mode s) { m_Mode=s; }
Mode GetMode() { return m_Mode; }
private:
static int m_RefCount;
static int m_NoExecuted;


+ 6
- 8
SpiralSound/Plugins/OutputPlugin/OutputPluginGUI.C View File

@@ -24,11 +24,9 @@ static const int GUI_COLOUR = 179;
static const int GUIBG_COLOUR = 144;
static const int GUIBG2_COLOUR = 145;

OutputPluginGUI::OutputPluginGUI(int w, int h,OutputPlugin *o,const HostInfo *Info) :
SpiralPluginGUI(w,h,o)
OutputPluginGUI::OutputPluginGUI(int w, int h, SpiralPlugin *o, ChannelHandler *ch,const HostInfo *Info) :
SpiralPluginGUI(w,h,o,ch)
{
m_Plugin=o;

Volume = new Fl_Knob(30, 22, 40, 40, "Volume");
Volume->color(GUI_COLOUR);
Volume->type(Fl_Knob::DOTLIN);
@@ -65,7 +63,7 @@ SpiralPluginGUI(w,h,o)
end();
}

void OutputPluginGUI::UpdateValues()
void OutputPluginGUI::UpdateValues(SpiralPlugin *o)
{
Volume->value(OSSOutput::Get()->GetVolume());
}
@@ -108,7 +106,7 @@ inline void OutputPluginGUI::cb_OpenRead_i(Fl_Button* o, void* v)
OpenWrite->value(0);
OSSOutput::Get()->Close();
OSSOutput::Get()->OpenRead();
m_Plugin->SetMode(OutputPlugin::INPUT);
m_GUICH->Set("Mode",(char)OutputPlugin::INPUT);
}
else
{
@@ -126,7 +124,7 @@ inline void OutputPluginGUI::cb_OpenDuplex_i(Fl_Button* o, void* v)
OpenRead->value(0);
OSSOutput::Get()->Close();
OSSOutput::Get()->OpenReadWrite();
m_Plugin->SetMode(OutputPlugin::DUPLEX);
m_GUICH->Set("Mode",(char)OutputPlugin::DUPLEX);
}
else
{
@@ -144,7 +142,7 @@ inline void OutputPluginGUI::cb_OpenWrite_i(Fl_Button* o, void* v)
OpenRead->value(0);
OSSOutput::Get()->Close();
OSSOutput::Get()->OpenWrite();
m_Plugin->SetMode(OutputPlugin::OUTPUT);
m_GUICH->Set("Mode",(char)OutputPlugin::OUTPUT);
}
else
{


+ 2
- 5
SpiralSound/Plugins/OutputPlugin/OutputPluginGUI.h View File

@@ -33,12 +33,9 @@
class OutputPluginGUI : public SpiralPluginGUI
{
public:
OutputPluginGUI(int w, int h, OutputPlugin *o,const HostInfo *Info);
OutputPluginGUI(int w, int h, SpiralPlugin *o, ChannelHandler *ch, const HostInfo *Info);
virtual void UpdateValues();
virtual SpiralPlugin* GetPlugin() { return m_Plugin; }
OutputPlugin *m_Plugin;
virtual void UpdateValues(SpiralPlugin *o);
private:



+ 5
- 0
SpiralSound/Plugins/PoshSamplerPlugin/Makefile.in View File

@@ -43,6 +43,7 @@ mandir = @mandir@

HEADERS = ../SpiralPlugin.h \
../SpiralPluginGUI.h \
../../ChannelHandler.h \
../Widgets/Fl_Knob.H \
../Widgets/Fl_DragBar.H \
../../Sample.h \
@@ -51,6 +52,7 @@ HEADERS = ../SpiralPlugin.h \
PoshSamplerPluginGUI.h
SOURCES = ../SpiralPlugin.C \
../SpiralPluginGUI.C \
../../ChannelHandler.C \
../Widgets/Fl_Knob.cxx \
../Widgets/Fl_DragBar.cxx \
../../Sample.C \
@@ -59,6 +61,7 @@ SOURCES = ../SpiralPlugin.C \
PoshSamplerPluginGUI.C
OBJECTS = ../SpiralPlugin.o \
../SpiralPluginGUI.o \
../../ChannelHandler.o \
../Widgets/Fl_Knob.o \
../Widgets/Fl_DragBar.o \
../../Sample.o \
@@ -174,3 +177,5 @@ PoshSamplerPluginGUI.o: PoshSamplerPluginGUI.C \
../Widgets/Fl_DragBar.H \
../Widgets/Fl_Knob.H

../../ChannelHandler.o: ../../ChannelHandler.C \
../../ChannelHandler.h

+ 58
- 14
SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPlugin.C View File

@@ -118,6 +118,20 @@ m_Recording(false)
}
m_Version=3;
m_Current = 0;
m_AudioCH->Register("Num",&m_GUIArgs.Num);
m_AudioCH->Register("Value",&m_GUIArgs.Value);
m_AudioCH->Register("Bool",&m_GUIArgs.Boole);
m_AudioCH->Register("Int",&m_GUIArgs.Int);
m_AudioCH->Register("Start",&m_GUIArgs.Start);
m_AudioCH->Register("End",&m_GUIArgs.End);
m_AudioCH->Register("LoopStart",&m_GUIArgs.LoopStart);
m_AudioCH->RegisterData("Name",ChannelHandler::INPUT,&m_GUIArgs.Name,sizeof(m_GUIArgs.Name));
m_AudioCH->Register("PlayPos",&m_CurrentPlayPos,ChannelHandler::OUTPUT);
m_AudioCH->RegisterData("SampleBuffer",ChannelHandler::OUTPUT_REQUEST,&m_SampleBuffer,TRANSBUF_SIZE);
m_AudioCH->Register("SampleSize",&m_SampleSize,ChannelHandler::OUTPUT_REQUEST);
}

PoshSamplerPlugin::~PoshSamplerPlugin()
@@ -142,11 +156,9 @@ PluginInfo &PoshSamplerPlugin::Initialise(const HostInfo *Host)

SpiralGUIType *PoshSamplerPlugin::CreateGUI()
{
m_GUI = new PoshSamplerPluginGUI(m_PluginInfo.Width,
return new PoshSamplerPluginGUI(m_PluginInfo.Width,
m_PluginInfo.Height,
this,m_HostInfo);
m_GUI->hide();
return m_GUI;
this,m_AudioCH,m_HostInfo);
}

void PoshSamplerPlugin::Execute()
@@ -249,14 +261,12 @@ void PoshSamplerPlugin::Execute()
}
}
}
PoshSamplerPluginGUI *GUI=(PoshSamplerPluginGUI *)m_GUI;
// record
static int LastRecording=false;
if(m_Recording && InputExists(REC_INPUT))
{
int s=GUI->GetCurrentSample();
int s=0;//GUI->GetCurrentSample();
if (!LastRecording) m_SampleVec[s]->Clear();

@@ -279,13 +289,49 @@ void PoshSamplerPlugin::Execute()
}
LastRecording=m_Recording;
if (m_SampleDescVec[GUI->GetCurrentSample()]->SamplePos>0)
if (m_SampleDescVec[m_Current]->SamplePos>0)
{
GUI->SetPlayPos((int)m_SampleDescVec[GUI->GetCurrentSample()]->SamplePos);
m_CurrentPlayPos=(long)m_SampleDescVec[m_Current]->SamplePos;
}
}

#include <FL/fl_file_chooser.H>
void PoshSamplerPlugin::ExecuteCommands()
{
if (m_AudioCH->IsCommandWaiting())
{
switch(m_AudioCH->GetCommand())
{
case (LOAD) : LoadSample(m_GUIArgs.Num,m_GUIArgs.Name); break;
case (SAVE) : SaveSample(m_GUIArgs.Num,m_GUIArgs.Name); break;
case (SETVOL) : SetVolume(m_GUIArgs.Num,m_GUIArgs.Value); break;
case (SETPITCH) : SetPitch(m_GUIArgs.Num,m_GUIArgs.Value); break;
case (SETLOOP) : SetLoop(m_GUIArgs.Num,m_GUIArgs.Boole); break;
case (SETPING) : SetPingPong(m_GUIArgs.Num,m_GUIArgs.Boole); break;
case (SETNOTE) : SetNote(m_GUIArgs.Num,m_GUIArgs.Int); break;
case (SETOCT) : SetOctave(m_GUIArgs.Num,m_GUIArgs.Int); break;
case (SETPLAYPOINTS):
{
SetPlayStart(m_GUIArgs.Num,m_GUIArgs.Start);
SetLoopStart(m_GUIArgs.Num,m_GUIArgs.LoopStart);
SetLoopEnd(m_GUIArgs.Num,m_GUIArgs.End);
} break;
case (SETREC) : SetRecord(m_GUIArgs.Boole); break;
case (CUT) : Cut(m_GUIArgs.Num,m_GUIArgs.Start,m_GUIArgs.End); break;
case (COPY) : Copy(m_GUIArgs.Num,m_GUIArgs.Start,m_GUIArgs.End); break;
case (PASTE) : Paste(m_GUIArgs.Num,m_GUIArgs.Start,m_GUIArgs.End); break;
case (MIX) : Mix(m_GUIArgs.Num,m_GUIArgs.Start,m_GUIArgs.End); break;
case (CROP) : Crop(m_GUIArgs.Num,m_GUIArgs.Start,m_GUIArgs.End); break;
case (REV) : Reverse(m_GUIArgs.Num,m_GUIArgs.Start,m_GUIArgs.End); break;
case (AMP) : Amp(m_GUIArgs.Num,m_GUIArgs.Start,m_GUIArgs.End); break;
case (SETCURRENT) : m_Current = m_GUIArgs.Num; break;
case (GETSAMPLE) :
{
m_AudioCH->SetupBulkTransfer((void*)m_SampleVec[m_Current]->GetBuffer());
m_SampleSize=m_SampleVec[m_Current]->GetLengthInBytes();
} break;
};
}
}

void PoshSamplerPlugin::StreamOut(ostream &s)
{
@@ -334,8 +380,6 @@ void PoshSamplerPlugin::StreamIn(istream &s)
s.get(Buf,size+1);
}
}
((PoshSamplerPluginGUI*)m_GUI)->UpdateValues();
}

void PoshSamplerPlugin::LoadSample(int n, const string &Name)
@@ -349,7 +393,7 @@ void PoshSamplerPlugin::LoadSample(int n, const string &Name)
m_SampleDescVec[n]->SampleRate=Wav.GetSamplerate();
m_SampleDescVec[n]->Stereo=Wav.IsStereo();
m_SampleDescVec[n]->Pitch *= m_SampleDescVec[n]->SampleRate/(float)m_HostInfo->SAMPLERATE;
m_SampleDescVec[n]->LoopEnd=m_SampleVec[n]->GetLength()-1;
m_SampleDescVec[n]->LoopEnd=m_SampleVec[n]->GetLength()-1;
}
}



Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save