| @@ -0,0 +1,49 @@ | |||
| /* 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 "WaveChooser.h" | |||
| #include <string> | |||
| #include <FL/fl_file_chooser.h> | |||
| #include "../../../config.h" | |||
| #ifdef USE_LIBSNDFILE | |||
| #include <sndfile.h> | |||
| #endif | |||
| char *WaveFileName (void) { | |||
| string AvailFmt; | |||
| #ifdef USE_LIBSNDFILE | |||
| string FmtName; | |||
| SF_FORMAT_INFO info; | |||
| int major_count, m, p; | |||
| sf_command (NULL, SFC_GET_FORMAT_MAJOR_COUNT, &major_count, sizeof (int)); | |||
| for (m = 0 ; m < major_count ; m++) { | |||
| info.format = m; | |||
| sf_command (NULL, SFC_GET_FORMAT_MAJOR, &info, sizeof (info)); | |||
| FmtName = info.name; | |||
| while ((p=FmtName.find ('(')) >= 0 ) FmtName.replace (p, 1, '['); | |||
| while ((p=FmtName.find (')')) >= 0 ) FmtName.replace (p, 1, ']'); | |||
| if (!AvailFmt.empty()) AvailFmt += '\t'; | |||
| AvailFmt += (string)FmtName + (string)" (*." + (string)info.extension + ')'; | |||
| } | |||
| #else | |||
| AvailFmt = "{*.wav,*.WAV}"; | |||
| #endif | |||
| char *fn=fl_file_chooser("Load a sample", AvailFmt.c_str(), NULL); | |||
| return fn; | |||
| } | |||
| @@ -0,0 +1,24 @@ | |||
| /* 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. | |||
| */ | |||
| #ifndef WaveChooser | |||
| #define WaveChooser | |||
| char *WaveFileName (void); | |||
| #endif | |||
| @@ -89,16 +89,16 @@ SpiralPluginGUI(w,h,o,ch) | |||
| m_Remove->box (FL_PLASTIC_UP_BOX); | |||
| m_Remove->color (m_GUIColour); | |||
| m_Remove->type(0); | |||
| m_Remove->labelsize(2); | |||
| m_Remove->labelsize (10); | |||
| m_Remove->selection_color (m_GUIColour); | |||
| m_Remove->callback((Fl_Callback*)cb_Remove, this); | |||
| add(m_Remove); | |||
| m_Add = new Fl_Button(30,15,25,25,"+"); | |||
| m_Add->box (FL_PLASTIC_UP_BOX); | |||
| m_Add->color (m_GUIColour); | |||
| m_Add->type(0); | |||
| m_Add->labelsize(2); | |||
| m_Add->labelsize (10); | |||
| m_Add->selection_color (m_GUIColour); | |||
| m_Add->callback((Fl_Callback*)cb_Add, this); | |||
| add(m_Add); | |||
| @@ -45,6 +45,7 @@ HEADERS = PoshSamplerPlugin.h \ | |||
| ../../ChannelHandler.h \ | |||
| ../../Sample.h \ | |||
| ../../RiffWav.h \ | |||
| ../GUI/WaveChooser.h \ | |||
| ../Widgets/Fl_Knob.H \ | |||
| ../../../GUI/Widgets/SpiralGUI.H | |||
| SOURCES = PoshSamplerPlugin.C \ | |||
| @@ -54,6 +55,7 @@ SOURCES = PoshSamplerPlugin.C \ | |||
| ../../ChannelHandler.C \ | |||
| ../../Sample.C \ | |||
| ../../RiffWav.C \ | |||
| ../GUI/WaveChooser.C \ | |||
| ../Widgets/Fl_Knob.cxx \ | |||
| ../../../GUI/Widgets/SpiralGUI.C | |||
| OBJECTS = PoshSamplerPlugin.o \ | |||
| @@ -63,6 +65,7 @@ OBJECTS = PoshSamplerPlugin.o \ | |||
| ../../ChannelHandler.o \ | |||
| ../../Sample.o \ | |||
| ../../RiffWav.o \ | |||
| ../GUI/WaveChooser.o \ | |||
| ../Widgets/Fl_Knob.o \ | |||
| ../../../GUI/Widgets/SpiralGUI.o | |||
| INTERFACES = | |||
| @@ -148,6 +151,9 @@ install: | |||
| ../../RiffWav.h \ | |||
| ../../Sample.h | |||
| ../GUI/WaveChooser.o: ../GUI/WaveChooser.C \ | |||
| ../GUI/WaveChooser.h | |||
| PoshSamplerPlugin.o: PoshSamplerPlugin.C \ | |||
| PoshSamplerPlugin.h \ | |||
| PoshSamplerPluginGUI.h \ | |||
| @@ -19,6 +19,7 @@ | |||
| #include "PoshSamplerPluginGUI.h" | |||
| #include <FL/fl_draw.h> | |||
| #include <FL/fl_draw.H> | |||
| #include "../GUI/WaveChooser.h" | |||
| #include <FL/fl_file_chooser.h> | |||
| using namespace std; | |||
| @@ -196,7 +197,7 @@ int Fl_WaveDisplay::handle(int event) | |||
| case 5: m_LoopEnd=MousePos; break; | |||
| } | |||
| } | |||
| if (Mousebutton==2) | |||
| { | |||
| int Dist=(DragX-xx)*((m_ViewEnd-m_ViewStart)/w()); | |||
| @@ -489,28 +490,27 @@ void PoshSamplerPluginGUI::UpdateValues(SpiralPlugin *o) | |||
| m_Volume->value(Plugin->GetVolume((int)m_SampleNum->value())); | |||
| m_Pitch->value(Plugin->GetPitch((int)m_SampleNum->value())); | |||
| m_Note->value(Plugin->GetNote((int)m_SampleNum->value())); | |||
| m_Loop->value(Plugin->GetLoop((int)m_SampleNum->value())); | |||
| m_Note->value(Plugin->GetNote((int)m_SampleNum->value())); | |||
| m_Loop->value(Plugin->GetLoop((int)m_SampleNum->value())); | |||
| m_UpdateMe=true; | |||
| m_Display->SetPlayStart(Plugin->GetPlayStart((int)m_SampleNum->value())); | |||
| m_Display->SetLoopStart(Plugin->GetLoopStart((int)m_SampleNum->value())); | |||
| m_Display->SetLoopEnd(Plugin->GetLoopEnd((int)m_SampleNum->value())); | |||
| m_Display->SetPlayStart(Plugin->GetPlayStart((int)m_SampleNum->value())); | |||
| m_Display->SetLoopStart(Plugin->GetLoopStart((int)m_SampleNum->value())); | |||
| m_Display->SetLoopEnd(Plugin->GetLoopEnd((int)m_SampleNum->value())); | |||
| m_Display->redraw(); | |||
| } | |||
| inline void PoshSamplerPluginGUI::cb_Load_i(Fl_Button* o, void* v) | |||
| { | |||
| char *fn=fl_file_chooser("Load a sample", "{*.wav,*.WAV}", NULL); | |||
| { | |||
| char *fn=WaveFileName (); | |||
| if (fn && fn!='\0') | |||
| { | |||
| strcpy(m_TextBuf,fn); | |||
| m_GUICH->SetData("Name",m_TextBuf); | |||
| m_GUICH->Set("Num",(int)m_SampleNum->value()); | |||
| m_GUICH->SetCommand(PoshSamplerPlugin::LOAD); | |||
| m_GUICH->Wait(); // wait for the sample to load | |||
| UpdateSampleDisplay((int)m_SampleNum->value()); | |||
| m_Display->redraw(); | |||
| redraw(); | |||
| @@ -524,7 +524,7 @@ inline void PoshSamplerPluginGUI::cb_Save_i(Fl_Button* o, void* v) | |||
| char *fn=fl_file_chooser("Save sample", "{*.wav,*.WAV}", NULL); | |||
| if (fn && fn!='\0') | |||
| { | |||
| { | |||
| strcpy(m_TextBuf,fn); | |||
| m_GUICH->Set("Name",m_TextBuf); | |||
| m_GUICH->Set("Num",(int)m_SampleNum->value()); | |||
| @@ -47,7 +47,8 @@ HEADERS = SpiralLoopPlugin.h \ | |||
| ../../RiffWav.h \ | |||
| Fl_Loop.h \ | |||
| Fl_Trigger.h \ | |||
| ../Widgets/Fl_Knob.H \ | |||
| ../GUI/WaveChooser.h \ | |||
| ../Widgets/Fl_Knob.H \ | |||
| ../Widgets/Fl_LED_Button.H \ | |||
| ../../../GUI/Widgets/SpiralGUI.H | |||
| SOURCES = SpiralLoopPlugin.C \ | |||
| @@ -59,6 +60,7 @@ SOURCES = SpiralLoopPlugin.C \ | |||
| ../../RiffWav.C \ | |||
| Fl_Loop.C \ | |||
| Fl_Trigger.C \ | |||
| ../GUI/WaveChooser.C \ | |||
| ../Widgets/Fl_Knob.cxx \ | |||
| ../Widgets/Fl_LED_Button.cxx \ | |||
| ../../../GUI/Widgets/SpiralGUI.C | |||
| @@ -71,6 +73,7 @@ OBJECTS = SpiralLoopPlugin.o \ | |||
| ../../RiffWav.o \ | |||
| Fl_Loop.o \ | |||
| Fl_Trigger.o \ | |||
| ../GUI/WaveChooser.o \ | |||
| ../Widgets/Fl_Knob.o \ | |||
| ../Widgets/Fl_LED_Button.o \ | |||
| ../../../GUI/Widgets/SpiralGUI.o | |||
| @@ -163,6 +166,9 @@ Fl_Trigger.o: Fl_Trigger.C \ | |||
| Fl_Trigger.h \ | |||
| Fl_Loop.h | |||
| ../GUI/WaveChooser.o: ../GUI/WaveChooser.C \ | |||
| ../GUI/WaveChooser.h | |||
| SpiralLoopPlugin.o: SpiralLoopPlugin.C \ | |||
| SpiralLoopPlugin.h \ | |||
| ../SpiralPlugin.h \ | |||
| @@ -20,6 +20,7 @@ | |||
| #include <FL/fl_draw.h> | |||
| #include <FL/fl_draw.H> | |||
| #include <FL/fl_file_chooser.h> | |||
| #include "../GUI/WaveChooser.h" | |||
| using namespace std; | |||
| @@ -348,8 +349,7 @@ void SpiralLoopPluginGUI::cb_OverDub(Fl_Button* o, void* v) | |||
| inline void SpiralLoopPluginGUI::cb_Load_i(Fl_Button* o, void* v) | |||
| { | |||
| char *fn=fl_file_chooser("Load a sample", "{*.wav,*.WAV}", NULL); | |||
| char *fn=WaveFileName (); | |||
| if (fn && fn!='\0') | |||
| { | |||
| strcpy(m_TextBuf,fn); | |||
| @@ -367,13 +367,12 @@ void SpiralLoopPluginGUI::cb_Load(Fl_Button* o, void* v) | |||
| inline void SpiralLoopPluginGUI::cb_Save_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("Name",m_TextBuf); | |||
| m_GUICH->SetCommand(SpiralLoopPlugin::SAVE); | |||
| } | |||
| } | |||
| } | |||
| void SpiralLoopPluginGUI::cb_Save(Fl_Button* o, void* v) | |||
| { ((SpiralLoopPluginGUI*)(o->parent()->parent()))->cb_Save_i(o,v); } | |||
| @@ -47,6 +47,7 @@ HEADERS = StreamPlugin.h \ | |||
| ../../RiffWav.h \ | |||
| ../Widgets/Fl_Knob.H \ | |||
| ../Widgets/Fl_SevenSeg.H \ | |||
| ../GUI/WaveChooser.h \ | |||
| ../../../GUI/Widgets/SpiralGUI.H | |||
| SOURCES = StreamPlugin.C \ | |||
| StreamPluginGUI.C \ | |||
| @@ -57,6 +58,7 @@ SOURCES = StreamPlugin.C \ | |||
| ../../RiffWav.C \ | |||
| ../Widgets/Fl_Knob.cxx \ | |||
| ../Widgets/Fl_SevenSeg.cxx \ | |||
| ../GUI/WaveChooser.C \ | |||
| ../../../GUI/Widgets/SpiralGUI.C | |||
| OBJECTS = StreamPlugin.o \ | |||
| StreamPluginGUI.o \ | |||
| @@ -67,6 +69,7 @@ OBJECTS = StreamPlugin.o \ | |||
| ../../RiffWav.o \ | |||
| ../Widgets/Fl_Knob.o \ | |||
| ../Widgets/Fl_SevenSeg.o \ | |||
| ../GUI/WaveChooser.o \ | |||
| ../../../GUI/Widgets/SpiralGUI.o | |||
| INTERFACES = | |||
| UICDECLS = | |||
| @@ -137,6 +140,9 @@ install: | |||
| ../../ChannelHandler.h \ | |||
| ../../../GUI/Widgets/SpiralGUI.H | |||
| ../GUI/WaveChooser.o: ../GUI/WaveChooser.C \ | |||
| ../GUI/WaveChooser.h | |||
| ../Widgets/Fl_Knob.o: ../Widgets/Fl_Knob.cxx \ | |||
| ../Widgets/Fl_Knob.H | |||
| @@ -21,38 +21,27 @@ | |||
| #include "SpiralIcon.xpm" | |||
| #include "../../NoteTable.h" | |||
| #include <stdio.h> | |||
| #include "../../RiffWav.h" | |||
| using namespace std; | |||
| static const float TRIG_THRESH = 0.1; | |||
| static const float BUFSECONDS = 1.0f; | |||
| extern "C" { | |||
| SpiralPlugin* SpiralPlugin_CreateInstance() | |||
| { | |||
| return new StreamPlugin; | |||
| } | |||
| char** SpiralPlugin_GetIcon() | |||
| { | |||
| return SpiralIcon_xpm; | |||
| } | |||
| SpiralPlugin* SpiralPlugin_CreateInstance() { return new StreamPlugin; } | |||
| int SpiralPlugin_GetID() | |||
| { | |||
| return 0x0119; | |||
| } | |||
| char** SpiralPlugin_GetIcon() { return SpiralIcon_xpm; } | |||
| int SpiralPlugin_GetID() { return 0x0119; } | |||
| string SpiralPlugin_GetGroupName() { return "Delay/Sampling"; } | |||
| string SpiralPlugin_GetGroupName() | |||
| { | |||
| return "Delay/Sampling"; | |||
| } | |||
| } | |||
| /////////////////////////////////////////////////////// | |||
| static const float TRIG_THRESH = 0.1; | |||
| static const float BUFSECONDS = 1.0f; | |||
| StreamPlugin::StreamPlugin() : | |||
| m_SampleRate (44100), | |||
| m_SampleSize (256), | |||
| @@ -65,22 +54,26 @@ m_Mode(STOPM) | |||
| { | |||
| m_PluginInfo.Name = "Stream"; | |||
| m_PluginInfo.Width = 245; | |||
| m_PluginInfo.Height = 165; | |||
| m_PluginInfo.Height = 160; | |||
| m_PluginInfo.NumInputs = 3; | |||
| m_PluginInfo.NumOutputs = 3; | |||
| m_PluginInfo.NumOutputs = 4; | |||
| 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_PluginInfo.PortTips.push_back ("Playing Trigger"); | |||
| m_GUIArgs.Volume = 1.0f; | |||
| m_GUIArgs.PitchMod = 1.0f; | |||
| m_GUIArgs.PlayOut = false; | |||
| strcpy (m_GUIArgs.FileName, ""); | |||
| 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->RegisterData ("EchoFileName", ChannelHandler::OUTPUT, | |||
| &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); | |||
| @@ -123,7 +116,7 @@ void StreamPlugin::Execute() { | |||
| m_StreamPos = 0; | |||
| } | |||
| if (m_Pos<0) { | |||
| if (m_Pos<0) { | |||
| m_Pos = m_SampleSize - 1; | |||
| m_StreamPos -= m_SampleSize; | |||
| FinTrig = m_StreamPos < 0; | |||
| @@ -136,7 +129,7 @@ void StreamPlugin::Execute() { | |||
| if ((m_File.GetSize() - m_StreamPos) < 256) | |||
| m_SampleSize = m_File.GetSize() - m_StreamPos; | |||
| else | |||
| m_SampleSize = 256; | |||
| m_SampleSize = 256; | |||
| m_File.LoadChunk (m_SampleSize, m_SampleL, m_SampleR); | |||
| } | |||
| @@ -153,22 +146,27 @@ void StreamPlugin::Execute() { | |||
| if ((m_File.GetSize() - m_StreamPos) < 256) | |||
| m_SampleSize = m_File.GetSize() - m_StreamPos; | |||
| else | |||
| m_SampleSize = 256; | |||
| m_SampleSize = 256; | |||
| m_File.LoadChunk (m_SampleSize, m_SampleL, m_SampleR); | |||
| } | |||
| // finished trigger | |||
| if (FinTrig) SetOutput (2, n, 1); | |||
| else SetOutput (2, n, 0); | |||
| if (m_Mode==PLAYM) { | |||
| // left and right outputs | |||
| SetOutput (0, n, m_SampleL[m_Pos] * m_GUIArgs.Volume); | |||
| SetOutput (1, n, m_SampleR[m_Pos] * m_GUIArgs.Volume); | |||
| // play trigger | |||
| SetOutput (3, n, 1); | |||
| m_Pos += m_GUIArgs.PitchMod + CVPitch; | |||
| m_GlobalPos += m_GUIArgs.PitchMod + CVPitch; | |||
| } | |||
| else { | |||
| SetOutput (0, n, 0); | |||
| SetOutput (1, n, 0); | |||
| SetOutput (3, n, 0); | |||
| } | |||
| } | |||
| m_GUIArgs.TimeOut = m_GlobalPos / (float)m_SampleRate; | |||
| @@ -47,13 +47,9 @@ class StreamPlugin : public SpiralPlugin { | |||
| float m_GlobalPos, m_Pitch, m_SamplePos, m_Pos; | |||
| enum Mode { PLAYM, STOPM } m_Mode; | |||
| struct GUIArgs { | |||
| float Volume; | |||
| float PitchMod; | |||
| char FileName[256]; | |||
| float Time; | |||
| float TimeOut; | |||
| bool PlayOut; | |||
| float MaxTime; | |||
| float Volume, PitchMod, Time, TimeOut, MaxTime; | |||
| char FileName[256]; | |||
| bool PlayOut; | |||
| } m_GUIArgs; | |||
| float GetLength (void); | |||
| // Commands | |||
| @@ -19,7 +19,7 @@ | |||
| #include "StreamPluginGUI.h" | |||
| #include <FL/fl_draw.h> | |||
| #include <FL/fl_draw.H> | |||
| #include <FL/fl_file_chooser.h> | |||
| #include "../GUI/WaveChooser.h" | |||
| using namespace std; | |||
| @@ -30,9 +30,10 @@ SpiralPluginGUI(w,h,o,ch), | |||
| m_Playing (false), | |||
| m_PitchValue (1.0f) | |||
| { | |||
| strcpy (m_TextBuf, ""); | |||
| // 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, 15, 28, 38); | |||
| m_Display[dis] -> bar_width (4); | |||
| m_Display[dis] -> color (Info->SCOPE_FG_COLOUR); | |||
| m_Display[dis] -> color2 (Info->SCOPE_BG_COLOUR); | |||
| @@ -40,7 +41,7 @@ m_PitchValue (1.0f) | |||
| add (m_Display[dis]); | |||
| } | |||
| // volume control | |||
| m_Volume = new Fl_Knob (180, 15, 50, 50, "Volume"); | |||
| m_Volume = new Fl_Knob (180, 10, 50, 50, "Volume"); | |||
| m_Volume->color (Info->GUI_COLOUR); | |||
| m_Volume->type (Fl_Knob::LINELIN); | |||
| m_Volume->labelsize (10); | |||
| @@ -49,8 +50,15 @@ m_PitchValue (1.0f) | |||
| m_Volume->value (1); | |||
| m_Volume->callback ((Fl_Callback*)cb_Volume); | |||
| add (m_Volume); | |||
| // filename display | |||
| m_FileName = new Fl_Input (5, 55, 170, 20, ""); | |||
| m_FileName->type (FL_NORMAL_OUTPUT); | |||
| m_FileName->textsize (8); | |||
| m_FileName->box (FL_PLASTIC_UP_BOX); | |||
| m_FileName->value ("Nothing Loaded"); | |||
| m_FileName->tooltip (m_TextBuf); | |||
| // pitch indicator | |||
| m_Pitch = new Fl_Slider (5, 85, 235, 20, ""); | |||
| m_Pitch = new Fl_Slider (5, 78, 235, 20, ""); | |||
| m_Pitch->type (FL_HORIZONTAL); | |||
| m_Pitch->labelsize (10); | |||
| m_Pitch->labelcolor (Info->GUI_COLOUR); | |||
| @@ -62,7 +70,7 @@ m_PitchValue (1.0f) | |||
| m_Pitch->callback ((Fl_Callback*)cb_Pitch); | |||
| add (m_Pitch); | |||
| // position indicator | |||
| m_Pos = new Fl_Slider (5, 108, 235, 20, ""); | |||
| m_Pos = new Fl_Slider (5, 100, 235, 20, ""); | |||
| m_Pos->type (FL_HORIZONTAL); | |||
| m_Pos->box (FL_PLASTIC_DOWN_BOX); | |||
| m_Pos->labelcolor (Info->GUI_COLOUR); | |||
| @@ -71,7 +79,7 @@ m_PitchValue (1.0f) | |||
| m_Pos->callback ((Fl_Callback*)cb_Pos); | |||
| add (m_Pos); | |||
| // load btn | |||
| m_Load = new Fl_Button (2, 130, 30, 30, "Load"); | |||
| m_Load = new Fl_Button (2, 124, 30, 30, "Load"); | |||
| m_Load->labelsize (9); | |||
| m_Load->box (FL_PLASTIC_UP_BOX); | |||
| m_Load->color (Info->GUI_COLOUR); | |||
| @@ -79,7 +87,7 @@ m_PitchValue (1.0f) | |||
| m_Load->callback ((Fl_Callback*)cb_Load); | |||
| add (m_Load); | |||
| // reset btn | |||
| m_ToStart = new Fl_Button (32, 130, 30, 30, "@|<"); | |||
| m_ToStart = new Fl_Button (32, 124, 30, 30, "@|<"); | |||
| m_ToStart->labelsize (10); | |||
| m_ToStart->labeltype (FL_SYMBOL_LABEL); | |||
| m_ToStart->box (FL_PLASTIC_UP_BOX); | |||
| @@ -88,7 +96,7 @@ m_PitchValue (1.0f) | |||
| m_ToStart->callback ((Fl_Callback*)cb_ToStart); | |||
| add (m_ToStart); | |||
| // play btn | |||
| m_Play = new Fl_Button (62, 130, 30, 30, "@>"); | |||
| m_Play = new Fl_Button (62, 124, 30, 30, "@>"); | |||
| m_Play->labelsize (10); | |||
| m_Play->labeltype (FL_SYMBOL_LABEL); | |||
| m_Play->box (FL_PLASTIC_UP_BOX); | |||
| @@ -97,7 +105,7 @@ m_PitchValue (1.0f) | |||
| m_Play->callback ((Fl_Callback*)cb_Play); | |||
| add (m_Play); | |||
| // normal speed btn | |||
| m_Reset = new Fl_Button (92, 130, 30, 30, "Reset"); | |||
| m_Reset = new Fl_Button (92, 124, 30, 30, "Reset"); | |||
| m_Reset->labelsize (9); | |||
| m_Reset->box (FL_PLASTIC_UP_BOX); | |||
| m_Reset->color (Info->GUI_COLOUR); | |||
| @@ -105,7 +113,7 @@ m_PitchValue (1.0f) | |||
| m_Reset->callback ((Fl_Callback*)cb_Reset); | |||
| add (m_Reset); | |||
| // Reverse Button | |||
| m_Rev = new Fl_Button (122, 130, 30, 30, "@<-"); | |||
| m_Rev = new Fl_Button (122, 124, 30, 30, "@<-"); | |||
| m_Rev->labelsize (10); | |||
| m_Rev->labeltype (FL_SYMBOL_LABEL); | |||
| m_Rev->box (FL_PLASTIC_UP_BOX); | |||
| @@ -114,7 +122,7 @@ m_PitchValue (1.0f) | |||
| m_Rev->callback ((Fl_Callback*)cb_Rev); | |||
| add (m_Rev); | |||
| // 1/2 speed btn | |||
| m_Div = new Fl_Button (152, 130, 30, 30, "/2"); | |||
| m_Div = new Fl_Button (152, 124, 30, 30, "/2"); | |||
| m_Div->labelsize (9); | |||
| m_Div->box (FL_PLASTIC_UP_BOX); | |||
| m_Div->color (Info->GUI_COLOUR); | |||
| @@ -122,7 +130,7 @@ m_PitchValue (1.0f) | |||
| m_Div->callback ((Fl_Callback*)cb_Div); | |||
| add (m_Div); | |||
| // dbl speed btn | |||
| m_Dbl = new Fl_Button (182, 130, 30, 30, "X2"); | |||
| m_Dbl = new Fl_Button (182, 124, 30, 30, "X2"); | |||
| m_Dbl->labelsize (9); | |||
| m_Dbl->box (FL_PLASTIC_UP_BOX); | |||
| m_Dbl->color (Info->GUI_COLOUR); | |||
| @@ -130,7 +138,7 @@ m_PitchValue (1.0f) | |||
| 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 = new Fl_Repeat_Button (212, 124, 30, 30, "Nudge"); | |||
| m_Nudge->labelsize (9); | |||
| m_Nudge->box (FL_PLASTIC_UP_BOX); | |||
| m_Nudge->color (Info->GUI_COLOUR); | |||
| @@ -158,6 +166,15 @@ void StreamPluginGUI::Update() { | |||
| redraw(); | |||
| SetMaxTime (m_GUICH->GetFloat ("MaxTime")); | |||
| if (m_Playing != m_GUICH->GetBool ("Playing")) UpdatePlayStatus (); | |||
| m_GUICH->GetData ("EchoFileName", (void*)m_TextBuf); | |||
| if (*m_TextBuf == 0) { | |||
| m_FileName->value ("Nothing Loaded"); | |||
| m_FileName->position (0); | |||
| } | |||
| else { | |||
| m_FileName->value (m_TextBuf); | |||
| m_FileName->position (strlen (m_TextBuf)-1); | |||
| } | |||
| } | |||
| // Update GUI on load | |||
| @@ -219,7 +236,7 @@ void StreamPluginGUI::cb_Pos (Fl_Slider* o, void* v) { | |||
| // load | |||
| inline void StreamPluginGUI::cb_Load_i (Fl_Button* o, void* v) { | |||
| char *fn=fl_file_chooser("Load a sample", "{*.wav,*.WAV}", NULL); | |||
| char *fn=WaveFileName (); | |||
| if (fn && fn!='\0') { | |||
| strcpy (m_TextBuf, fn); | |||
| m_GUICH->SetData ("FileName", (void*)m_TextBuf); | |||
| @@ -21,6 +21,7 @@ | |||
| #include <FL/Fl.H> | |||
| #include <FL/Fl_Slider.H> | |||
| #include <FL/Fl_Input.H> | |||
| #include <FL/Fl_Repeat_Button.H> | |||
| #include <FL/Fl_Button.H> | |||
| #include "StreamPlugin.h" | |||
| @@ -46,6 +47,7 @@ class StreamPluginGUI : public SpiralPluginGUI { | |||
| // Widgets | |||
| Fl_SevenSeg *m_Display[6]; | |||
| Fl_Knob *m_Volume; | |||
| Fl_Input *m_FileName; | |||
| Fl_Slider *m_Pitch, *m_Pos; | |||
| Fl_Button *m_Load, *m_ToStart, *m_Play, *m_Reset, *m_Rev, *m_Div, *m_Dbl; | |||
| Fl_Repeat_Button* m_Nudge; | |||