@@ -14,21 +14,18 @@ | |||
* 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. | |||
*/ | |||
*/ | |||
// is this still relevant | |||
// for lrintf() | |||
#define _ISOC9X_SOURCE 1 | |||
#define _ISOC99_SOURCE 1 | |||
#include <math.h> | |||
#include <sys/types.h> | |||
#include <stdio.h> | |||
#include <fcntl.h> | |||
#include <unistd.h> | |||
#include <limits.h> | |||
#include <sys/ioctl.h> | |||
#include <limits.h> | |||
//#include <math.h> | |||
//#include <sys/types.h> | |||
//#include <sys/ioctl.h> | |||
//#include <unistd.h> | |||
//#include <limits.h> | |||
#include "DiskWriterPlugin.h" | |||
#include "DiskWriterPluginGUI.h" | |||
#include <FL/fl_file_chooser.H> | |||
@@ -46,25 +43,15 @@ using namespace std; | |||
extern "C" | |||
{ | |||
SpiralPlugin* SpiralPlugin_CreateInstance() | |||
{ | |||
return new DiskWriterPlugin; | |||
} | |||
char** SpiralPlugin_GetIcon() | |||
{ | |||
return SpiralIcon_xpm; | |||
} | |||
SpiralPlugin* SpiralPlugin_CreateInstance() { return new DiskWriterPlugin; } | |||
int SpiralPlugin_GetID() | |||
{ | |||
return 41; | |||
} | |||
char** SpiralPlugin_GetIcon() { return SpiralIcon_xpm; } | |||
int SpiralPlugin_GetID() { return 41; } | |||
string SpiralPlugin_GetGroupName() { return "InputOutput"; } | |||
string SpiralPlugin_GetGroupName() | |||
{ | |||
return "InputOutput"; | |||
} | |||
} | |||
/////////////////////////////////////////////////////// | |||
@@ -101,17 +88,12 @@ DiskWriterPlugin::~DiskWriterPlugin() | |||
PluginInfo &DiskWriterPlugin::Initialise(const HostInfo *Host) | |||
{ | |||
PluginInfo& Info= SpiralPlugin::Initialise(Host); | |||
//host=Host; | |||
return Info; | |||
} | |||
SpiralGUIType *DiskWriterPlugin::CreateGUI() | |||
{ | |||
return new DiskWriterPluginGUI(m_PluginInfo.Width, | |||
m_PluginInfo.Height, | |||
this, | |||
m_AudioCH, | |||
m_HostInfo); | |||
return new DiskWriterPluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, this, m_AudioCH, m_HostInfo); | |||
} | |||
void DiskWriterPlugin::Execute() | |||
@@ -157,26 +139,26 @@ void DiskWriterPlugin::ExecuteCommands() | |||
} | |||
} | |||
void DiskWriterPlugin::StreamOut (ostream &s) | |||
void DiskWriterPlugin::StreamOut (ostream &s) | |||
{ | |||
s << m_Version << " " << m_GUIArgs.BitsPerSample << " " << m_GUIArgs.Stereo << " "; | |||
} | |||
void DiskWriterPlugin::StreamIn (istream &s) | |||
void DiskWriterPlugin::StreamIn (istream &s) | |||
{ | |||
char Test; | |||
int Version, BitsPerSample, Stereo; | |||
//originally DiskWriter had NO streaming code whatsover | |||
// originally DiskWriter had NO streaming code whatsover | |||
// so to test if this is an old patch we must | |||
// read ahead and find out what the first char | |||
// of the next line is | |||
s.seekg (2, ios_base::cur );//skip to next line | |||
Test = s.peek();//peek first char | |||
s.seekg (-2, ios_base::cur );//jump back to prior line | |||
//This test works because if the char | |||
s.seekg (2, ios::cur ); //skip to next line | |||
Test = s.peek(); //peek first char | |||
s.seekg (-2, ios::cur ); //jump back to prior line | |||
// This test works because if the char | |||
// of the next line isn't a version number | |||
// it will only be 'D', ' ', #13, or '-' | |||
if ( (Test >= '0') && (Test <= '9') ) | |||
@@ -188,7 +170,7 @@ void DiskWriterPlugin::StreamIn (istream &s) | |||
//No Version, so use Version 1 | |||
Version = 1; | |||
} | |||
switch (Version) | |||
{ | |||
case 2: | |||
@@ -198,7 +180,7 @@ void DiskWriterPlugin::StreamIn (istream &s) | |||
m_GUIArgs.Stereo = Stereo; | |||
} | |||
break; | |||
case 1: | |||
{ | |||
//use original fixed defaults | |||
@@ -206,5 +188,5 @@ void DiskWriterPlugin::StreamIn (istream &s) | |||
m_GUIArgs.Stereo = true; | |||
} | |||
break; | |||
} | |||
} | |||
} |
@@ -622,9 +622,9 @@ void JackPlugin::StreamIn (istream &s) | |||
char Test; | |||
int Version, NumInputs, NumOutputs; | |||
s.seekg (2, ios_base::cur );//skip to next line | |||
Test = s.peek();//peek first char | |||
s.seekg (-2, ios_base::cur );//jump back to prior line | |||
s.seekg (2, ios::cur ); //skip to next line | |||
Test = s.peek(); //peek first char | |||
s.seekg (-2, ios::cur ); //jump back to prior line | |||
if ( (Test >= '0') && (Test <= '9') ) | |||
{ | |||
@@ -45,7 +45,6 @@ m_VUMode (true) | |||
m_PluginInfo.NumOutputs = 1; | |||
m_PluginInfo.PortTips.push_back ("Input"); | |||
m_PluginInfo.PortTips.push_back ("Output"); | |||
m_Version = 1; | |||
} | |||
@@ -68,8 +67,8 @@ void MeterPlugin::Execute() { | |||
// Just copy the data through. | |||
if (GetOutputBuf (0)) GetOutputBuf (0)->Zero(); | |||
if (GetInput (0)) { | |||
GetOutputBuf (0)->Mix (*GetInput(0), 0); | |||
memcpy (m_Data, GetInput (0)->GetBuffer (), m_HostInfo->BUFSIZE * sizeof (float)); | |||
GetOutputBuf (0)->Mix (*GetInput(0), 0); | |||
memcpy (m_Data, GetInput (0)->GetBuffer (), m_HostInfo->BUFSIZE * sizeof (float)); | |||
} | |||
} | |||
@@ -21,13 +21,16 @@ | |||
using namespace std; | |||
char label_buf[10]; | |||
char label_buf[65]; | |||
MeterPluginGUI::~MeterPluginGUI () { | |||
delete m_Data; | |||
} | |||
MeterPluginGUI::MeterPluginGUI (int w, int h, MeterPlugin *o, ChannelHandler *ch, const HostInfo *Info) : | |||
SpiralPluginGUI (w, h, o, ch), | |||
m_Bypass (false) | |||
{ | |||
// If I'm only going to use the first value from this, is it worth doing all this | |||
m_BufSize = Info->BUFSIZE; | |||
m_Data = new float[m_BufSize]; | |||
// Create the widgets and stuff! | |||
@@ -90,18 +93,21 @@ m_Bypass (false) | |||
void MeterPluginGUI::draw() { | |||
SpiralGUIType::draw (); | |||
if (! m_Bypass) { | |||
float datum = 0.0; | |||
m_GUICH->GetData ("AudioData", m_Data); | |||
// The min and max values are based on the whole buffer | |||
for (int c=0; c<m_BufSize; c++) { | |||
if (VUMode->value ()) m_Data[c] = fabs (m_Data[c]); | |||
if (m_Data[c] < m_Min) m_Min=m_Data[c]; | |||
if (m_Data[c] > m_Max) m_Max=m_Data[c]; | |||
datum = m_Data[c]; | |||
if (VUMode->value ()) datum = fabs (datum); | |||
if (datum < m_Min) m_Min = datum; | |||
if (datum > m_Max) m_Max = datum; | |||
} | |||
SetMinMax (m_Min, m_Max); | |||
// The meter displays the first datum in the buffer (it's a quick average) | |||
Meter->value (*m_Data); | |||
// The meter displays the last datum we touched (it's a quick average) | |||
Meter->value (datum); | |||
Meter->redraw(); | |||
snprintf (label_buf, 64, "%1.5f", *m_Data); | |||
// Yeuck - have I REALLY used stdio for that - this is supposed to be C++ | |||
//snprintf (label_buf, 64, "%1.5f", *m_Data); | |||
char* c = label_buf; | |||
for (int display=0; display<8; display++) { | |||
Digits[display] -> dp (off); | |||
@@ -19,6 +19,7 @@ | |||
#ifndef METERGUI | |||
#define METERGUI | |||
#include <sstream> | |||
#include <FL/Fl.H> | |||
#include "../Widgets/Fl_VU_Meter.h" | |||
#include "../Widgets/Fl_SevenSeg.H" | |||
@@ -30,6 +31,7 @@ | |||
class MeterPluginGUI : public SpiralPluginGUI { | |||
public: | |||
MeterPluginGUI (int w, int h, MeterPlugin *o, ChannelHandler *ch, const HostInfo *Info); | |||
~MeterPluginGUI (); | |||
virtual void UpdateValues (SpiralPlugin* o); | |||
virtual void Update (); | |||
virtual void draw (); | |||
@@ -14,7 +14,7 @@ | |||
* 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 "ScopePlugin.h" | |||
#include "ScopePluginGUI.h" | |||
#include <FL/Fl_Button.h> | |||
@@ -24,25 +24,13 @@ using namespace std; | |||
extern "C" | |||
{ | |||
SpiralPlugin* SpiralPlugin_CreateInstance() | |||
{ | |||
return new ScopePlugin; | |||
} | |||
SpiralPlugin* SpiralPlugin_CreateInstance() { return new ScopePlugin; } | |||
char** SpiralPlugin_GetIcon() | |||
{ | |||
return SpiralIcon_xpm; | |||
} | |||
char** SpiralPlugin_GetIcon() { return SpiralIcon_xpm; } | |||
int SpiralPlugin_GetID() | |||
{ | |||
return 0x0001; | |||
} | |||
int SpiralPlugin_GetID() { return 0x0001; } | |||
string SpiralPlugin_GetGroupName() | |||
{ | |||
return "Control"; | |||
} | |||
string SpiralPlugin_GetGroupName() { return "Control"; } | |||
} | |||
/////////////////////////////////////////////////////// | |||
@@ -50,9 +38,7 @@ string SpiralPlugin_GetGroupName() | |||
ScopePlugin::ScopePlugin() | |||
{ | |||
m_PluginInfo.Name="Scope"; | |||
//m_PluginInfo.Width=220; | |||
m_PluginInfo.Width=260; | |||
//m_PluginInfo.Height=125; | |||
m_PluginInfo.Height=115; | |||
m_PluginInfo.NumInputs=1; | |||
m_PluginInfo.NumOutputs=1; | |||
@@ -65,8 +51,8 @@ ScopePlugin::~ScopePlugin() | |||
} | |||
PluginInfo &ScopePlugin::Initialise(const HostInfo *Host) | |||
{ | |||
PluginInfo& Info = SpiralPlugin::Initialise(Host); | |||
{ | |||
PluginInfo& Info = SpiralPlugin::Initialise(Host); | |||
m_Data = new float[Host->BUFSIZE]; | |||
m_AudioCH->RegisterData("AudioData",ChannelHandler::OUTPUT,m_Data,Host->BUFSIZE*sizeof(float)); | |||
return Info; | |||
@@ -74,22 +60,15 @@ PluginInfo &ScopePlugin::Initialise(const HostInfo *Host) | |||
SpiralGUIType *ScopePlugin::CreateGUI() | |||
{ | |||
return new ScopePluginGUI(m_PluginInfo.Width, | |||
m_PluginInfo.Height, | |||
this, | |||
m_AudioCH, | |||
m_HostInfo); | |||
return new ScopePluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, this, m_AudioCH, m_HostInfo); | |||
} | |||
void ScopePlugin::Execute() | |||
{ | |||
// Just copy the data through. | |||
if (GetOutputBuf(0)) GetOutputBuf(0)->Zero(); | |||
if (GetInput(0)) GetOutputBuf(0)->Mix(*GetInput(0),0); | |||
if (GetInput(0)) | |||
{ | |||
//cerr<<1<<" "<<m_HostInfo->BUFSIZE<<endl; | |||
memcpy(m_Data,GetInput(0)->GetBuffer(),m_HostInfo->BUFSIZE*sizeof(float)); | |||
} | |||
void ScopePlugin::Execute() { | |||
// Just copy the data through. | |||
if (GetOutputBuf (0)) GetOutputBuf (0)->Zero(); | |||
if (GetInput (0)) { | |||
GetOutputBuf (0)->Mix (*GetInput(0), 0); | |||
memcpy (m_Data, GetInput (0)->GetBuffer (), m_HostInfo->BUFSIZE * sizeof (float)); | |||
} | |||
} | |||
@@ -60,7 +60,7 @@ SpiralGUIType(0,0,w,h,"") | |||
SpiralPluginGUI::~SpiralPluginGUI() | |||
{ | |||
// Needed to properly remove the window. | |||
Fl::check(); | |||
Fl::check(); | |||
} | |||
void SpiralPluginGUI::Resize (int neww, int newh) { | |||
@@ -201,31 +201,34 @@ void SynthModular::UpdatePluginGUIs() | |||
if (i->second->m_DeviceGUI->Killed()) | |||
{ | |||
PauseAudio(); | |||
PauseAudio(); | |||
//Hide Device GUI FIRST | |||
// Hide Device GUI FIRST | |||
if (i->second->m_DeviceGUI->GetPluginWindow()) | |||
{ | |||
i->second->m_DeviceGUI->GetPluginWindow()->hide(); | |||
} | |||
//Clear and remove Device GUI from canvas | |||
// Clear and remove Device GUI from canvas | |||
i->second->m_DeviceGUI->Clear(); | |||
m_Canvas->RemoveDevice(i->second->m_DeviceGUI); | |||
//Delete Device GUI - must delete here or sometimes plugin will randomly crash | |||
// Delete Device GUI - must delete here or sometimes plugin will randomly crash | |||
// SOMETIMES AT THIS POINT THE WHOLE THING JUST LOCKS UP | |||
// In the previous version of this code this next line was commented out | |||
// with the comment "deleted by Canvas::Remove()? seems to cause random crashes" | |||
delete i->second->m_DeviceGUI; | |||
//Delete Device Sometimes deleting audio before GUI causes an odd crash, so do it afterword | |||
// Delete Device Sometimes deleting audio before GUI causes an odd crash, so do it afterword | |||
if (i->second->m_Device) | |||
{ | |||
delete i->second->m_Device; | |||
i->second->m_Device=NULL; | |||
} | |||
//Erase Device from DeviceWinMap | |||
// Erase Device from DeviceWinMap | |||
m_DeviceWinMap.erase(i); | |||
ResumeAudio(); | |||
break; | |||
} | |||
@@ -40,7 +40,7 @@ | |||
#include "SpiralSound/ChannelHandler.h" | |||
#include "SettingsWindow.h" | |||
const static string VER_STRING = "0.2.2rc1"; | |||
const static string VER_STRING = "0.2.2rc2"; | |||
typedef Fl_Double_Window SpiralWindowType; | |||
// typedef Fl_Window SpiralWindowType; | |||