| @@ -159,6 +159,7 @@ void Fl_DeviceGUI::Maximise() | |||
| m_PluginWindow->show(); | |||
| m_IconButton->hide(); | |||
| parent()->redraw(); | |||
| ((Fl_Canvas*)parent())->ToTop(this); | |||
| } | |||
| @@ -0,0 +1,169 @@ | |||
| ############################################################################# | |||
| # Makefile for building MasherPlugin.so | |||
| # Generated by tmake at 22:13, 2001/09/17 | |||
| # Project: MasherPlugin | |||
| # Template: app | |||
| ############################################################################# | |||
| ####### Compiler, tools and options | |||
| CC = gcc | |||
| CXX = g++ | |||
| CFLAGS = @CFLAGS@ | |||
| CXXFLAGS= @CXXFLAGS@ | |||
| INCPATH = -I/usr/X11R6/include | |||
| LINK = g++ -shared | |||
| LFLAGS = | |||
| LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -ldl | |||
| MOC = moc | |||
| UIC = | |||
| TAR = tar -cf | |||
| GZIP = gzip -9f | |||
| INSTALL = @INSTALL@ | |||
| ###### Autoconf variables | |||
| prefix = @prefix@ | |||
| exec_prefix = @exec_prefix@ | |||
| bindir = @bindir@ | |||
| sbindir = @sbindir@ | |||
| libexecdir = @libexecdir@ | |||
| datadir = @datadir@ | |||
| sysconfdir = @sysconfdir@ | |||
| sharedstatedir = @sharedstatedir@ | |||
| localstatedir = @localstatedir@ | |||
| libdir = @libdir@ | |||
| infodir = @infodir@ | |||
| mandir = @mandir@ | |||
| ####### Files | |||
| HEADERS = ../SpiralPlugin.h \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../../ChannelHandler.h \ | |||
| ../Widgets/Fl_Knob.H \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| ../../Sample.h \ | |||
| MasherPlugin.h \ | |||
| MasherPluginGUI.h | |||
| SOURCES = ../SpiralPlugin.C \ | |||
| ../SpiralPluginGUI.C \ | |||
| ../../ChannelHandler.C \ | |||
| ../Widgets/Fl_Knob.cxx \ | |||
| ../Widgets/Fl_DragBar.cxx \ | |||
| ../../Sample.C \ | |||
| MasherPlugin.C \ | |||
| MasherPluginGUI.C | |||
| OBJECTS = ../SpiralPlugin.o \ | |||
| ../SpiralPluginGUI.o \ | |||
| ../../ChannelHandler.o \ | |||
| ../Widgets/Fl_Knob.o \ | |||
| ../Widgets/Fl_DragBar.o \ | |||
| ../../Sample.o \ | |||
| MasherPlugin.o \ | |||
| MasherPluginGUI.o | |||
| INTERFACES = | |||
| UICDECLS = | |||
| UICIMPLS = | |||
| SRCMOC = | |||
| OBJMOC = | |||
| DIST = | |||
| TARGET = MasherPlugin.so | |||
| ####### Implicit rules | |||
| .SUFFIXES: .cpp .cxx .cc .C .c | |||
| .cpp.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .cxx.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .cc.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .C.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .c.o: | |||
| $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $< | |||
| ####### Build rules | |||
| all: $(TARGET) | |||
| $(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) | |||
| $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS) | |||
| moc: $(SRCMOC) | |||
| tmake: | |||
| tmake MasherPlugin.pro | |||
| dist: | |||
| $(TAR) MasherPlugin.tar MasherPlugin.pro $(SOURCES) $(HEADERS) $(INTERFACES) $(DIST) | |||
| $(GZIP) MasherPlugin.tar | |||
| clean: | |||
| -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS) $(TARGET) | |||
| -rm -f *~ core | |||
| install: | |||
| $(INSTALL) $(TARGET) $(libdir)/SpiralPlugins | |||
| ####### Sub-libraries | |||
| ###### Combined headers | |||
| ####### Compile | |||
| ../SpiralPlugin.o: ../SpiralPlugin.C \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h | |||
| ../SpiralPluginGUI.o: ../SpiralPluginGUI.C \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h | |||
| ../Widgets/Fl_Knob.o: ../Widgets/Fl_Knob.cxx \ | |||
| ../Widgets/Fl_Knob.H | |||
| ../Widgets/Fl_DragBar.o: ../Widgets/Fl_DragBar.cxx \ | |||
| ../Widgets/Fl_DragBar.H | |||
| ../../Sample.o: ../../Sample.C \ | |||
| ../../Sample.h \ | |||
| ../../SpiralInfo.h | |||
| MasherPlugin.o: MasherPlugin.C \ | |||
| MasherPlugin.h \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h \ | |||
| ../../SpiralInfo.h \ | |||
| ../../Sample.h \ | |||
| MasherPluginGUI.h \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| SpiralIcon.xpm | |||
| MasherPluginGUI.o: MasherPluginGUI.C \ | |||
| MasherPluginGUI.h \ | |||
| MasherPlugin.h \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h \ | |||
| ../../SpiralInfo.h \ | |||
| ../../Sample.h \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_DragBar.H | |||
| ../../ChannelHandler.o: ../../ChannelHandler.C \ | |||
| ../../ChannelHandler.h | |||
| @@ -0,0 +1,190 @@ | |||
| /* SpiralSound | |||
| * Copyleft (C) 2001 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 <math.h> | |||
| #include "MasherPlugin.h" | |||
| #include "MasherPluginGUI.h" | |||
| #include <FL/Fl_Button.h> | |||
| #include "SpiralIcon.xpm" | |||
| #define PI 3.141592654 | |||
| float RandRange(float L, float H) | |||
| { | |||
| return ((rand()%10000/10000.0f)*(H-L))+L; | |||
| } | |||
| extern "C" { | |||
| SpiralPlugin* CreateInstance() | |||
| { | |||
| return new MasherPlugin; | |||
| } | |||
| char** GetIcon() | |||
| { | |||
| return SpiralIcon_xpm; | |||
| } | |||
| int GetID() | |||
| { | |||
| return 54; | |||
| } | |||
| string GetGroupName() | |||
| { | |||
| return "SpiralSound"; | |||
| } | |||
| } | |||
| /////////////////////////////////////////////////////// | |||
| MasherPlugin::MasherPlugin() : | |||
| m_GrainStoreSize(MAX_GRAINSTORE_SIZE), | |||
| m_Density(10), | |||
| m_Randomness(0), | |||
| m_GrainPitch(1), | |||
| m_ReadGrain(0), | |||
| m_WriteGrain(0) | |||
| { | |||
| m_PluginInfo.Name="Masher"; | |||
| m_PluginInfo.Width=120; | |||
| m_PluginInfo.Height=130; | |||
| m_PluginInfo.NumInputs=3; | |||
| m_PluginInfo.NumOutputs=1; | |||
| m_PluginInfo.PortTips.push_back("Input"); | |||
| m_PluginInfo.PortTips.push_back("GrainPitch"); | |||
| m_PluginInfo.PortTips.push_back("Density"); | |||
| m_PluginInfo.PortTips.push_back("Output"); | |||
| m_AudioCH->Register("GrainPitch",&m_GrainPitch); | |||
| m_AudioCH->Register("GrainStoreSize",&m_GrainStoreSize); | |||
| m_AudioCH->Register("Density",&m_Density); | |||
| m_AudioCH->Register("Randomness",&m_Randomness); | |||
| } | |||
| MasherPlugin::~MasherPlugin() | |||
| { | |||
| } | |||
| PluginInfo &MasherPlugin::Initialise(const HostInfo *Host) | |||
| { | |||
| return SpiralPlugin::Initialise(Host); | |||
| } | |||
| SpiralGUIType *MasherPlugin::CreateGUI() | |||
| { | |||
| return new MasherPluginGUI(m_PluginInfo.Width, | |||
| m_PluginInfo.Height, | |||
| this,m_AudioCH,m_HostInfo); | |||
| } | |||
| void MixPitch(Sample &src, Sample &dst, int Pos, float Pitch) | |||
| { | |||
| float n=0; | |||
| int p=Pos; | |||
| while (n<src.GetLength() && p<dst.GetLength()) | |||
| { | |||
| if (p>=0) dst.Set(p,dst[p]+src[n]); | |||
| n+=Pitch; | |||
| p++; | |||
| } | |||
| } | |||
| void MasherPlugin::Execute() | |||
| { | |||
| GetOutputBuf(0)->Zero(); | |||
| if (!InputExists(0)) return; | |||
| int n=0; | |||
| float s=GetInput(0,0); | |||
| int last=0; | |||
| bool First=true; | |||
| // paste any overlapping grains to the start of the buffer. | |||
| for (vector<GrainDesc>::iterator i = m_OverlapVec.begin(); | |||
| i!=m_OverlapVec.end(); i++) | |||
| { | |||
| MixPitch(m_GrainStore[i->Grain],*GetOutputBuf(0),i->Pos-m_HostInfo->BUFSIZE,m_GrainPitch); | |||
| } | |||
| m_OverlapVec.clear(); | |||
| // chop up the buffer and put the grains in the grainstore | |||
| for (int n=0; n<m_HostInfo->BUFSIZE; n++) | |||
| { | |||
| if ((s<0 && GetInput(0,n)>0) || (s>0 && GetInput(0,n)<0)) | |||
| { | |||
| // chop the bits between zero crossings | |||
| if (!First) | |||
| { | |||
| GetInput(0)->GetRegion(m_GrainStore[m_WriteGrain%m_GrainStoreSize],last,n); | |||
| m_WriteGrain++; | |||
| } | |||
| else First=false; | |||
| last=n; | |||
| s=GetInput(0,n); | |||
| } | |||
| } | |||
| int NextGrain=0; | |||
| for (int n=0; n<m_HostInfo->BUFSIZE; n++) | |||
| { | |||
| int Density = m_Density; | |||
| if (InputExists(2)) Density=(int)(Density*GetInput(2,n)); | |||
| if(n>=NextGrain || rand()%1000<Density) | |||
| { | |||
| int GrainNum = m_ReadGrain%m_GrainStoreSize; | |||
| float Pitch=m_GrainPitch; | |||
| if (InputExists(1)) Pitch*=fabs(GetInput(1,n)); | |||
| MixPitch(m_GrainStore[GrainNum],*GetOutputBuf(0),n,Pitch); | |||
| int GrainLength = (int)(m_GrainStore[GrainNum].GetLength()*Pitch); | |||
| NextGrain=n+m_GrainStore[GrainNum].GetLength(); | |||
| // if this grain overlaps the buffer | |||
| if (n+GrainLength>m_HostInfo->BUFSIZE) | |||
| { | |||
| GrainDesc new_grain; | |||
| new_grain.Pos=n; | |||
| new_grain.Grain=GrainNum; | |||
| m_OverlapVec.push_back(new_grain); | |||
| } | |||
| if (m_Randomness) m_ReadGrain+=1+rand()%m_Randomness; | |||
| else m_ReadGrain++; | |||
| } | |||
| } | |||
| } | |||
| void MasherPlugin::Randomise() | |||
| { | |||
| } | |||
| void MasherPlugin::StreamOut(ostream &s) | |||
| { | |||
| s<<m_Version<<" "; | |||
| s<<m_GrainStoreSize<<" "<<m_Density<<" "<<m_Randomness<<" "<<m_GrainPitch<<" "; | |||
| } | |||
| void MasherPlugin::StreamIn(istream &s) | |||
| { | |||
| int version; | |||
| s>>version; | |||
| s>>m_GrainStoreSize>>m_Density>>m_Randomness>>m_GrainPitch; | |||
| } | |||
| @@ -0,0 +1,74 @@ | |||
| /* SpiralSound | |||
| * Copyleft (C) 2001 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 "../SpiralPlugin.h" | |||
| #include <FL/Fl.h> | |||
| #ifndef MasherPLUGIN | |||
| #define MasherPLUGIN | |||
| static const int MAX_GRAINSTORE_SIZE = 1000; | |||
| class MasherPlugin : public SpiralPlugin | |||
| { | |||
| public: | |||
| MasherPlugin(); | |||
| virtual ~MasherPlugin(); | |||
| virtual PluginInfo &Initialise(const HostInfo *Host); | |||
| 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(); } | |||
| float GetGrainPitch() { return m_GrainPitch; } | |||
| int GetGrainStoreSize() { return m_GrainStoreSize; } | |||
| int GetDensity() { return m_Density; } | |||
| int GetRandomness() { return m_Randomness; } | |||
| void Randomise(); | |||
| private: | |||
| int m_GrainStoreSize; | |||
| int m_Density; | |||
| int m_Randomness; | |||
| float m_GrainPitch; | |||
| int m_ReadGrain; | |||
| int m_WriteGrain; | |||
| Sample m_GrainStore[MAX_GRAINSTORE_SIZE]; | |||
| struct GrainDesc | |||
| { | |||
| int Pos; | |||
| int Grain; | |||
| }; | |||
| vector<GrainDesc> m_OverlapVec; | |||
| friend istream &operator>>(istream &s, MasherPlugin &o); | |||
| friend ostream &operator<<(ostream &s, MasherPlugin &o); | |||
| }; | |||
| istream &operator>>(istream &s, MasherPlugin &o); | |||
| ostream &operator<<(ostream &s, MasherPlugin &o); | |||
| #endif | |||
| @@ -0,0 +1,125 @@ | |||
| /* SpiralPlugin | |||
| * Copyleft (C) 2000 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 "MasherPluginGUI.h" | |||
| #include <FL/fl_draw.h> | |||
| #include <FL/fl_draw.H> | |||
| static const int GUI_COLOUR = 179; | |||
| static const int GUIBG_COLOUR = 144; | |||
| static const int GUIBG2_COLOUR = 145; | |||
| //////////////////////////////////////////// | |||
| MasherPluginGUI::MasherPluginGUI(int w, int h,MasherPlugin *o,ChannelHandler *ch,const HostInfo *Info) : | |||
| SpiralPluginGUI(w,h,o,ch) | |||
| { | |||
| m_Plugin=o; | |||
| m_Pitch = new Fl_Knob(5,15,40,40,"GrainPitch"); | |||
| m_Pitch->type(Fl_Knob::DOTLIN); | |||
| m_Pitch->color(GUI_COLOUR); | |||
| m_Pitch->labelsize(10); | |||
| m_Pitch->maximum(5); | |||
| m_Pitch->step(0.001); | |||
| m_Pitch->value(1); | |||
| m_Pitch->callback((Fl_Callback*)cb_Pitch); | |||
| m_Random = new Fl_Knob(70,15,40,40,"Randomness"); | |||
| m_Random->type(Fl_Knob::DOTLIN); | |||
| m_Random->color(GUI_COLOUR); | |||
| m_Random->labelsize(10); | |||
| m_Random->maximum(100); | |||
| m_Random->step(1); | |||
| m_Random->value(1); | |||
| m_Random->callback((Fl_Callback*)cb_Random); | |||
| m_GrainStoreSize = new Fl_Knob(5,70,40,40,"Num Grains"); | |||
| m_GrainStoreSize->type(Fl_Knob::DOTLIN); | |||
| m_GrainStoreSize->color(GUI_COLOUR); | |||
| m_GrainStoreSize->labelsize(10); | |||
| m_GrainStoreSize->maximum(MAX_GRAINSTORE_SIZE-2); | |||
| m_GrainStoreSize->step(1); | |||
| m_GrainStoreSize->value(1); | |||
| m_GrainStoreSize->callback((Fl_Callback*)cb_GrainStoreSize); | |||
| m_Density = new Fl_Knob(70,70,40,40,"Density"); | |||
| m_Density->type(Fl_Knob::DOTLIN); | |||
| m_Density->color(GUI_COLOUR); | |||
| m_Density->labelsize(10); | |||
| m_Density->maximum(MAX_GRAINSTORE_SIZE); | |||
| m_Density->step(1); | |||
| m_Density->value(1); | |||
| m_Density->callback((Fl_Callback*)cb_Density); | |||
| end(); | |||
| } | |||
| extern "C" int sprintf(char *,const char *,...); | |||
| void MasherPluginGUI::UpdateValues(SpiralPlugin *o) | |||
| { | |||
| MasherPlugin* Plugin = (MasherPlugin*)o; | |||
| m_Pitch->value(Plugin->GetGrainPitch()); | |||
| m_Random->value(Plugin->GetRandomness()); | |||
| m_GrainStoreSize->value(Plugin->GetGrainStoreSize()); | |||
| m_Density->value(Plugin->GetDensity()); | |||
| } | |||
| inline void MasherPluginGUI::cb_Random_i(Fl_Knob* o, void* v) | |||
| { | |||
| m_GUICH->Set("Randomness",(int)o->value()); | |||
| } | |||
| void MasherPluginGUI::cb_Random(Fl_Knob* o, void* v) | |||
| { ((MasherPluginGUI*)(o->parent()))->cb_Random_i(o,v); } | |||
| inline void MasherPluginGUI::cb_Pitch_i(Fl_Knob* o, void* v) | |||
| { | |||
| m_GUICH->Set("GrainPitch",(float)o->value()); | |||
| } | |||
| void MasherPluginGUI::cb_Pitch(Fl_Knob* o, void* v) | |||
| { ((MasherPluginGUI*)(o->parent()))->cb_Pitch_i(o,v); } | |||
| inline void MasherPluginGUI::cb_MinGrainSize_i(Fl_Knob* o, void* v) | |||
| { | |||
| m_GUICH->Set("Period",(int)o->value()+1); | |||
| } | |||
| void MasherPluginGUI::cb_MinGrainSize(Fl_Knob* o, void* v) | |||
| { ((MasherPluginGUI*)(o->parent()))->cb_MinGrainSize_i(o,v); } | |||
| inline void MasherPluginGUI::cb_GrainStoreSize_i(Fl_Knob* o, void* v) | |||
| { | |||
| m_GUICH->Set("GrainStoreSize",(int)o->value()+1); | |||
| } | |||
| void MasherPluginGUI::cb_GrainStoreSize(Fl_Knob* o, void* v) | |||
| { ((MasherPluginGUI*)(o->parent()))->cb_GrainStoreSize_i(o,v); } | |||
| inline void MasherPluginGUI::cb_Density_i(Fl_Knob* o, void* v) | |||
| { | |||
| m_GUICH->Set("Density",(int)o->value()); | |||
| } | |||
| void MasherPluginGUI::cb_Density(Fl_Knob* o, void* v) | |||
| { ((MasherPluginGUI*)(o->parent()))->cb_Density_i(o,v); } | |||
| const string MasherPluginGUI::GetHelpText(const string &loc){ | |||
| return string("") | |||
| + "Top secret sample masher plugin. Granulates the incoming stream and\n" | |||
| + "carries out various patented algorithms on the result.\n\n" | |||
| + "Truth is I don't really know how it works, but makes sounds like\n" | |||
| + "tttttthhhIIiissssSSSSSSsssssSsSSsS."; | |||
| } | |||
| @@ -0,0 +1,68 @@ | |||
| /* SpiralPlugin | |||
| * Copyleft (C) 2000 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 <FL/Fl.H> | |||
| #include <FL/Fl_Window.H> | |||
| #include <FL/Fl_Group.H> | |||
| #include <FL/Fl_Slider.H> | |||
| #include <FL/Fl_Output.H> | |||
| #include <FL/Fl_Box.H> | |||
| #include "../Widgets/Fl_Knob.H" | |||
| #include "MasherPlugin.h" | |||
| #include "../SpiralPluginGUI.h" | |||
| #ifndef AmpGUI | |||
| #define AmpGUI | |||
| class MasherPluginGUI : public SpiralPluginGUI | |||
| { | |||
| public: | |||
| MasherPluginGUI(int w, int h, MasherPlugin *o,ChannelHandler *ch,const HostInfo *Info); | |||
| virtual void UpdateValues(SpiralPlugin *o); | |||
| virtual SpiralPlugin* GetPlugin() { return m_Plugin; } | |||
| MasherPlugin *m_Plugin; | |||
| protected: | |||
| const string GetHelpText(const string &loc); | |||
| private: | |||
| Fl_Knob *m_Random; | |||
| Fl_Knob *m_Pitch; | |||
| Fl_Knob *m_GrainStoreSize; | |||
| Fl_Knob *m_Density; | |||
| //// Callbacks //// | |||
| inline void cb_Random_i(Fl_Knob* o, void* v); | |||
| static void cb_Random(Fl_Knob*, void*); | |||
| inline void cb_Pitch_i(Fl_Knob* o, void* v); | |||
| static void cb_Pitch(Fl_Knob*, void*); | |||
| inline void cb_MinGrainSize_i(Fl_Knob* o, void* v); | |||
| static void cb_MinGrainSize(Fl_Knob*, void*); | |||
| inline void cb_GrainStoreSize_i(Fl_Knob* o, void* v); | |||
| static void cb_GrainStoreSize(Fl_Knob*, void*); | |||
| inline void cb_Density_i(Fl_Knob* o, void* v); | |||
| static void cb_Density(Fl_Knob*, void*); | |||
| }; | |||
| #endif | |||
| @@ -0,0 +1,320 @@ | |||
| /* XPM */ | |||
| static char * SpiralIcon_xpm[] = { | |||
| "36 36 281 2", | |||
| " c None", | |||
| ". c #8B889B", | |||
| "+ c #9C99AA", | |||
| "@ c #ADAAB9", | |||
| "# c #837F94", | |||
| "$ c #7D7990", | |||
| "% c #9995A7", | |||
| "& c #67627C", | |||
| "* c #CDCBD4", | |||
| "= c #FCFCFC", | |||
| "- c #D1D0D8", | |||
| "; c #FFFFFF", | |||
| "> c #F1F1F3", | |||
| ", c #848095", | |||
| "' c #2A2248", | |||
| ") c #CFCED6", | |||
| "! c #68637D", | |||
| "~ c #ABA8B6", | |||
| "{ c #D5D3DB", | |||
| "] c #9490A2", | |||
| "^ c #C4C4C4", | |||
| "/ c #1D1C1D", | |||
| "( c #313134", | |||
| "_ c #EEEFEE", | |||
| ": c #FBFBFB", | |||
| "< c #EFEFEF", | |||
| "[ c #7B768D", | |||
| "} c #464060", | |||
| "| c #DEDEE1", | |||
| "1 c #CBCACC", | |||
| "2 c #EEEEF1", | |||
| "3 c #79758C", | |||
| "4 c #FBFBFC", | |||
| "5 c #A2A2A2", | |||
| "6 c #000000", | |||
| "7 c #F5F6F5", | |||
| "8 c #747474", | |||
| "9 c #2A2A2B", | |||
| "0 c #403958", | |||
| "a c #7D788F", | |||
| "b c #C0BEC8", | |||
| "c c #BCBAC6", | |||
| "d c #BCBAC5", | |||
| "e c #625C79", | |||
| "f c #2B2932", | |||
| "g c #191919", | |||
| "h c #CCCCCC", | |||
| "i c #807B91", | |||
| "j c #3B3556", | |||
| "k c #F2F2F4", | |||
| "l c #929292", | |||
| "m c #0E0E0E", | |||
| "n c #BFBFBF", | |||
| "o c #111111", | |||
| "p c #100E15", | |||
| "q c #868689", | |||
| "r c #FEFDFE", | |||
| "s c #D9D7DE", | |||
| "t c #9C98AA", | |||
| "u c #FDFCFD", | |||
| "v c #DDDDDD", | |||
| "w c #575755", | |||
| "x c #5E5E5E", | |||
| "y c #C4C2CD", | |||
| "z c #423C5C", | |||
| "A c #F0F0F2", | |||
| "B c #939393", | |||
| "C c #555555", | |||
| "D c #4A4A4A", | |||
| "E c #010101", | |||
| "F c #282828", | |||
| "G c #C2C2C2", | |||
| "H c #DBDAE0", | |||
| "I c #615C78", | |||
| "J c #F6F6F7", | |||
| "K c #DADADA", | |||
| "L c #545454", | |||
| "M c #0F0F0F", | |||
| "N c #B8B8B8", | |||
| "O c #48445C", | |||
| "P c #2B2B2C", | |||
| "Q c #181900", | |||
| "R c #D3D3D3", | |||
| "S c #C1BEC9", | |||
| "T c #474060", | |||
| "U c #31294D", | |||
| "V c #716C85", | |||
| "W c #65607A", | |||
| "X c #625D78", | |||
| "Y c #D5D4DB", | |||
| "Z c #F7F7F7", | |||
| "` c #8B8B8B", | |||
| " . c #161616", | |||
| ".. c #0C0C0C", | |||
| "+. c #161800", | |||
| "@. c #1A1B00", | |||
| "#. c #060600", | |||
| "$. c #191A00", | |||
| "%. c #393643", | |||
| "&. c #47415F", | |||
| "*. c #9692A4", | |||
| "=. c #D9D8DE", | |||
| "-. c #F7F7F8", | |||
| ";. c #918DA0", | |||
| ">. c #B8B5C1", | |||
| ",. c #D1D1D1", | |||
| "'. c #212121", | |||
| "). c #111200", | |||
| "!. c #0B0C00", | |||
| "~. c #0F0F00", | |||
| "{. c #FEF100", | |||
| "]. c #040400", | |||
| "^. c #727175", | |||
| "/. c #FEFEFF", | |||
| "(. c #9D99AA", | |||
| "_. c #DBD9E0", | |||
| ":. c #E9E9E9", | |||
| "<. c #CBCBCB", | |||
| "[. c #E0E0E0", | |||
| "}. c #6C6C6C", | |||
| "|. c #515151", | |||
| "1. c #A6A6A7", | |||
| "2. c #827E93", | |||
| "3. c #615C77", | |||
| "4. c #EAEAED", | |||
| "5. c #DFDFE1", | |||
| "6. c #1E1D24", | |||
| "7. c #9894A7", | |||
| "8. c #B1AEBB", | |||
| "9. c #69686F", | |||
| "0. c #000001", | |||
| "a. c #060500", | |||
| "b. c #615C76", | |||
| "c. c #5F5A75", | |||
| "d. c #413E4D", | |||
| "e. c #020203", | |||
| "f. c #1A1A1C", | |||
| "g. c #C3C1CB", | |||
| "h. c #9D9D9D", | |||
| "i. c #202020", | |||
| "j. c #383838", | |||
| "k. c #4C4C4C", | |||
| "l. c #111112", | |||
| "m. c #C9C7D0", | |||
| "n. c #F1F1F1", | |||
| "o. c #F8F8F8", | |||
| "p. c #232323", | |||
| "q. c #050408", | |||
| "r. c #AEACB9", | |||
| "s. c #FEFEFE", | |||
| "t. c #1D1D1D", | |||
| "u. c #B7B5C1", | |||
| "v. c #9390A2", | |||
| "w. c #BBBBBB", | |||
| "x. c #414141", | |||
| "y. c #030303", | |||
| "z. c #28272A", | |||
| "A. c #F4F4F6", | |||
| "B. c #605B76", | |||
| "C. c #736E86", | |||
| "D. c #D8D8D8", | |||
| "E. c #727272", | |||
| "F. c #101010", | |||
| "G. c #848486", | |||
| "H. c #CCCBD3", | |||
| "I. c #747087", | |||
| "J. c #6D6881", | |||
| "K. c #1C1C1C", | |||
| "L. c #242424", | |||
| "M. c #656566", | |||
| "N. c #F6F6F6", | |||
| "O. c #E8E6EA", | |||
| "P. c #706B84", | |||
| "Q. c #E3E1E6", | |||
| "R. c #474746", | |||
| "S. c #151515", | |||
| "T. c #C8C8C8", | |||
| "U. c #AEAEAE", | |||
| "V. c #080808", | |||
| "W. c #010100", | |||
| "X. c #373639", | |||
| "Y. c #FDFCFE", | |||
| "Z. c #ABA8B7", | |||
| "`. c #F1F0F3", | |||
| " + c #6D6980", | |||
| ".+ c #0A090E", | |||
| "++ c #95929E", | |||
| "@+ c #0A0810", | |||
| "#+ c #0D0D0D", | |||
| "$+ c #050505", | |||
| "%+ c #5B5A5C", | |||
| "&+ c #F7F6F7", | |||
| "*+ c #F4F3F5", | |||
| "=+ c #908C9F", | |||
| "-+ c #C8C6D0", | |||
| ";+ c #837E96", | |||
| ">+ c #86868A", | |||
| ",+ c #070608", | |||
| "'+ c #ECEBEE", | |||
| ")+ c #5B5571", | |||
| "!+ c #646078", | |||
| "~+ c #AFAFB0", | |||
| "{+ c #454545", | |||
| "]+ c #363636", | |||
| "^+ c #7A7A7A", | |||
| "/+ c #C8C8C9", | |||
| "(+ c #212025", | |||
| "_+ c #060607", | |||
| ":+ c #969699", | |||
| "<+ c #FAFAFA", | |||
| "[+ c #F8F8F9", | |||
| "}+ c #A29EAF", | |||
| "|+ c #F7F6F8", | |||
| "1+ c #F0F0F1", | |||
| "2+ c #B8B7B9", | |||
| "3+ c #E4E4E4", | |||
| "4+ c #FDFDFD", | |||
| "5+ c #A5A2B2", | |||
| "6+ c #3B3456", | |||
| "7+ c #A8A5B4", | |||
| "8+ c #525252", | |||
| "9+ c #848387", | |||
| "0+ c #CDCDCD", | |||
| "a+ c #8D899C", | |||
| "b+ c #494262", | |||
| "c+ c #68627C", | |||
| "d+ c #40395A", | |||
| "e+ c #ECECEC", | |||
| "f+ c #020202", | |||
| "g+ c #B4B5B5", | |||
| "h+ c #0B0B0B", | |||
| "i+ c #313232", | |||
| "j+ c #E3E3E3", | |||
| "k+ c #B1AEBC", | |||
| "l+ c #BDBBC6", | |||
| "m+ c #3C3556", | |||
| "n+ c #898599", | |||
| "o+ c #EDEDED", | |||
| "p+ c #39393A", | |||
| "q+ c #040404", | |||
| "r+ c #333333", | |||
| "s+ c #F5F5F5", | |||
| "t+ c #2B2B2B", | |||
| "u+ c #2D2A3D", | |||
| "v+ c #B6B4C1", | |||
| "w+ c #F5F5F6", | |||
| "x+ c #605A76", | |||
| "y+ c #DAD8DF", | |||
| "z+ c #F5F4F6", | |||
| "A+ c #615B76", | |||
| "B+ c #524D6A", | |||
| "C+ c #E4E3E8", | |||
| "D+ c #D5D5D5", | |||
| "E+ c #1B1B1B", | |||
| "F+ c #303030", | |||
| "G+ c #AAABAB", | |||
| "H+ c #585464", | |||
| "I+ c #B0AEBB", | |||
| "J+ c #A29FAF", | |||
| "K+ c #E9E8E9", | |||
| "L+ c #787779", | |||
| "M+ c #0F0E15", | |||
| "N+ c #2D2D2E", | |||
| "O+ c #595959", | |||
| "P+ c #FAFAFB", | |||
| "Q+ c #807B92", | |||
| "R+ c #B0ADBB", | |||
| "S+ c #E8E7EB", | |||
| "T+ c #3A3258", | |||
| "U+ c #E6E5EA", | |||
| "V+ c #DFDEE3", | |||
| "W+ c #443E5E", | |||
| "X+ c #BAB8C4", | |||
| "Y+ c #C1BFCA", | |||
| "Z+ c #E0E0E5", | |||
| "`+ c #D0CED6", | |||
| " @ c #362F52", | |||
| ".@ c #CECCD5", | |||
| "+@ c #413A5B", | |||
| "@@ c #6A657F", | |||
| "#@ c #9793A6", | |||
| " ", | |||
| " ", | |||
| " ", | |||
| " . + @ # $ % ", | |||
| " & * = * - ; > , ' ; ; ; ) ! ", | |||
| " ~ ; ; { ] ; ^ / ( _ ; : < [ ", | |||
| " } | 1 2 3 4 5 6 6 7 : 8 9 0 a b ", | |||
| " c : d e f g h i j k l 6 m ; n o 6 p q r s ", | |||
| " t u ; v w 6 6 x y z A B 6 C ; D E 6 F G ; H ", | |||
| " I J ; ; K L 6 6 M N O P E 6 6 6 Q Q M R S T U V W ", | |||
| " X Y ; ; ; ; Z ` .6 ..6 6 6 6 6 +.@.#.$.%.&.*.=.-.;. ", | |||
| " >.; ; ; ; ; ; = ,.'.6 ).!.~.{.{.].6 6 6 E ^./.; ; (. ", | |||
| " _.; ; :.R h <.[.}.6 6 6 6 6 {.{.6 6 6 6 6 E |.1.4 2. ", | |||
| " 3.4.; 5...6 6 6 6 6 6 6 6 6 6 {.{.6 6 6 6 6 6 6 6.7. ", | |||
| " V @ 8.9.0.6 6 6 6 6 6 6 6 6 6 {.{.6 a.6 6 6 6 6 ", | |||
| " b.c.d.6 e.6 6 6 6 6 6 6 6 6 {.{.6 6 6 6 6 6 6 f. ", | |||
| " g.; ; h.i.i.j.k.i.6 6 6 6 6 6 {.{.{.6 6 6 6 6 6 l. ", | |||
| " m.; ; n.o.; ; ; p.6 6 6 6 6 {.6 6 6 {.6 6 6 6 6 q. ", | |||
| " r.; ; ; ; s.; ; t.6 6 6 6 {.6 6 6 6 {.{.6 6 6 6 6 u., ", | |||
| " v.; ; s.; : w.x.y.6 6 6 6 {.6 {.{.{.6 {.6 6 6 6 z.s.A.B. ", | |||
| " C.; ; ; D.E.F.6 6 6 6 6 6 {.{.6 {.6 {.{.6 6 6 Q G.; ; H.I. ", | |||
| " J.J ; : K.6 6 6 6 L...6 6 {.6 {.6 {.6 6 6 6 6 6 M.N.; ; O.P. ", | |||
| " Q.; ; R.6 E 6 S.T.U.V.6 6 {.{.{.6 6 6 W.6 6 6 6 X.Y.; ; > P. ", | |||
| " Z.; `. +.+6 6 U.s.; ++@+6 6 6 6 6 6 6 6 #+$+6 6 6 %+&+; ; *+=+ ", | |||
| " P.-+! ;+>+,+x ; ; '+)+!+~+l {+6 6 6 ]+^+/+(+6 6 6 _+:+<+; ; [+@ ", | |||
| " }+|+1+2+3+4+; 5+6+7+; N.{+6 6 E 8+; ; 9+6 6 E 6 o 0+; ; = a+ ", | |||
| " b+> ; ; ; ; ; ; c+d+; ; e+j.6 6 f+D ; ; g+h+6 6 6 i+j+; ; k+ ", | |||
| " > ; ; ; ; l+m+n+; ; o+p+6 6 q+r+; ; s+t+6 6 u+v+; w+3 ", | |||
| " x+y+= ; z+A+B+C+; ; D+E+6 6 f+F+; ; ; G+8+H+ ", | |||
| " I+4 J+ X ; ; ; K+L+F+M+N+O+; ; ; s.P+Q+ ", | |||
| " R+; ; ; ; ; S+T+U+; ; ; ; = V+W+ ", | |||
| " X+Y+Z+4 ; ; `+ @.@; ; ; s n+T ", | |||
| " +@ @@#@n+ ", | |||
| " ", | |||
| " ", | |||
| " "}; | |||
| @@ -253,7 +253,7 @@ void Sample::Move(int Dist) | |||
| m_Length=Length; | |||
| } | |||
| void Sample::GetRegion(Sample &S, int Start, int End) | |||
| void Sample::GetRegion(Sample &S, int Start, int End) const | |||
| { | |||
| // do some checking | |||
| assert(End<GetLength() && Start<GetLength()); | |||
| @@ -59,7 +59,7 @@ public: | |||
| void Remove(int Start, int End); | |||
| void Reverse(int Start, int End); | |||
| void Move(int Dist); | |||
| void GetRegion(Sample &S, int Start, int End); | |||
| void GetRegion(Sample &S, int Start, int End) const; | |||
| const float *GetBuffer() const {return m_Data;} | |||
| float *GetNonConstBuffer() {return m_Data;} | |||
| int GetLength() const {return m_Length;} | |||
| @@ -47,7 +47,7 @@ if test $ac_arg_jack = "Y" ; then | |||
| AnotherFilterPlugin OperatorPlugin CounterPlugin FlipflopPlugin SwitchPlugin \ | |||
| BeatMatchPlugin NoisePlugin SequencerPlugin LogicPlugin SplitSwitchPlugin \ | |||
| MixSwitchPlugin MeterPlugin WaveShaperPlugin TrigPlugin SpiralLoopPlugin \ | |||
| JackPlugin" | |||
| MasherPlugin JackPlugin" | |||
| else | |||
| PLUGINLIST="AmpPlugin ControllerPlugin DelayPlugin EchoPlugin EnvFollowerPlugin \ | |||
| EnvelopePlugin FilterPlugin MatrixPlugin MidiPlugin MixerPlugin MoogFilterPlugin \ | |||
| @@ -57,7 +57,8 @@ else | |||
| DistributorPlugin LFOPlugin KeyboardPlugin DiskWriterPlugin FormantFilterPlugin \ | |||
| AnotherFilterPlugin OperatorPlugin CounterPlugin FlipflopPlugin SwitchPlugin \ | |||
| BeatMatchPlugin NoisePlugin SequencerPlugin LogicPlugin SplitSwitchPlugin \ | |||
| MixSwitchPlugin MeterPlugin WaveShaperPlugin TrigPlugin SpiralLoopPlugin" | |||
| MixSwitchPlugin MeterPlugin WaveShaperPlugin TrigPlugin SpiralLoopPlugin \ | |||
| MasherPlugin" | |||
| fi | |||
| echo "$PLUGINLIST" > SpiralSound/PluginList.txt | |||
| @@ -173,6 +174,7 @@ SpiralSound/Plugins/SplitSwitchPlugin/Makefile | |||
| SpiralSound/Plugins/MixSwitchPlugin/Makefile | |||
| SpiralSound/Plugins/TrigPlugin/Makefile | |||
| SpiralSound/Plugins/SpiralLoopPlugin/Makefile | |||
| SpiralSound/Plugins/MasherPlugin/Makefile | |||
| SpiralSynthPluginLocation.h | |||
| Makefile | |||
| ) | |||