@@ -14,7 +14,7 @@ CXXFLAGS= @CXXFLAGS@ | |||
INCPATH = -I/usr/X11R6/include | |||
LINK = g++ -shared | |||
LFLAGS = | |||
LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -lm -ldl -pthread | |||
LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -ldl -pthread | |||
MOC = moc | |||
UIC = | |||
@@ -1,4 +1,3 @@ | |||
# Generated automatically from Makefile.in by configure. | |||
############################################################################# | |||
# Makefile for building LFOPlugin.so | |||
# Generated by tmake at 22:13, 2001/09/17 | |||
@@ -15,7 +14,7 @@ CXXFLAGS= -pipe -Wall -O3 -ffast-math -DNO_DEBUG -Wno-unused -fPIC -fPIC | |||
INCPATH = -I/usr/X11R6/include | |||
LINK = g++ -shared | |||
LFLAGS = | |||
LIBS = -L/usr/X11R6/lib -lfltk -lGL -lXext -lX11 -lm -ldl | |||
LIBS = -L/usr/X11R6/lib -L/usr/X11R6/lib -lfltk -lGL -lGL -lXext -lX11 -ldl | |||
MOC = moc | |||
UIC = | |||
@@ -1,4 +1,3 @@ | |||
# Generated automatically from Makefile.in by configure. | |||
############################################################################# | |||
# Makefile for building MeterPlugin.so | |||
############################################################################# | |||
@@ -12,7 +11,7 @@ CXXFLAGS= -pipe -Wall -O3 -ffast-math -DNO_DEBUG -Wno-unused -fPIC -fPIC | |||
INCPATH = -I/usr/X11R6/include | |||
LINK = g++ -shared | |||
LFLAGS = | |||
LIBS = -L/usr/X11R6/lib -lfltk -lGL -lXext -lX11 -lm -ldl | |||
LIBS = -L/usr/X11R6/lib -L/usr/X11R6/lib -lfltk -lGL -lGL -lXext -lX11 -ldl | |||
MOC = moc | |||
UIC = | |||
@@ -14,7 +14,7 @@ CXXFLAGS= @CXXFLAGS@ | |||
INCPATH = -I/usr/X11R6/include | |||
LINK = g++ -shared | |||
LFLAGS = | |||
LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -lm -ldl | |||
LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -ldl | |||
MOC = moc | |||
UIC = | |||
@@ -14,7 +14,7 @@ CXXFLAGS= @CXXFLAGS@ | |||
INCPATH = -I/usr/X11R6/include | |||
LINK = g++ -shared | |||
LFLAGS = | |||
LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -lm -ldl | |||
LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -ldl | |||
MOC = moc | |||
UIC = | |||
@@ -14,7 +14,7 @@ CXXFLAGS= @CXXFLAGS@ | |||
INCPATH = -I/usr/X11R6/include | |||
LINK = g++ -shared | |||
LFLAGS = | |||
LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -lm -ldl | |||
LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -ldl | |||
MOC = moc | |||
UIC = | |||
@@ -14,7 +14,7 @@ CXXFLAGS= @CXXFLAGS@ | |||
INCPATH = -I/usr/X11R6/include | |||
LINK = g++ -shared | |||
LFLAGS = | |||
LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -lm -ldl | |||
LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -ldl | |||
MOC = moc | |||
UIC = | |||
@@ -15,7 +15,7 @@ CXXFLAGS= @CXXFLAGS@ | |||
INCPATH = -I/usr/X11R6/include | |||
LINK = g++ -shared | |||
LFLAGS = | |||
LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -lm -ldl | |||
LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -ldl | |||
MOC = moc | |||
UIC = | |||
@@ -14,7 +14,7 @@ CXXFLAGS= @CXXFLAGS@ | |||
INCPATH = -I/usr/X11R6/include | |||
LINK = g++ -shared | |||
LFLAGS = | |||
LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -lm -ldl | |||
LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -ldl | |||
MOC = moc | |||
UIC = | |||
@@ -14,7 +14,7 @@ CXXFLAGS= @CXXFLAGS@ | |||
INCPATH = -I/usr/X11R6/include | |||
LINK = g++ -shared | |||
LFLAGS = | |||
LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -lm -ldl | |||
LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -ldl | |||
MOC = moc | |||
UIC = | |||
@@ -70,10 +70,17 @@ m_Mode(PLAYM) | |||
m_StreamDesc.TriggerUp = true; | |||
m_StreamDesc.SampleRate = 44100; | |||
m_StreamDesc.Stereo = false; | |||
m_AudioCH->Register("Volume",&m_StreamDesc.Volume); | |||
m_AudioCH->Register("Pitch",&m_StreamDesc.PitchMod,ChannelHandler::INPUT); | |||
m_AudioCH->RegisterData("FileName",ChannelHandler::INPUT,&m_FileNameArg,sizeof(m_FileNameArg)); | |||
m_AudioCH->Register("Time",&m_TimeArg); | |||
m_AudioCH->Register("TimeOut",&m_TimeOut,ChannelHandler::OUTPUT); | |||
} | |||
StreamPlugin::~StreamPlugin() | |||
{ | |||
cerr << "I'm deleted" << endl; | |||
} | |||
PluginInfo &StreamPlugin::Initialise(const HostInfo *Host) | |||
@@ -84,11 +91,9 @@ PluginInfo &StreamPlugin::Initialise(const HostInfo *Host) | |||
SpiralGUIType *StreamPlugin::CreateGUI() | |||
{ | |||
m_GUI = new StreamPluginGUI(m_PluginInfo.Width, | |||
m_PluginInfo.Height, | |||
this,m_HostInfo); | |||
m_GUI->hide(); | |||
return m_GUI; | |||
return new StreamPluginGUI(m_PluginInfo.Width, | |||
m_PluginInfo.Height, | |||
this,m_AudioCH,m_HostInfo); | |||
} | |||
void StreamPlugin::Execute() | |||
@@ -137,8 +142,29 @@ void StreamPlugin::Execute() | |||
m_GlobalPos+=m_StreamDesc.PitchMod+CVPitch; | |||
} | |||
if (((StreamPluginGUI*)m_GUI)->visible()) | |||
((StreamPluginGUI*)m_GUI)->SetTime(GetTime()); | |||
//if (((StreamPluginGUI*)m_GUI)->visible()) | |||
// ((StreamPluginGUI*)m_GUI)->SetTime(GetTime()); | |||
//Joe must fix this. | |||
m_TimeOut=GetTime(); | |||
} | |||
} | |||
void StreamPlugin::ExecuteCommands() | |||
{ | |||
if (m_AudioCH->IsCommandWaiting()) | |||
{ | |||
switch(m_AudioCH->GetCommand()) | |||
{ | |||
case (LOAD) : OpenStream(m_FileNameArg); break; | |||
case (RESTART) : Restart(); break; | |||
case (STOP) : Stop(); break; | |||
case (PLAY) : Play(); break; | |||
case (HALF) : m_StreamDesc.PitchMod/=2; break; | |||
case (RESET) : m_StreamDesc.PitchMod=1; break; | |||
case (DOUBLE) : m_StreamDesc.PitchMod*=2; break; | |||
case (NUDGE) : Nudge(); break; | |||
case (SET_TIME) : SetTime(m_TimeArg); break; | |||
} | |||
} | |||
} | |||
@@ -195,9 +221,10 @@ void StreamPlugin::OpenStream(const string &Name) | |||
if (m_StreamDesc.Stereo) | |||
{ | |||
m_StreamDesc.Pitch*=2; | |||
((StreamPluginGUI*)m_GUI)->SetMaxTime(GetLength()); | |||
//((StreamPluginGUI*)m_GUI)->SetMaxTime(GetLength()); | |||
} | |||
else ((StreamPluginGUI*)m_GUI)->SetMaxTime(GetLength()/2); | |||
//else ((StreamPluginGUI*)m_GUI)->SetMaxTime(GetLength()/2); | |||
//Joe this must use the chanel handler | |||
} | |||
@@ -44,12 +44,15 @@ class StreamPlugin : public SpiralPlugin | |||
public: | |||
enum Mode{PLAYM,STOPM}; | |||
enum GUICommands{LOAD,RESTART,STOP,PLAY,HALF,RESET,DOUBLE,NUDGE,SET_TIME}; | |||
StreamPlugin(); | |||
virtual ~StreamPlugin(); | |||
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); | |||
@@ -85,6 +88,10 @@ private: | |||
float m_GlobalPos; | |||
float m_Pitch; | |||
Mode m_Mode; | |||
char m_FileNameArg[256]; | |||
float m_TimeArg; | |||
float m_TimeOut; | |||
}; | |||
#endif |
@@ -26,15 +26,21 @@ static const int GUIBG_COLOUR = 144; | |||
static const int GUIBG2_COLOUR = 145; | |||
char PitchLabel[256]; | |||
bool StreamPluginGUI::TimerSet=false; | |||
vector<StreamPluginGUI*> StreamPluginGUI::PluginList; | |||
//////////////////////////////////////////// | |||
StreamPluginGUI::StreamPluginGUI(int w, int h,StreamPlugin *o,const HostInfo *Info) : | |||
SpiralPluginGUI(w,h,o) | |||
StreamPluginGUI::StreamPluginGUI(int w, int h,StreamPlugin *o,ChannelHandler *ch,const HostInfo *Info) : | |||
SpiralPluginGUI(w,h,o,ch) | |||
{ | |||
m_Plugin=o; | |||
StartTimer(this); | |||
int Width=20; | |||
int Height=100; | |||
//What are Width and Height for. | |||
m_PitchValue=1.0f; | |||
m_Load = new Fl_Button(2, 130, 30, 30, "Load"); | |||
m_Load->labelsize(9); | |||
@@ -158,8 +164,17 @@ SpiralPluginGUI(w,h,o) | |||
end(); | |||
} | |||
void StreamPluginGUI::SetTime(float t) | |||
StreamPluginGUI::~StreamPluginGUI() | |||
{ | |||
cerr << "~StreamPluginGUI" << endl; | |||
StopTimer(this); | |||
} | |||
void StreamPluginGUI::SetTime() | |||
{ | |||
cerr << "foo" << endl; | |||
float t=m_GUICH->GetFloat("TimeOut"); | |||
m_Pos->value(t); | |||
m_Display[5]->value((int)(t*100)%10); | |||
@@ -174,11 +189,13 @@ void StreamPluginGUI::SetTime(float t) | |||
} | |||
void StreamPluginGUI::UpdateValues() | |||
void StreamPluginGUI::UpdateValues(SpiralPlugin *o) | |||
{ | |||
m_Volume->value(m_Plugin->GetVolume()); | |||
m_Pitch->value(m_Plugin->GetPitch()+10); | |||
m_Loop->value(m_Plugin->GetLoop()); | |||
StreamPlugin *Plugin = (StreamPlugin*)o; | |||
m_Volume->value(Plugin->GetVolume()); | |||
m_Pitch->value(Plugin->GetPitch()+10); | |||
m_Loop->value(Plugin->GetLoop()); | |||
} | |||
inline void StreamPluginGUI::cb_Load_i(Fl_Button* o, void* v) | |||
@@ -187,33 +204,36 @@ inline void StreamPluginGUI::cb_Load_i(Fl_Button* o, void* v) | |||
if (fn && fn!='\0') | |||
{ | |||
m_Plugin->OpenStream(fn); | |||
strcpy(m_TextBuf,fn); | |||
m_GUICH->Set("FileName",m_TextBuf); | |||
m_GUICH->SetCommand(StreamPlugin::LOAD); | |||
} | |||
} | |||
void StreamPluginGUI::cb_Load(Fl_Button* o, void* v) | |||
{ ((StreamPluginGUI*)(o->parent()))->cb_Load_i(o,v);} | |||
inline void StreamPluginGUI::cb_Volume_i(Fl_Knob* o, void* v) | |||
{ m_Plugin->SetVolume(o->value()); } | |||
{ m_GUICH->Set("Volume",(float)o->value()); } | |||
void StreamPluginGUI::cb_Volume(Fl_Knob* o, void* v) | |||
{ ((StreamPluginGUI*)(o->parent()))->cb_Volume_i(o,v);} | |||
inline void StreamPluginGUI::cb_Pitch_i(Fl_Slider* o, void* v) | |||
{ | |||
m_Plugin->SetPitch(o->value()-10); | |||
m_GUICH->Set("Pitch",(float)o->value()-10); | |||
sprintf(PitchLabel,"%1.3f ",o->value()-10); | |||
m_Pitch->label(PitchLabel); | |||
m_PitchValue=o->value()-10; | |||
} | |||
void StreamPluginGUI::cb_Pitch(Fl_Slider* o, void* v) | |||
{ ((StreamPluginGUI*)(o->parent()))->cb_Pitch_i(o,v);} | |||
inline void StreamPluginGUI::cb_Loop_i(Fl_Button* o, void* v) | |||
inline void StreamPluginGUI::cb_Loop_i(Fl_Button* o, void* v) //Why is this function named so. | |||
{ | |||
float p=m_Plugin->GetPitch()*2; | |||
m_Plugin->SetPitch(p); | |||
sprintf(PitchLabel,"%1.3f ",p); | |||
m_PitchValue*=2.0f; | |||
m_GUICH->SetCommand(StreamPlugin::DOUBLE); | |||
sprintf(PitchLabel,"%1.3f ",m_PitchValue); | |||
m_Pitch->label(PitchLabel); | |||
m_Pitch->value(p+10); | |||
m_Pitch->value(m_PitchValue+10); | |||
redraw(); | |||
} | |||
void StreamPluginGUI::cb_Loop(Fl_Button* o, void* v) | |||
@@ -221,37 +241,38 @@ void StreamPluginGUI::cb_Loop(Fl_Button* o, void* v) | |||
inline void StreamPluginGUI::cb_Div_i(Fl_Button* o, void* v) | |||
{ | |||
float p=m_Plugin->GetPitch()/2.0f; | |||
m_Plugin->SetPitch(p); | |||
sprintf(PitchLabel,"%1.3f ",p); | |||
m_PitchValue/=2.0f; | |||
m_GUICH->SetCommand(StreamPlugin::HALF); | |||
sprintf(PitchLabel,"%1.3f ",m_PitchValue); | |||
m_Pitch->label(PitchLabel); | |||
m_Pitch->value(p+10); | |||
m_Pitch->value(m_PitchValue+10); | |||
redraw(); | |||
} | |||
void StreamPluginGUI::cb_Div(Fl_Button* o, void* v) | |||
{ ((StreamPluginGUI*)(o->parent()))->cb_Div_i(o,v);} | |||
inline void StreamPluginGUI::cb_ToStart_i(Fl_Button* o, void* v) | |||
{ m_Plugin->Restart(); } | |||
{ m_GUICH->SetCommand(StreamPlugin::RESTART); } | |||
void StreamPluginGUI::cb_ToStart(Fl_Button* o, void* v) | |||
{ ((StreamPluginGUI*)(o->parent()))->cb_ToStart_i(o,v);} | |||
inline void StreamPluginGUI::cb_Stop_i(Fl_Button* o, void* v) | |||
{ m_Plugin->Stop(); } | |||
{ m_GUICH->SetCommand(StreamPlugin::STOP); } | |||
void StreamPluginGUI::cb_Stop(Fl_Button* o, void* v) | |||
{ ((StreamPluginGUI*)(o->parent()))->cb_Stop_i(o,v);} | |||
inline void StreamPluginGUI::cb_Play_i(Fl_Button* o, void* v) | |||
{ m_Plugin->Play(); } | |||
{ m_GUICH->SetCommand(StreamPlugin::PLAY); } | |||
void StreamPluginGUI::cb_Play(Fl_Button* o, void* v) | |||
{ ((StreamPluginGUI*)(o->parent()))->cb_Play_i(o,v);} | |||
inline void StreamPluginGUI::cb_Reset_i(Fl_Button* o, void* v) | |||
{ | |||
m_Plugin->SetPitch(1); | |||
m_GUICH->SetCommand(StreamPlugin::RESET); | |||
sprintf(PitchLabel,"%1.3f ",1.0); | |||
m_Pitch->label(PitchLabel); | |||
m_Pitch->value(11); | |||
m_PitchValue=1.0f; | |||
redraw(); | |||
} | |||
void StreamPluginGUI::cb_Reset(Fl_Button* o, void* v) | |||
@@ -259,13 +280,50 @@ void StreamPluginGUI::cb_Reset(Fl_Button* o, void* v) | |||
inline void StreamPluginGUI::cb_Nudge_i(Fl_Button* o, void* v) | |||
{ | |||
m_Plugin->Nudge(); | |||
m_GUICH->SetCommand(StreamPlugin::NUDGE); | |||
} | |||
void StreamPluginGUI::cb_Nudge(Fl_Button* o, void* v) | |||
{ ((StreamPluginGUI*)(o->parent()))->cb_Nudge_i(o,v);} | |||
inline void StreamPluginGUI::cb_Pos_i(Fl_Slider* o, void* v) | |||
{ m_Plugin->SetTime(o->value()); } | |||
{ | |||
m_GUICH->Set("Time",(float)o->value()); | |||
m_GUICH->SetCommand(StreamPlugin::SET_TIME); | |||
} | |||
void StreamPluginGUI::cb_Pos(Fl_Slider* o, void* v) | |||
{ ((StreamPluginGUI*)(o->parent()))->cb_Pos_i(o,v);} | |||
//The timer stuff | |||
#define TIME_OUT_DURATION 0.01 | |||
//This is temparary, should use a variable, and let it be set from the command line ore something. | |||
void StreamPluginGUI::StartTimer(StreamPluginGUI* p) | |||
{ | |||
if (!TimerSet) | |||
{ | |||
Fl::add_timeout(TIME_OUT_DURATION,&StreamPluginGUI::TimerCallBack); | |||
TimerSet=True; | |||
} | |||
PluginList.push_back(p); | |||
} | |||
void StreamPluginGUI::StopTimer(StreamPluginGUI* p) | |||
{ | |||
cerr << "StopTimer" << endl; | |||
for (vector<StreamPluginGUI*>::iterator i=PluginList.begin();i!=PluginList.end();i++) | |||
if ((*i)==p) | |||
i=PluginList.erase(i); | |||
} | |||
//If Spiral synth modular unloaded the .so file this is in, the timeout | |||
//would probably cause a problem | |||
void StreamPluginGUI::TimerCallBack(void* x) | |||
{ | |||
/*for(vector<const StreamPluginGUI*>::iterator i=PluginList.begin(); | |||
i!=PluginList.end();i++) | |||
{*/ | |||
for (vector<StreamPluginGUI*>::iterator i=PluginList.begin();i!=PluginList.end();i++) | |||
(*i)->SetTime(); | |||
Fl::add_timeout(TIME_OUT_DURATION,&StreamPluginGUI::TimerCallBack); | |||
} |
@@ -32,18 +32,40 @@ | |||
#ifndef MixerGUI | |||
#define MixerGUI | |||
class StreamPluginGUI; | |||
/*struct Compare_thingy | |||
{ | |||
bool operator() (const StreamPluginGUI* s1,const StreamPluginGUI* s2) const | |||
{ | |||
return s1<s2; | |||
} | |||
};*/ | |||
class StreamPluginGUI : public SpiralPluginGUI | |||
{ | |||
public: | |||
StreamPluginGUI(int w, int h, StreamPlugin *o,const HostInfo *Info); | |||
StreamPluginGUI(int w, int h, StreamPlugin *o,ChannelHandler *ch,const HostInfo *Info); | |||
virtual ~StreamPluginGUI(); | |||
virtual void UpdateValues(); | |||
virtual SpiralPlugin* GetPlugin() { return m_Plugin; } | |||
void SetTime(float t); | |||
virtual void UpdateValues(SpiralPlugin *o); | |||
void SetTime(); | |||
void SetMaxTime(float t) { m_Pos->maximum(t); } | |||
StreamPlugin *m_Plugin; | |||
//Stuff for the timer | |||
static bool TimerSet; | |||
/*static struct Compare_thingy | |||
{ | |||
bool operator() (const StreamPluginGUI* s1,const StreamPluginGUI* s2) const | |||
{ | |||
return s1<s2; | |||
} | |||
};*/ | |||
//static set<const StreamPluginGUI*,Compare_thingy> PluginList; | |||
static vector<StreamPluginGUI*> PluginList; | |||
static void StartTimer(StreamPluginGUI* p); | |||
static void StopTimer(StreamPluginGUI* p); | |||
static void TimerCallBack(void* x); | |||
private: | |||
Fl_Button* m_Load; | |||
@@ -62,6 +84,10 @@ private: | |||
Fl_SevenSeg* m_Display[6]; | |||
Fl_Slider* m_Pos; | |||
char m_TextBuf[256]; | |||
float m_PitchValue; | |||
//// Callbacks //// | |||
inline void cb_Load_i(Fl_Button* o, void* v); | |||
@@ -14,7 +14,7 @@ CXXFLAGS= @CXXFLAGS@ | |||
INCPATH = -I/usr/X11R6/include | |||
LINK = g++ -shared | |||
LFLAGS = | |||
LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -lm -ldl | |||
LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -ldl | |||
MOC = moc | |||
UIC = | |||
@@ -14,7 +14,7 @@ CXXFLAGS= @CXXFLAGS@ | |||
INCPATH = -I/usr/X11R6/include | |||
LINK = g++ -shared | |||
LFLAGS = | |||
LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -lm -ldl | |||
LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -ldl | |||
MOC = moc | |||
UIC = | |||
@@ -14,7 +14,7 @@ CXXFLAGS= @CXXFLAGS@ | |||
INCPATH = -I/usr/X11R6/include | |||
LINK = g++ -shared | |||
LFLAGS = | |||
LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -lm -ldl | |||
LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -ldl | |||
MOC = moc | |||
UIC = | |||