| @@ -16,14 +16,19 @@ | |||
| * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |||
| */ | |||
| #include <sys/types.h> | |||
| #include <sys/stat.h> | |||
| #include <dirent.h> | |||
| #include <dlfcn.h> | |||
| #include "SpiralSynthModularInfo.h" | |||
| #include "SpiralSynthPluginLocation.h" | |||
| #include "FL/fl_draw.h" | |||
| string SpiralInfo::LOCALE = "EN"; | |||
| int SpiralInfo::BUFSIZE = 512; | |||
| int SpiralInfo::FRAGSIZE = 256; | |||
| int SpiralInfo::FRAGCOUNT = 8; | |||
| int SpiralInfo::BUFSIZE = 512; | |||
| int SpiralInfo::FRAGSIZE = 256; | |||
| int SpiralInfo::FRAGCOUNT = 8; | |||
| int SpiralInfo::SAMPLERATE = 44100; | |||
| long SpiralInfo::MAXSAMPLE = 32767; | |||
| float SpiralInfo::VALUECONV = 1.0f/MAXSAMPLE; | |||
| @@ -55,43 +60,44 @@ SpiralSynthModularInfo* SpiralSynthModularInfo::Get() | |||
| { | |||
| m_SpiralSynthModularInfo = new SpiralSynthModularInfo; | |||
| } | |||
| return m_SpiralSynthModularInfo; | |||
| } | |||
| SpiralSynthModularInfo::SpiralSynthModularInfo() | |||
| { | |||
| { | |||
| BGIMG="None"; | |||
| // default plugins + path, check these before dist... | |||
| // this is one of the two plugin lists, th other is in | |||
| // the SpiralSound/Plugins/PluginList.txt for the | |||
| // the SpiralSound/Plugins/PluginList.txt for the | |||
| // configure/make/install scripts | |||
| PLUGIN_PATH = PLUGIN_PATH_LOCATION; | |||
| PLUGINVEC.push_back("OutputPlugin.so"); | |||
| PLUGINVEC.push_back("DiskWriterPlugin.so"); | |||
| PLUGINVEC.push_back("ScopePlugin.so"); | |||
| PLUGINVEC.push_back("MidiPlugin.so"); | |||
| PLUGINVEC.push_back("KeyboardPlugin.so"); | |||
| PLUGINVEC.push_back("ControllerPlugin.so"); | |||
| PLUGINVEC.push_back("MatrixPlugin.so"); | |||
| PLUGINVEC.push_back("SeqSelectorPlugin.so"); | |||
| PLUGINVEC.push_back("SequencerPlugin.so"); | |||
| #ifdef SSM_EXPLICIT_PLUGIN_LIST | |||
| PLUGINVEC.push_back("OutputPlugin.so"); | |||
| PLUGINVEC.push_back("DiskWriterPlugin.so"); | |||
| PLUGINVEC.push_back("ScopePlugin.so"); | |||
| PLUGINVEC.push_back("MidiPlugin.so"); | |||
| PLUGINVEC.push_back("KeyboardPlugin.so"); | |||
| PLUGINVEC.push_back("ControllerPlugin.so"); | |||
| PLUGINVEC.push_back("MatrixPlugin.so"); | |||
| PLUGINVEC.push_back("SeqSelectorPlugin.so"); | |||
| PLUGINVEC.push_back("SequencerPlugin.so"); | |||
| PLUGINVEC.push_back("PoshSamplerPlugin.so"); | |||
| PLUGINVEC.push_back("WaveTablePlugin.so"); | |||
| PLUGINVEC.push_back("OscillatorPlugin.so"); | |||
| PLUGINVEC.push_back("WaveTablePlugin.so"); | |||
| PLUGINVEC.push_back("OscillatorPlugin.so"); | |||
| PLUGINVEC.push_back("LFOPlugin.so"); | |||
| PLUGINVEC.push_back("NoisePlugin.so"); | |||
| PLUGINVEC.push_back("EnvelopePlugin.so"); | |||
| PLUGINVEC.push_back("EnvelopePlugin.so"); | |||
| PLUGINVEC.push_back("SampleHoldPlugin.so"); | |||
| PLUGINVEC.push_back("NoteSnapPlugin.so"); | |||
| PLUGINVEC.push_back("MixerPlugin.so"); | |||
| PLUGINVEC.push_back("StereoMixerPlugin.so"); | |||
| PLUGINVEC.push_back("AmpPlugin.so"); | |||
| PLUGINVEC.push_back("RingModPlugin.so"); | |||
| PLUGINVEC.push_back("FilterPlugin.so"); | |||
| PLUGINVEC.push_back("NoteSnapPlugin.so"); | |||
| PLUGINVEC.push_back("MixerPlugin.so"); | |||
| PLUGINVEC.push_back("StereoMixerPlugin.so"); | |||
| PLUGINVEC.push_back("AmpPlugin.so"); | |||
| PLUGINVEC.push_back("RingModPlugin.so"); | |||
| PLUGINVEC.push_back("FilterPlugin.so"); | |||
| PLUGINVEC.push_back("SVFilterPlugin.so"); | |||
| PLUGINVEC.push_back("MoogFilterPlugin.so"); | |||
| PLUGINVEC.push_back("FormantPlugin.so"); | |||
| @@ -111,13 +117,57 @@ SpiralSynthModularInfo::SpiralSynthModularInfo() | |||
| PLUGINVEC.push_back("SwitchPlugin.so"); | |||
| PLUGINVEC.push_back("BeatMatchPlugin.so"); | |||
| PLUGINVEC.push_back("LogicPlugin.so"); | |||
| #else | |||
| // Scan plugin path for plugins. | |||
| DIR *dp; | |||
| struct dirent *ep; | |||
| struct stat sb; | |||
| void *handle; | |||
| string fullpath; | |||
| const char *path = PLUGIN_PATH.c_str(); | |||
| dp = opendir(path); | |||
| if (!dp) { | |||
| cerr << "WARNING: Could not open path " << path << endl; | |||
| } else { | |||
| while ((ep = readdir(dp))) { | |||
| // Need full path | |||
| fullpath = path; | |||
| fullpath.append(ep->d_name); | |||
| // Stat file to get type | |||
| if (!stat(fullpath.c_str(), &sb)) { | |||
| // We only want regular files | |||
| if (S_ISREG(sb.st_mode)) { | |||
| // We're not fussed about resolving symbols yet, since we are just | |||
| // checking if it's a DLL. | |||
| handle = dlopen(fullpath.c_str(), RTLD_LAZY); | |||
| if (!handle) { | |||
| cerr << "WARNING: File " << path << ep->d_name | |||
| << " could not be examined" << endl; | |||
| cerr << "dlerror() output:" << endl; | |||
| cerr << dlerror() << endl; | |||
| } else { | |||
| // It's a DLL. Add name to list | |||
| PLUGINVEC.push_back(ep->d_name); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| #endif | |||
| } | |||
| void SpiralSynthModularInfo::StreamInPrefs(istream &s) | |||
| { | |||
| // call base class | |||
| SpiralInfo::StreamInPrefs(s); | |||
| char temp[256]; | |||
| s>>temp>>temp; | |||
| s>>temp>>temp>>GUICOL_Tool; | |||