@@ -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; | |||