@@ -50,38 +50,35 @@ string GetGroupName() | |||||
/////////////////////////////////////////////////////// | /////////////////////////////////////////////////////// | ||||
StreamPlugin::StreamPlugin() : | StreamPlugin::StreamPlugin() : | ||||
m_SampleSize(256), | |||||
m_Pos(0), | |||||
m_StreamPos(0), | |||||
m_GlobalPos(0), | |||||
m_SampleRate (44100), | |||||
m_SampleSize (256), | |||||
m_StreamPos (0), | |||||
m_GlobalPos (0), | |||||
m_Pitch (1.0f), | |||||
m_SamplePos (-1), | |||||
m_Pos (0), | |||||
m_Mode(STOPM) | m_Mode(STOPM) | ||||
{ | { | ||||
m_PluginInfo.Name="Stream"; | |||||
m_PluginInfo.Width=245; | |||||
m_PluginInfo.Height=165; | |||||
m_PluginInfo.NumInputs=1; | |||||
m_PluginInfo.NumOutputs=2; | |||||
m_PluginInfo.PortTips.push_back("Pitch CV"); | |||||
m_PluginInfo.PortTips.push_back("Left Out"); | |||||
m_PluginInfo.PortTips.push_back("Right Out"); | |||||
m_StreamDesc.Volume = 1.0f; | |||||
m_StreamDesc.Pitch = 1.0f; | |||||
m_StreamDesc.PitchMod = 1.0f; | |||||
m_StreamDesc.SamplePos = -1; | |||||
m_StreamDesc.Loop = false; | |||||
m_StreamDesc.Note = 0; | |||||
m_StreamDesc.Pathname = "None"; | |||||
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); | |||||
m_AudioCH->Register("MaxTime",&m_MaxTime,ChannelHandler::OUTPUT); | |||||
m_PluginInfo.Name = "Stream"; | |||||
m_PluginInfo.Width = 245; | |||||
m_PluginInfo.Height = 165; | |||||
m_PluginInfo.NumInputs = 3; | |||||
m_PluginInfo.NumOutputs = 3; | |||||
m_PluginInfo.PortTips.push_back ("Pitch CV"); | |||||
m_PluginInfo.PortTips.push_back ("Play Trigger"); | |||||
m_PluginInfo.PortTips.push_back ("Stop Trigger"); | |||||
m_PluginInfo.PortTips.push_back ("Left Out"); | |||||
m_PluginInfo.PortTips.push_back ("Right Out"); | |||||
m_PluginInfo.PortTips.push_back ("Finish Trigger"); | |||||
m_GUIArgs.Volume = 1.0f; | |||||
m_GUIArgs.PitchMod = 1.0f; | |||||
m_AudioCH->Register ("Volume", &m_GUIArgs.Volume); | |||||
m_AudioCH->Register ("Pitch", &m_GUIArgs.PitchMod, ChannelHandler::INPUT); | |||||
m_AudioCH->RegisterData ("FileName", ChannelHandler::INPUT, | |||||
&m_GUIArgs.FileName, sizeof (m_GUIArgs.FileName)); | |||||
m_AudioCH->Register ("Time", &m_GUIArgs.Time); | |||||
m_AudioCH->Register ("TimeOut", &m_GUIArgs.TimeOut, ChannelHandler::OUTPUT); | |||||
m_AudioCH->Register ("MaxTime", &m_GUIArgs.MaxTime, ChannelHandler::OUTPUT); | |||||
} | } | ||||
StreamPlugin::~StreamPlugin() | StreamPlugin::~StreamPlugin() | ||||
@@ -89,172 +86,125 @@ StreamPlugin::~StreamPlugin() | |||||
} | } | ||||
PluginInfo &StreamPlugin::Initialise(const HostInfo *Host) | PluginInfo &StreamPlugin::Initialise(const HostInfo *Host) | ||||
{ | |||||
{ | |||||
PluginInfo& Info = SpiralPlugin::Initialise(Host); | PluginInfo& Info = SpiralPlugin::Initialise(Host); | ||||
return Info; | return Info; | ||||
} | } | ||||
SpiralGUIType *StreamPlugin::CreateGUI() | |||||
{ | |||||
return new StreamPluginGUI(m_PluginInfo.Width, | |||||
m_PluginInfo.Height, | |||||
this,m_AudioCH,m_HostInfo); | |||||
} | |||||
void StreamPlugin::Execute() | |||||
{ | |||||
float CVPitch=0; | |||||
if (m_File.IsOpen()) | |||||
{ | |||||
for (int n=0; n<m_HostInfo->BUFSIZE; n++) | |||||
{ | |||||
CVPitch=GetInput(0,n)*10.0f; | |||||
if (m_Pos<0) | |||||
{ | |||||
m_Pos=m_SampleSize-1; | |||||
m_StreamPos-=m_SampleSize; | |||||
if (m_StreamPos<0) | |||||
{ | |||||
m_StreamPos=m_File.GetSize()/2-m_SampleSize; | |||||
m_GlobalPos=m_StreamPos; | |||||
} | |||||
m_File.SeekToChunk(m_StreamPos); | |||||
m_File.LoadChunk(m_SampleSize, m_SampleL, m_SampleR); | |||||
} | |||||
else | |||||
{ | |||||
if (m_Pos>=m_SampleSize) | |||||
{ | |||||
//m_SampleSize=(int)(BUFSECONDS*m_HostInfo->SAMPLERATE*m_StreamDesc.PitchMod); | |||||
m_Pos=0; | |||||
m_StreamPos+=m_SampleSize; | |||||
if (m_StreamPos>=m_File.GetSize()/2) | |||||
{ | |||||
m_StreamPos=0; | |||||
m_GlobalPos=0; | |||||
} | |||||
m_File.SeekToChunk(m_StreamPos); | |||||
m_File.LoadChunk(m_SampleSize, m_SampleL, m_SampleR); | |||||
} | |||||
} | |||||
SetOutput(0,n,m_SampleL[m_Pos]*m_StreamDesc.Volume); | |||||
SetOutput(1,n,m_SampleR[m_Pos]*m_StreamDesc.Volume); | |||||
m_Pos+=m_StreamDesc.PitchMod+CVPitch; | |||||
m_GlobalPos+=m_StreamDesc.PitchMod+CVPitch; | |||||
} | |||||
m_TimeOut=GetTime(); | |||||
SpiralGUIType *StreamPlugin::CreateGUI() { | |||||
return new StreamPluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, this, m_AudioCH, m_HostInfo); | |||||
} | |||||
void StreamPlugin::Execute() { | |||||
if (m_File.IsOpen()) { | |||||
for (int n=0; n<m_HostInfo->BUFSIZE; n++) { | |||||
bool FinTrig = false; | |||||
float CVPitch = GetInput(0, n)*10.0f; | |||||
if (GetInput (1, n) > 0) Play(); | |||||
if (GetInput (2, n) > 0) Stop(); | |||||
if (m_Pos<0) { | |||||
m_Pos = m_SampleSize - 1; | |||||
m_StreamPos -= m_SampleSize; | |||||
FinTrig = m_StreamPos < 0; | |||||
if (FinTrig) { | |||||
m_StreamPos = m_File.GetSize() - m_SampleSize; | |||||
m_GlobalPos = m_StreamPos; | |||||
} | |||||
m_File.SeekToChunk (m_StreamPos); | |||||
m_File.LoadChunk (m_SampleSize, m_SampleL, m_SampleR); | |||||
} | |||||
else if (m_Pos >= m_SampleSize) { | |||||
m_Pos = 0; | |||||
m_StreamPos += m_SampleSize; | |||||
FinTrig = m_StreamPos >= m_File.GetSize(); | |||||
if (FinTrig) { | |||||
m_StreamPos = 0; | |||||
m_GlobalPos = 0; | |||||
} | |||||
m_File.SeekToChunk (m_StreamPos); | |||||
m_File.LoadChunk (m_SampleSize, m_SampleL, m_SampleR); | |||||
} | |||||
SetOutput (0, n, m_SampleL[m_Pos] * m_GUIArgs.Volume); | |||||
SetOutput (1, n, m_SampleR[m_Pos] * m_GUIArgs.Volume); | |||||
if (FinTrig) SetOutput (2, n, 1); else SetOutput (2, n, 0); | |||||
if (m_Mode==PLAYM) { | |||||
m_Pos += m_GUIArgs.PitchMod + CVPitch; | |||||
m_GlobalPos += m_GUIArgs.PitchMod + CVPitch; | |||||
} | |||||
} | |||||
m_GUIArgs.TimeOut = GetTime(); | |||||
} | |||||
} | |||||
void StreamPlugin::ExecuteCommands() { | |||||
if (m_AudioCH->IsCommandWaiting()) { | |||||
switch (m_AudioCH->GetCommand()) { | |||||
case SET_TIME: SetTime(); break; | |||||
case LOAD: OpenStream(); break; | |||||
case RESTART: Restart(); break; | |||||
case STOP: Stop(); break; | |||||
case PLAY: Play(); break; | |||||
} | } | ||||
} | |||||
} | } | ||||
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 (NUDGE) : Nudge(); break; | |||||
case (SET_TIME) : SetTime(m_TimeArg); break; | |||||
} | |||||
} | |||||
void StreamPlugin::SetTime (void) { | |||||
m_GlobalPos = m_SampleRate * m_GUIArgs.Time; | |||||
m_StreamPos = (int)(m_SampleRate * m_GUIArgs.Time); | |||||
m_Pos = m_SampleSize; | |||||
} | } | ||||
void StreamPlugin::StreamOut(ostream &s) | |||||
{ | |||||
s<<m_Version<<" "; | |||||
s<<m_StreamDesc.Volume<<" "<< | |||||
m_StreamDesc.PitchMod<<" "<< | |||||
m_StreamDesc.Pathname.size()<<" "<< | |||||
m_StreamDesc.Pathname<<" "; | |||||
s<<m_Pos<<" "; | |||||
s<<m_StreamPos<<" "; | |||||
s<<m_GlobalPos<<" "; | |||||
s<<m_Pitch<<" "<<endl; | |||||
void StreamPlugin::OpenStream (void) { | |||||
m_StreamPos = 0; | |||||
m_GlobalPos = 0; | |||||
if (m_File.IsOpen ()) m_File.Close (); | |||||
m_File.Open (m_GUIArgs.FileName, WavFile::READ); | |||||
m_SampleL.Allocate (m_SampleSize); | |||||
m_SampleR.Allocate (m_SampleSize); | |||||
m_Pitch = m_SampleRate / (float)m_HostInfo->SAMPLERATE; | |||||
if (m_File.IsStereo ()) { | |||||
m_Pitch *= 2; | |||||
m_GUIArgs.MaxTime = GetLength(); | |||||
} | |||||
else m_GUIArgs.MaxTime = GetLength() / 2; | |||||
} | } | ||||
void StreamPlugin::StreamIn(istream &s) | |||||
{ | |||||
int version; | |||||
s>>version; | |||||
s>>m_StreamDesc.Volume>> | |||||
m_StreamDesc.PitchMod; | |||||
char Buf[4096]; | |||||
int size; | |||||
s>>size; | |||||
s.ignore(1); | |||||
s.get(Buf,size+1); | |||||
m_StreamDesc.Pathname=Buf; | |||||
if (m_StreamDesc.Pathname!="None") | |||||
OpenStream(m_StreamDesc.Pathname); | |||||
s>>m_Pos; | |||||
s>>m_StreamPos; | |||||
s>>m_GlobalPos; | |||||
s>>m_Pitch; | |||||
float StreamPlugin::GetLength (void) { | |||||
if (m_File.IsStereo()) return m_File.GetSize() / (float)m_File.GetSamplerate (); | |||||
else return m_File.GetSize() / (float)m_File.GetSamplerate () * 2; | |||||
} | } | ||||
void StreamPlugin::OpenStream(const string &Name) | |||||
{ | |||||
m_StreamPos=0; | |||||
m_GlobalPos=0; | |||||
if (m_File.IsOpen()) m_File.Close(); | |||||
m_File.Open(Name,WavFile::READ); | |||||
m_SampleL.Allocate(m_SampleSize); | |||||
m_SampleR.Allocate(m_SampleSize); | |||||
m_StreamDesc.Pathname=Name; | |||||
m_StreamDesc.SampleRate=m_File.GetSamplerate(); | |||||
m_StreamDesc.Stereo=m_File.IsStereo(); | |||||
m_StreamDesc.Pitch = m_StreamDesc.SampleRate/(float)m_HostInfo->SAMPLERATE; | |||||
if (m_StreamDesc.Stereo) | |||||
{ | |||||
m_StreamDesc.Pitch*=2; | |||||
m_MaxTime=GetLength(); | |||||
} | |||||
else m_MaxTime=GetLength()/2; | |||||
void StreamPlugin::StreamOut (ostream &s) { | |||||
s << m_Version << " " | |||||
<< m_GUIArgs.Volume << " " | |||||
<< m_GUIArgs.PitchMod << " " | |||||
<< strlen (m_GUIArgs.FileName) << " " | |||||
<< m_GUIArgs.FileName << " " | |||||
// is it really necessary to save this lot?? | |||||
<< m_Pos << " " | |||||
<< m_StreamPos << " " | |||||
<< m_GlobalPos << " " | |||||
<< m_Pitch << " " << endl; | |||||
} | } | ||||
void StreamPlugin::Restart() | |||||
{ | |||||
m_StreamPos=0; m_GlobalPos=0; | |||||
} | |||||
void StreamPlugin::Play() | |||||
{ | |||||
if (m_Mode==PLAYM) return; | |||||
m_StreamDesc.PitchMod=m_Pitch; | |||||
m_Mode=PLAYM; | |||||
} | |||||
void StreamPlugin::StreamIn(istream &s) { | |||||
int version; | |||||
s >> version; | |||||
void StreamPlugin::Stop() | |||||
{ | |||||
if (m_Mode==STOPM) return; | |||||
m_Pitch=m_StreamDesc.PitchMod; | |||||
m_StreamDesc.PitchMod=0.0f; | |||||
m_Mode=STOPM; | |||||
s >> m_GUIArgs.Volume >> m_GUIArgs.PitchMod; | |||||
int size; | |||||
s >> size; | |||||
if (size > 255) size = 255; | |||||
s.ignore (1); | |||||
s.get (m_GUIArgs.FileName, size+1); | |||||
if (m_GUIArgs.FileName != "None") OpenStream (); | |||||
// is it really necessary to load this lot?? | |||||
s >> m_Pos; | |||||
s >> m_StreamPos; | |||||
s >> m_GlobalPos; | |||||
s >> m_Pitch; | |||||
} | } | ||||
float StreamPlugin::GetLength() | |||||
{ | |||||
if (m_StreamDesc.Stereo) return (m_File.GetSize()/(float)m_StreamDesc.SampleRate)*0.5f; | |||||
else return m_File.GetSize()/(float)m_StreamDesc.SampleRate; | |||||
} | |||||
void StreamPlugin::SetTime(float t) | |||||
{ | |||||
m_GlobalPos=m_StreamDesc.SampleRate*t; | |||||
m_StreamPos=(int)(m_StreamDesc.SampleRate*t); | |||||
m_Pos=m_SampleSize; | |||||
} | |||||
@@ -14,7 +14,7 @@ | |||||
* You should have received a copy of the GNU General Public License | * You should have received a copy of the GNU General Public License | ||||
* along with this program; if not, write to the Free Software | * along with this program; if not, write to the Free Software | ||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||||
*/ | |||||
*/ | |||||
#include "../SpiralPlugin.h" | #include "../SpiralPlugin.h" | ||||
#include "../../RiffWav.h" | #include "../../RiffWav.h" | ||||
@@ -23,76 +23,46 @@ | |||||
#ifndef StreamPLUGIN | #ifndef StreamPLUGIN | ||||
#define StreamPLUGIN | #define StreamPLUGIN | ||||
static const int NUDGESIZE=44100/4; | |||||
struct SampleDesc | |||||
{ | |||||
string Pathname; | |||||
class StreamPlugin : public SpiralPlugin { | |||||
public: | |||||
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); | |||||
enum GUICommands { NONE, SET_TIME, LOAD, RESTART, STOP, PLAY }; | |||||
// has to be defined in the plugin | |||||
virtual void UpdateGUI() { Fl::check(); } | |||||
float GetVolume (void) { return m_GUIArgs.Volume; } | |||||
float GetPitch (void) { return m_GUIArgs.PitchMod; } | |||||
private: | |||||
struct GUIArgs { | |||||
float Volume; | float Volume; | ||||
float Pitch; | |||||
float PitchMod; | float PitchMod; | ||||
bool Loop; | |||||
int Note; | |||||
bool TriggerUp; | |||||
float SamplePos; | |||||
int SampleRate; | |||||
bool Stereo; | |||||
}; | |||||
class StreamPlugin : public SpiralPlugin | |||||
{ | |||||
public: | |||||
enum Mode{PLAYM,STOPM}; | |||||
enum GUICommands{NONE,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); | |||||
// has to be defined in the plugin | |||||
virtual void UpdateGUI() { Fl::check(); } | |||||
void OpenStream(const string &Name); | |||||
void SetVolume(float s) { m_StreamDesc.Volume=s; } | |||||
float GetVolume() { return m_StreamDesc.Volume; } | |||||
void SetPitch(float s) { m_StreamDesc.PitchMod=s; } | |||||
float GetPitch() { return m_StreamDesc.PitchMod; } | |||||
void SetLoop(bool s) { m_StreamDesc.Loop=s; } | |||||
bool GetLoop() { return m_StreamDesc.Loop; } | |||||
float GetLength(); | |||||
float GetTime() { return m_GlobalPos/(float)m_StreamDesc.SampleRate; } | |||||
void SetTime(float t); | |||||
void Nudge() { m_Pos-=NUDGESIZE; } | |||||
void Restart(); | |||||
void Play(); | |||||
void Stop(); | |||||
private: | |||||
WavFile m_File; | |||||
Sample m_SampleL; | |||||
Sample m_SampleR; | |||||
SampleDesc m_StreamDesc; | |||||
int m_SampleSize; | |||||
float m_Pos; | |||||
int m_StreamPos; | |||||
float m_GlobalPos; | |||||
float m_Pitch; | |||||
Mode m_Mode; | |||||
char m_FileNameArg[256]; | |||||
float m_TimeArg; | |||||
float m_TimeOut; | |||||
float m_MaxTime; | |||||
char FileName[256]; | |||||
float Time; | |||||
float TimeOut; | |||||
float MaxTime; | |||||
}; | |||||
GUIArgs m_GUIArgs; | |||||
WavFile m_File; | |||||
Sample m_SampleL, m_SampleR; | |||||
int m_SampleRate, m_SampleSize, m_StreamPos; | |||||
float m_GlobalPos, m_Pitch, m_SamplePos, m_Pos; | |||||
enum Mode { PLAYM, STOPM }; | |||||
Mode m_Mode; | |||||
// Internal functions | |||||
float GetTime (void) { return m_GlobalPos / (float)m_SampleRate; } | |||||
float GetLength (void); | |||||
// Commands | |||||
void SetTime (void); | |||||
void OpenStream (void); | |||||
void Restart (void) { m_StreamPos = 0; m_GlobalPos = 0; } | |||||
void Stop (void) { m_Mode = STOPM; } | |||||
void Play (void) { m_Mode = PLAYM; } | |||||
}; | }; | ||||
#endif | #endif |
@@ -14,7 +14,7 @@ | |||||
* You should have received a copy of the GNU General Public License | * You should have received a copy of the GNU General Public License | ||||
* along with this program; if not, write to the Free Software | * along with this program; if not, write to the Free Software | ||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||||
*/ | |||||
*/ | |||||
#include "StreamPluginGUI.h" | #include "StreamPluginGUI.h" | ||||
#include <FL/fl_draw.h> | #include <FL/fl_draw.h> | ||||
@@ -24,86 +24,17 @@ | |||||
static const int GUI_COLOUR = 179; | static const int GUI_COLOUR = 179; | ||||
static const int GUIBG_COLOUR = 144; | static const int GUIBG_COLOUR = 144; | ||||
static const int GUIBG2_COLOUR = 145; | static const int GUIBG2_COLOUR = 145; | ||||
char PitchLabel[256]; | |||||
char PitchLabel[256]; | |||||
//////////////////////////////////////////// | //////////////////////////////////////////// | ||||
StreamPluginGUI::StreamPluginGUI(int w, int h,StreamPlugin *o,ChannelHandler *ch,const HostInfo *Info) : | StreamPluginGUI::StreamPluginGUI(int w, int h,StreamPlugin *o,ChannelHandler *ch,const HostInfo *Info) : | ||||
SpiralPluginGUI(w,h,o,ch) | |||||
{ | |||||
m_PitchValue=1.0f; | |||||
m_TempPitch=1.0f; | |||||
m_Load = new Fl_Button(2, 130, 30, 30, "Load"); | |||||
m_Load->labelsize(9); | |||||
m_Load->callback((Fl_Callback*)cb_Load); | |||||
add(m_Load); | |||||
int sx=32; | |||||
m_ToStart = new Fl_Button(sx, 130, 30, 30, "@|<"); | |||||
m_ToStart->labelsize(10); | |||||
m_ToStart->labeltype(FL_SYMBOL_LABEL); | |||||
m_ToStart->callback((Fl_Callback*)cb_ToStart); | |||||
add(m_ToStart); | |||||
m_Stop = new Fl_Button(sx+30, 130, 30, 30, "@||"); | |||||
m_Stop->labelsize(10); | |||||
m_Stop->labeltype(FL_SYMBOL_LABEL); | |||||
m_Stop->callback((Fl_Callback*)cb_Stop); | |||||
add(m_Stop); | |||||
m_Play = new Fl_Button(sx+60, 130, 30, 30, "@>"); | |||||
m_Play->labelsize(10); | |||||
m_Play->labeltype(FL_SYMBOL_LABEL); | |||||
m_Play->callback((Fl_Callback*)cb_Play); | |||||
add(m_Play); | |||||
m_Div = new Fl_Button(sx+90, 130, 30, 30, "/2"); | |||||
m_Div->labelsize(9); | |||||
m_Div->callback((Fl_Callback*)cb_Div); | |||||
add(m_Div); | |||||
m_Reset = new Fl_Button(sx+120, 130, 30, 30, "Reset"); | |||||
m_Reset->labelsize(9); | |||||
m_Reset->callback((Fl_Callback*)cb_Reset); | |||||
add(m_Reset); | |||||
m_Loop = new Fl_Button(sx+150, 130, 30, 30, "X2"); | |||||
m_Loop->labelsize(9); | |||||
m_Loop->callback((Fl_Callback*)cb_Loop); | |||||
add(m_Loop); | |||||
m_Nudge = new Fl_Repeat_Button(sx+180, 130, 30, 30, "Nudge"); | |||||
m_Nudge->labelsize(9); | |||||
m_Nudge->callback((Fl_Callback*)cb_Nudge); | |||||
add(m_Nudge); | |||||
m_Volume = new Fl_Knob (180, 15, 50, 50, "Volume"); | |||||
m_Volume->color(GUI_COLOUR); | |||||
m_Volume->type(Fl_Knob::LINELIN); | |||||
m_Volume->labelsize(10); | |||||
m_Volume->maximum(2); | |||||
m_Volume->step(0.001); | |||||
m_Volume->value(1); | |||||
m_Volume->callback((Fl_Callback*)cb_Volume); | |||||
add(m_Volume); | |||||
m_Pitch = new Fl_Slider(5,85,235,20, ""); | |||||
m_Pitch->type(FL_HORIZONTAL); | |||||
m_Pitch->align(FL_ALIGN_INSIDE | FL_ALIGN_RIGHT); | |||||
m_Pitch->labelsize(10); | |||||
m_Pitch->labelcolor(GUI_COLOUR); | |||||
m_Pitch->maximum(20); | |||||
m_Pitch->step(0.001); | |||||
sprintf(PitchLabel,"%1.3f ",1.0); | |||||
m_Pitch->label(PitchLabel); | |||||
m_Pitch->value(11); | |||||
m_Pitch->callback((Fl_Callback*)cb_Pitch); | |||||
add(m_Pitch); | |||||
for (int dis=0; dis<6; dis++) { | |||||
SpiralPluginGUI(w,h,o,ch), | |||||
m_PitchValue (1.0f) | |||||
{ | |||||
// 7 seg displays | |||||
for (int dis=0; dis<6; dis++) { | |||||
m_Display[dis] = new Fl_SevenSeg (5 + 28*dis, 20, 28, 60); | m_Display[dis] = new Fl_SevenSeg (5 + 28*dis, 20, 28, 60); | ||||
m_Display[dis] -> bar_width (4); | m_Display[dis] -> bar_width (4); | ||||
m_Display[dis] -> color (FL_WHITE); | m_Display[dis] -> color (FL_WHITE); | ||||
@@ -111,160 +42,252 @@ SpiralPluginGUI(w,h,o,ch) | |||||
if (dis > 0 && dis % 2 == 0) m_Display[dis] -> dp (colon); | if (dis > 0 && dis % 2 == 0) m_Display[dis] -> dp (colon); | ||||
add (m_Display[dis]); | add (m_Display[dis]); | ||||
} | } | ||||
// volume control | |||||
m_Volume = new Fl_Knob (180, 15, 50, 50, "Volume"); | |||||
m_Volume->color (GUI_COLOUR); | |||||
m_Volume->type (Fl_Knob::LINELIN); | |||||
m_Volume->labelsize (10); | |||||
m_Volume->maximum (2); | |||||
m_Volume->step (0.001); | |||||
m_Volume->value (1); | |||||
m_Volume->callback ((Fl_Callback*)cb_Volume); | |||||
add (m_Volume); | |||||
// pitch indicator | |||||
m_Pitch = new Fl_Slider (5, 85, 235, 20, ""); | |||||
m_Pitch->type (FL_HORIZONTAL); | |||||
m_Pitch->align (FL_ALIGN_INSIDE | FL_ALIGN_RIGHT); | |||||
m_Pitch->labelsize (10); | |||||
m_Pitch->labelcolor (GUI_COLOUR); | |||||
m_Pitch->maximum (20); | |||||
m_Pitch->step (0.001); | |||||
UpdatePitch (true, false, false); | |||||
m_Pitch->callback ((Fl_Callback*)cb_Pitch); | |||||
add (m_Pitch); | |||||
// position indicator | |||||
m_Pos = new Fl_Slider (5, 108, 235, 20, ""); | |||||
m_Pos->type (FL_HORIZONTAL); | |||||
m_Pos->maximum (1); | |||||
m_Pos->callback ((Fl_Callback*)cb_Pos); | |||||
add (m_Pos); | |||||
// load btn | |||||
m_Load = new Fl_Button (2, 130, 30, 30, "Load"); | |||||
m_Load->labelsize (9); | |||||
m_Load->callback ((Fl_Callback*)cb_Load); | |||||
add (m_Load); | |||||
// reset btn | |||||
m_ToStart = new Fl_Button (32, 130, 30, 30, "@|<"); | |||||
m_ToStart->labelsize (10); | |||||
m_ToStart->labeltype (FL_SYMBOL_LABEL); | |||||
m_ToStart->callback ((Fl_Callback*)cb_ToStart); | |||||
add (m_ToStart); | |||||
// stop btn | |||||
m_Stop = new Fl_Button (62, 130, 30, 30, "@||"); | |||||
m_Stop->labelsize (10); | |||||
m_Stop->labeltype (FL_SYMBOL_LABEL); | |||||
m_Stop->callback ((Fl_Callback*)cb_Stop); | |||||
add (m_Stop); | |||||
// play btn | |||||
m_Play = new Fl_Button (92, 130, 30, 30, "@>"); | |||||
m_Play->labelsize (10); | |||||
m_Play->labeltype (FL_SYMBOL_LABEL); | |||||
m_Play->callback ((Fl_Callback*)cb_Play); | |||||
add (m_Play); | |||||
// 1/2 speed btn | |||||
m_Div = new Fl_Button (122, 130, 30, 30, "/2"); | |||||
m_Div->labelsize (9); | |||||
m_Div->callback ((Fl_Callback*)cb_Div); | |||||
add (m_Div); | |||||
// normal speed btn | |||||
m_Reset = new Fl_Button (152, 130, 30, 30, "Reset"); | |||||
m_Reset->labelsize (9); | |||||
m_Reset->callback ((Fl_Callback*)cb_Reset); | |||||
add (m_Reset); | |||||
// dbl speed btn | |||||
m_Dbl = new Fl_Button (182, 130, 30, 30, "X2"); | |||||
m_Dbl->labelsize (9); | |||||
m_Dbl->callback ((Fl_Callback*)cb_Dbl); | |||||
add (m_Dbl); | |||||
// nudge btn | |||||
m_Nudge = new Fl_Repeat_Button (212, 130, 30, 30, "Nudge"); | |||||
m_Nudge->labelsize (9); | |||||
m_Nudge->callback ((Fl_Callback*)cb_Nudge); | |||||
add (m_Nudge); | |||||
} | |||||
StreamPluginGUI::~StreamPluginGUI () { | |||||
} | |||||
m_Pos = new Fl_Slider(5,108,235,20,""); | |||||
m_Pos->type(FL_HORIZONTAL); | |||||
m_Pos->maximum(1); | |||||
m_Pos->callback((Fl_Callback*)cb_Pos); | |||||
add(m_Pos); | |||||
// Update signalled from plugin | |||||
end(); | |||||
void StreamPluginGUI::Update() { | |||||
float t=m_GUICH->GetFloat ("TimeOut"); | |||||
m_Pos->value (t); | |||||
m_Display[5]->value ((int)(t*100) % 10); | |||||
m_Display[4]->value ((int)(t*10) % 10); | |||||
m_Display[3]->value ((int)t % 10); | |||||
m_Display[2]->value ((int)(t/10) % 6); | |||||
m_Display[1]->value ((int)(t/60) % 10); | |||||
m_Display[0]->value ((int)(t/600) % 10); | |||||
redraw(); | |||||
SetMaxTime (m_GUICH->GetFloat ("MaxTime")); | |||||
} | } | ||||
StreamPluginGUI::~StreamPluginGUI() | |||||
{ | |||||
// Update GUI on load | |||||
void StreamPluginGUI::UpdateValues (SpiralPlugin *o) { | |||||
StreamPlugin *Plugin = (StreamPlugin*)o; | |||||
m_Volume->value (Plugin->GetVolume()); | |||||
m_Pitch->value (Plugin->GetPitch()+10); | |||||
} | } | ||||
void StreamPluginGUI::Update() | |||||
{ | |||||
float t=m_GUICH->GetFloat("TimeOut"); | |||||
// volume | |||||
m_Pos->value(t); | |||||
inline void StreamPluginGUI::cb_Volume_i (Fl_Knob* o, void* v) { | |||||
m_GUICH->Set ("Volume", (float)o->value ()); | |||||
} | |||||
m_Display[5]->value((int)(t*100)%10); | |||||
m_Display[4]->value((int)(t*10)%10); | |||||
void StreamPluginGUI::cb_Volume (Fl_Knob* o, void* v) { | |||||
((StreamPluginGUI*)(o->parent ()))->cb_Volume_i (o, v); | |||||
} | |||||
m_Display[3]->value((int)t%10); | |||||
m_Display[2]->value((int)(t/10)%6); | |||||
// pitch | |||||
m_Display[1]->value((int)(t/60)%10); | |||||
m_Display[0]->value((int)(t/600)%10); | |||||
redraw(); | |||||
void StreamPluginGUI::UpdatePitch (bool UpdateIt = true, bool DrawIt = true, bool SendIt = true) { | |||||
sprintf( PitchLabel, "%1.3f ", m_PitchValue); | |||||
m_Pitch->label (PitchLabel); | |||||
if (UpdateIt) m_Pitch->value (m_PitchValue+10); | |||||
if (DrawIt) redraw(); | |||||
if (SendIt) m_GUICH->Set ("Pitch", m_PitchValue); | |||||
} | |||||
SetMaxTime(m_GUICH->GetFloat("MaxTime")); | |||||
inline void StreamPluginGUI::cb_Pitch_i (Fl_Slider* o, void* v) { | |||||
m_PitchValue=o->value()-10; | |||||
UpdatePitch (false, false); | |||||
} | |||||
void StreamPluginGUI::cb_Pitch (Fl_Slider* o, void* v) { | |||||
((StreamPluginGUI*)(o->parent ()))->cb_Pitch_i(o,v); | |||||
} | } | ||||
void StreamPluginGUI::UpdateValues(SpiralPlugin *o) | |||||
{ | |||||
StreamPlugin *Plugin = (StreamPlugin*)o; | |||||
// position | |||||
inline void StreamPluginGUI::cb_Pos_i (Fl_Slider* o, void* v) { | |||||
m_GUICH->Set ("Time",(float)o->value()); | |||||
m_GUICH->SetCommand (StreamPlugin::SET_TIME); | |||||
} | |||||
m_Volume->value(Plugin->GetVolume()); | |||||
m_Pitch->value(Plugin->GetPitch()+10); | |||||
m_Loop->value(Plugin->GetLoop()); | |||||
void StreamPluginGUI::cb_Pos (Fl_Slider* o, void* v) { | |||||
((StreamPluginGUI*)(o->parent ()))->cb_Pos_i (o, v); | |||||
} | } | ||||
inline void StreamPluginGUI::cb_Load_i(Fl_Button* o, void* v) | |||||
{ | |||||
char *fn=fl_file_chooser("Load a sample", "{*.wav,*.WAV}", NULL); | |||||
if (fn && fn!='\0') | |||||
{ | |||||
strcpy(m_TextBuf,fn); | |||||
m_GUICH->SetData("FileName",(void*)m_TextBuf); | |||||
m_GUICH->SetCommand(StreamPlugin::LOAD); | |||||
m_GUICH->Wait(); | |||||
SetMaxTime(m_GUICH->GetFloat("MaxTime")); | |||||
// load | |||||
inline void StreamPluginGUI::cb_Load_i (Fl_Button* o, void* v) { | |||||
char *fn=fl_file_chooser("Load a sample", "{*.wav,*.WAV}", NULL); | |||||
if (fn && fn!='\0') { | |||||
strcpy (m_TextBuf, fn); | |||||
m_GUICH->SetData ("FileName", (void*)m_TextBuf); | |||||
m_GUICH->SetCommand (StreamPlugin::LOAD); | |||||
m_GUICH->Wait(); | |||||
SetMaxTime (m_GUICH->GetFloat ("MaxTime")); | |||||
} | } | ||||
} | } | ||||
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_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_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_Load (Fl_Button* o, void* v) { | |||||
((StreamPluginGUI*)(o->parent ()))->cb_Load_i (o, v); | |||||
} | } | ||||
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) //Why is this function named so. | |||||
{ | |||||
m_PitchValue*=2.0f; | |||||
m_GUICH->Set("Pitch",m_PitchValue); | |||||
sprintf(PitchLabel,"%1.3f ",m_PitchValue); | |||||
m_Pitch->label(PitchLabel); | |||||
m_Pitch->value(m_PitchValue+10); | |||||
redraw(); | |||||
// restart | |||||
inline void StreamPluginGUI::cb_ToStart_i (Fl_Button* o, void* v) { | |||||
m_GUICH->SetCommand (StreamPlugin::RESTART); | |||||
} | } | ||||
void StreamPluginGUI::cb_Loop(Fl_Button* o, void* v) | |||||
{ ((StreamPluginGUI*)(o->parent()))->cb_Loop_i(o,v);} | |||||
inline void StreamPluginGUI::cb_Div_i(Fl_Button* o, void* v) | |||||
{ | |||||
m_PitchValue/=2.0f; | |||||
m_GUICH->Set("Pitch",m_PitchValue); | |||||
sprintf(PitchLabel,"%1.3f ",m_PitchValue); | |||||
m_Pitch->label(PitchLabel); | |||||
m_Pitch->value(m_PitchValue+10); | |||||
redraw(); | |||||
void StreamPluginGUI::cb_ToStart (Fl_Button* o, void* v) { | |||||
((StreamPluginGUI*)(o->parent ()))->cb_ToStart_i (o, v); | |||||
} | } | ||||
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_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_TempPitch=m_PitchValue; | |||||
m_PitchValue=0; | |||||
m_GUICH->Set("Pitch",m_PitchValue); | |||||
// stop | |||||
inline void StreamPluginGUI::cb_Stop_i (Fl_Button* o, void* v) { | |||||
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_PitchValue=m_TempPitch; | |||||
m_GUICH->Set("Pitch",m_PitchValue); | |||||
void StreamPluginGUI::cb_Stop (Fl_Button* o, void* v) { | |||||
((StreamPluginGUI*)(o->parent ()))->cb_Stop_i (o, v); | |||||
} | } | ||||
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_GUICH->Set("Pitch",1.0f); | |||||
sprintf(PitchLabel,"%1.3f ",1.0); | |||||
m_Pitch->label(PitchLabel); | |||||
m_Pitch->value(11); | |||||
m_PitchValue=1.0f; | |||||
redraw(); | |||||
// play | |||||
inline void StreamPluginGUI::cb_Play_i (Fl_Button* o, void* v) { | |||||
m_GUICH->SetCommand (StreamPlugin::PLAY); | |||||
} | } | ||||
void StreamPluginGUI::cb_Reset(Fl_Button* o, void* v) | |||||
{ ((StreamPluginGUI*)(o->parent()))->cb_Reset_i(o,v);} | |||||
inline void StreamPluginGUI::cb_Nudge_i(Fl_Button* o, void* v) | |||||
{ | |||||
m_GUICH->SetCommand(StreamPlugin::NUDGE); | |||||
void StreamPluginGUI::cb_Play (Fl_Button* o, void* v) { | |||||
((StreamPluginGUI*)(o->parent ()))->cb_Play_i (o, v); | |||||
} | } | ||||
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_GUICH->Set("Time",(float)o->value()); | |||||
m_GUICH->SetCommand(StreamPlugin::SET_TIME); | |||||
// div 2 | |||||
inline void StreamPluginGUI::cb_Div_i (Fl_Button* o, void* v) { | |||||
m_PitchValue /= 2.0f; | |||||
UpdatePitch (); | |||||
} | |||||
void StreamPluginGUI::cb_Div (Fl_Button* o, void* v) { | |||||
((StreamPluginGUI*)(o->parent()))->cb_Div_i (o, v); | |||||
} | } | ||||
void StreamPluginGUI::cb_Pos(Fl_Slider* o, void* v) | |||||
{ ((StreamPluginGUI*)(o->parent()))->cb_Pos_i(o,v);} | |||||
const string StreamPluginGUI::GetHelpText(const string &loc){ | |||||
return string("") | |||||
+ "If you want to mix whole tracks and add effects etc, then this is the\n" | |||||
+ "way to do it. The StreamPlugin loads a wav in bit by bit, so it doesn't\n" | |||||
// reset | |||||
inline void StreamPluginGUI::cb_Reset_i (Fl_Button* o, void* v) { | |||||
m_PitchValue = 1.0f; | |||||
UpdatePitch (); | |||||
} | |||||
void StreamPluginGUI::cb_Reset (Fl_Button* o, void* v) { | |||||
((StreamPluginGUI*)(o->parent ()))->cb_Reset_i (o, v); | |||||
} | |||||
// mul 2 | |||||
inline void StreamPluginGUI::cb_Dbl_i (Fl_Button* o, void* v) { | |||||
m_PitchValue *= 2.0f; | |||||
UpdatePitch (); | |||||
} | |||||
void StreamPluginGUI::cb_Dbl (Fl_Button* o, void* v) { | |||||
((StreamPluginGUI*)(o->parent ()))->cb_Dbl_i (o, v); | |||||
} | |||||
//nudge | |||||
inline void StreamPluginGUI::cb_Nudge_i (Fl_Button* o, void* v) { | |||||
int NudgeSize = 1; | |||||
if (m_PitchValue < 0) NudgeSize = -NudgeSize; | |||||
float P = m_Pos->value() + NudgeSize; | |||||
if (P < 0) P = 0; | |||||
if (P > m_Pos->maximum()) P = m_Pos->maximum(); | |||||
m_Pos->value (P); | |||||
m_GUICH->Set ("Time", P); | |||||
m_GUICH->SetCommand (StreamPlugin::SET_TIME); | |||||
} | |||||
void StreamPluginGUI::cb_Nudge (Fl_Button* o, void* v) { | |||||
((StreamPluginGUI*)(o->parent ()))->cb_Nudge_i (o, v); | |||||
} | |||||
// help text | |||||
const string StreamPluginGUI::GetHelpText (const string &loc){ | |||||
return string("") | |||||
+ "If you want to mix whole tracks and add effects etc, then this is the\n" | |||||
+ "way to do it. The StreamPlugin loads a wav in bit by bit, so it doesn't\n" | |||||
+ "use much memory. The track can be pitched for mixing.\n" | + "use much memory. The track can be pitched for mixing.\n" | ||||
+ "Operates pretty much like a media player such as XMMS (only wav\n" | + "Operates pretty much like a media player such as XMMS (only wav\n" | ||||
+ "format though).\n\n" | + "format though).\n\n" | ||||
+ "Connect the finish trigger to the stop trigger to play the wav only\nonce.\n\n" | |||||
+ "Note: Not realtime safe, if you're using JACK, use a client such as\n" | + "Note: Not realtime safe, if you're using JACK, use a client such as\n" | ||||
+ "alsaplayer."; | + "alsaplayer."; | ||||
} | } | ||||
@@ -14,90 +14,71 @@ | |||||
* You should have received a copy of the GNU General Public License | * You should have received a copy of the GNU General Public License | ||||
* along with this program; if not, write to the Free Software | * along with this program; if not, write to the Free Software | ||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||||
*/ | |||||
*/ | |||||
#include <FL/Fl.H> | #include <FL/Fl.H> | ||||
#include <FL/Fl_Window.H> | #include <FL/Fl_Window.H> | ||||
#include <FL/Fl_Group.H> | #include <FL/Fl_Group.H> | ||||
#include <FL/Fl_Counter.H> | #include <FL/Fl_Counter.H> | ||||
#include <FL/Fl_Slider.H> | #include <FL/Fl_Slider.H> | ||||
#include <FL/Fl_Output.H> | |||||
#include <FL/Fl_Repeat_Button.H> | #include <FL/Fl_Repeat_Button.H> | ||||
#include "StreamPlugin.h" | #include "StreamPlugin.h" | ||||
#include "../SpiralPluginGUI.h" | #include "../SpiralPluginGUI.h" | ||||
#include "../Widgets/Fl_Knob.H" | |||||
#include "../Widgets/Fl_SevenSeg.H" | #include "../Widgets/Fl_SevenSeg.H" | ||||
#include "../Widgets/Fl_Knob.H" | |||||
#ifndef MixerGUI | |||||
#define MixerGUI | |||||
class StreamPluginGUI; | |||||
class StreamPluginGUI : public SpiralPluginGUI | |||||
{ | |||||
public: | |||||
StreamPluginGUI(int w, int h, StreamPlugin *o,ChannelHandler *ch,const HostInfo *Info); | |||||
virtual ~StreamPluginGUI(); | |||||
virtual void Update(); | |||||
virtual void UpdateValues(SpiralPlugin *o); | |||||
//void SetTime(); | |||||
void SetMaxTime(float t) { m_Pos->maximum(t); } | |||||
protected: | |||||
const string GetHelpText(const string &loc); | |||||
private: | |||||
Fl_Button* m_Load; | |||||
Fl_Knob* m_Volume; | |||||
Fl_Slider* m_Pitch; | |||||
Fl_Button* m_Loop; | |||||
Fl_Button* m_ToStart; | |||||
Fl_Button* m_Stop; | |||||
Fl_Button* m_Play; | |||||
Fl_Button* m_Reset; | |||||
Fl_Button* m_Div; | |||||
Fl_Repeat_Button* m_Nudge; | |||||
Fl_Output* m_Pout; | |||||
Fl_SevenSeg* m_Display[6]; | |||||
Fl_Slider* m_Pos; | |||||
char m_TextBuf[256]; | |||||
float m_PitchValue; | |||||
float m_TempPitch; | |||||
//// Callbacks //// | |||||
inline void cb_Load_i(Fl_Button* o, void* v); | |||||
static void cb_Load(Fl_Button* o, void* v); | |||||
inline void cb_Volume_i(Fl_Knob* o, void* v); | |||||
static void cb_Volume(Fl_Knob* o, void* v); | |||||
inline void cb_Pitch_i(Fl_Slider* o, void* v); | |||||
static void cb_Pitch(Fl_Slider* o, void* v); | |||||
inline void cb_Loop_i(Fl_Button* o, void* v); | |||||
static void cb_Loop(Fl_Button* o, void* v); | |||||
inline void cb_Div_i(Fl_Button* o, void* v); | |||||
static void cb_Div(Fl_Button* o, void* v); | |||||
inline void cb_ToStart_i(Fl_Button* o, void* v); | |||||
static void cb_ToStart(Fl_Button* o, void* v); | |||||
inline void cb_Stop_i(Fl_Button* o, void* v); | |||||
static void cb_Stop(Fl_Button* o, void* v); | |||||
inline void cb_Play_i(Fl_Button* o, void* v); | |||||
static void cb_Play(Fl_Button* o, void* v); | |||||
inline void cb_Reset_i(Fl_Button* o, void* v); | |||||
static void cb_Reset(Fl_Button* o, void* v); | |||||
inline void cb_Nudge_i(Fl_Button* o, void* v); | |||||
static void cb_Nudge(Fl_Button* o, void* v); | |||||
inline void cb_Pos_i(Fl_Slider* o, void* v); | |||||
static void cb_Pos(Fl_Slider* o, void* v); | |||||
#ifndef StreamGUI | |||||
#define StreamGUI | |||||
class StreamPluginGUI : public SpiralPluginGUI { | |||||
public: | |||||
StreamPluginGUI(int w, int h, StreamPlugin *o, ChannelHandler *ch, const HostInfo *Info); | |||||
virtual ~StreamPluginGUI (); | |||||
virtual void Update (); | |||||
virtual void UpdateValues (SpiralPlugin *o); | |||||
protected: | |||||
const string GetHelpText (const string &loc); | |||||
private: | |||||
float m_PitchValue; | |||||
char m_TextBuf[256]; | |||||
void SetMaxTime (float t) { m_Pos->maximum(t); } | |||||
void UpdatePitch (bool UpdateIt = true, bool DrawIt = true, bool SendIt = true); | |||||
// Widgets | |||||
Fl_SevenSeg* m_Display[6]; | |||||
Fl_Knob* m_Volume; | |||||
Fl_Slider* m_Pitch; | |||||
Fl_Slider* m_Pos; | |||||
Fl_Button* m_Load; | |||||
Fl_Button* m_ToStart; | |||||
Fl_Button* m_Stop; | |||||
Fl_Button* m_Play; | |||||
Fl_Button* m_Div; | |||||
Fl_Button* m_Reset; | |||||
Fl_Button* m_Dbl; | |||||
Fl_Repeat_Button* m_Nudge; | |||||
//// Callbacks //// | |||||
inline void cb_Volume_i (Fl_Knob* o, void* v); | |||||
static void cb_Volume (Fl_Knob* o, void* v); | |||||
inline void cb_Pitch_i (Fl_Slider* o, void* v); | |||||
static void cb_Pitch (Fl_Slider* o, void* v); | |||||
inline void cb_Pos_i (Fl_Slider* o, void* v); | |||||
static void cb_Pos (Fl_Slider* o, void* v); | |||||
inline void cb_Load_i (Fl_Button* o, void* v); | |||||
static void cb_Load (Fl_Button* o, void* v); | |||||
inline void cb_ToStart_i (Fl_Button* o, void* v); | |||||
static void cb_ToStart (Fl_Button* o, void* v); | |||||
inline void cb_Stop_i (Fl_Button* o, void* v); | |||||
static void cb_Stop (Fl_Button* o, void* v); | |||||
inline void cb_Play_i (Fl_Button* o, void* v); | |||||
static void cb_Play (Fl_Button* o, void* v); | |||||
inline void cb_Div_i (Fl_Button* o, void* v); | |||||
static void cb_Div (Fl_Button* o, void* v); | |||||
inline void cb_Reset_i (Fl_Button* o, void* v); | |||||
static void cb_Reset (Fl_Button* o, void* v); | |||||
inline void cb_Dbl_i (Fl_Button* o, void* v); | |||||
static void cb_Dbl (Fl_Button* o, void* v); | |||||
inline void cb_Nudge_i (Fl_Button* o, void* v); | |||||
static void cb_Nudge (Fl_Button* o, void* v); | |||||
}; | }; | ||||
#endif | #endif |