@@ -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->box (FL_PLASTIC_UP_BOX); | ||||
m_Remove->color (m_GUIColour); | m_Remove->color (m_GUIColour); | ||||
m_Remove->type(0); | m_Remove->type(0); | ||||
m_Remove->labelsize(2); | |||||
m_Remove->labelsize (10); | |||||
m_Remove->selection_color (m_GUIColour); | m_Remove->selection_color (m_GUIColour); | ||||
m_Remove->callback((Fl_Callback*)cb_Remove, this); | m_Remove->callback((Fl_Callback*)cb_Remove, this); | ||||
add(m_Remove); | add(m_Remove); | ||||
m_Add = new Fl_Button(30,15,25,25,"+"); | m_Add = new Fl_Button(30,15,25,25,"+"); | ||||
m_Add->box (FL_PLASTIC_UP_BOX); | m_Add->box (FL_PLASTIC_UP_BOX); | ||||
m_Add->color (m_GUIColour); | m_Add->color (m_GUIColour); | ||||
m_Add->type(0); | m_Add->type(0); | ||||
m_Add->labelsize(2); | |||||
m_Add->labelsize (10); | |||||
m_Add->selection_color (m_GUIColour); | m_Add->selection_color (m_GUIColour); | ||||
m_Add->callback((Fl_Callback*)cb_Add, this); | m_Add->callback((Fl_Callback*)cb_Add, this); | ||||
add(m_Add); | add(m_Add); | ||||
@@ -45,6 +45,7 @@ HEADERS = PoshSamplerPlugin.h \ | |||||
../../ChannelHandler.h \ | ../../ChannelHandler.h \ | ||||
../../Sample.h \ | ../../Sample.h \ | ||||
../../RiffWav.h \ | ../../RiffWav.h \ | ||||
../GUI/WaveChooser.h \ | |||||
../Widgets/Fl_Knob.H \ | ../Widgets/Fl_Knob.H \ | ||||
../../../GUI/Widgets/SpiralGUI.H | ../../../GUI/Widgets/SpiralGUI.H | ||||
SOURCES = PoshSamplerPlugin.C \ | SOURCES = PoshSamplerPlugin.C \ | ||||
@@ -54,6 +55,7 @@ SOURCES = PoshSamplerPlugin.C \ | |||||
../../ChannelHandler.C \ | ../../ChannelHandler.C \ | ||||
../../Sample.C \ | ../../Sample.C \ | ||||
../../RiffWav.C \ | ../../RiffWav.C \ | ||||
../GUI/WaveChooser.C \ | |||||
../Widgets/Fl_Knob.cxx \ | ../Widgets/Fl_Knob.cxx \ | ||||
../../../GUI/Widgets/SpiralGUI.C | ../../../GUI/Widgets/SpiralGUI.C | ||||
OBJECTS = PoshSamplerPlugin.o \ | OBJECTS = PoshSamplerPlugin.o \ | ||||
@@ -63,6 +65,7 @@ OBJECTS = PoshSamplerPlugin.o \ | |||||
../../ChannelHandler.o \ | ../../ChannelHandler.o \ | ||||
../../Sample.o \ | ../../Sample.o \ | ||||
../../RiffWav.o \ | ../../RiffWav.o \ | ||||
../GUI/WaveChooser.o \ | |||||
../Widgets/Fl_Knob.o \ | ../Widgets/Fl_Knob.o \ | ||||
../../../GUI/Widgets/SpiralGUI.o | ../../../GUI/Widgets/SpiralGUI.o | ||||
INTERFACES = | INTERFACES = | ||||
@@ -148,6 +151,9 @@ install: | |||||
../../RiffWav.h \ | ../../RiffWav.h \ | ||||
../../Sample.h | ../../Sample.h | ||||
../GUI/WaveChooser.o: ../GUI/WaveChooser.C \ | |||||
../GUI/WaveChooser.h | |||||
PoshSamplerPlugin.o: PoshSamplerPlugin.C \ | PoshSamplerPlugin.o: PoshSamplerPlugin.C \ | ||||
PoshSamplerPlugin.h \ | PoshSamplerPlugin.h \ | ||||
PoshSamplerPluginGUI.h \ | PoshSamplerPluginGUI.h \ | ||||
@@ -19,6 +19,7 @@ | |||||
#include "PoshSamplerPluginGUI.h" | #include "PoshSamplerPluginGUI.h" | ||||
#include <FL/fl_draw.h> | #include <FL/fl_draw.h> | ||||
#include <FL/fl_draw.H> | #include <FL/fl_draw.H> | ||||
#include "../GUI/WaveChooser.h" | |||||
#include <FL/fl_file_chooser.h> | #include <FL/fl_file_chooser.h> | ||||
using namespace std; | using namespace std; | ||||
@@ -196,7 +197,7 @@ int Fl_WaveDisplay::handle(int event) | |||||
case 5: m_LoopEnd=MousePos; break; | case 5: m_LoopEnd=MousePos; break; | ||||
} | } | ||||
} | } | ||||
if (Mousebutton==2) | if (Mousebutton==2) | ||||
{ | { | ||||
int Dist=(DragX-xx)*((m_ViewEnd-m_ViewStart)/w()); | 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_Volume->value(Plugin->GetVolume((int)m_SampleNum->value())); | ||||
m_Pitch->value(Plugin->GetPitch((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_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(); | m_Display->redraw(); | ||||
} | } | ||||
inline void PoshSamplerPluginGUI::cb_Load_i(Fl_Button* o, void* v) | 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') | if (fn && fn!='\0') | ||||
{ | { | ||||
strcpy(m_TextBuf,fn); | strcpy(m_TextBuf,fn); | ||||
m_GUICH->SetData("Name",m_TextBuf); | m_GUICH->SetData("Name",m_TextBuf); | ||||
m_GUICH->Set("Num",(int)m_SampleNum->value()); | m_GUICH->Set("Num",(int)m_SampleNum->value()); | ||||
m_GUICH->SetCommand(PoshSamplerPlugin::LOAD); | m_GUICH->SetCommand(PoshSamplerPlugin::LOAD); | ||||
m_GUICH->Wait(); // wait for the sample to load | m_GUICH->Wait(); // wait for the sample to load | ||||
UpdateSampleDisplay((int)m_SampleNum->value()); | UpdateSampleDisplay((int)m_SampleNum->value()); | ||||
m_Display->redraw(); | m_Display->redraw(); | ||||
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); | char *fn=fl_file_chooser("Save sample", "{*.wav,*.WAV}", NULL); | ||||
if (fn && fn!='\0') | if (fn && fn!='\0') | ||||
{ | |||||
{ | |||||
strcpy(m_TextBuf,fn); | strcpy(m_TextBuf,fn); | ||||
m_GUICH->Set("Name",m_TextBuf); | m_GUICH->Set("Name",m_TextBuf); | ||||
m_GUICH->Set("Num",(int)m_SampleNum->value()); | m_GUICH->Set("Num",(int)m_SampleNum->value()); | ||||
@@ -47,7 +47,8 @@ HEADERS = SpiralLoopPlugin.h \ | |||||
../../RiffWav.h \ | ../../RiffWav.h \ | ||||
Fl_Loop.h \ | Fl_Loop.h \ | ||||
Fl_Trigger.h \ | Fl_Trigger.h \ | ||||
../Widgets/Fl_Knob.H \ | |||||
../GUI/WaveChooser.h \ | |||||
../Widgets/Fl_Knob.H \ | |||||
../Widgets/Fl_LED_Button.H \ | ../Widgets/Fl_LED_Button.H \ | ||||
../../../GUI/Widgets/SpiralGUI.H | ../../../GUI/Widgets/SpiralGUI.H | ||||
SOURCES = SpiralLoopPlugin.C \ | SOURCES = SpiralLoopPlugin.C \ | ||||
@@ -59,6 +60,7 @@ SOURCES = SpiralLoopPlugin.C \ | |||||
../../RiffWav.C \ | ../../RiffWav.C \ | ||||
Fl_Loop.C \ | Fl_Loop.C \ | ||||
Fl_Trigger.C \ | Fl_Trigger.C \ | ||||
../GUI/WaveChooser.C \ | |||||
../Widgets/Fl_Knob.cxx \ | ../Widgets/Fl_Knob.cxx \ | ||||
../Widgets/Fl_LED_Button.cxx \ | ../Widgets/Fl_LED_Button.cxx \ | ||||
../../../GUI/Widgets/SpiralGUI.C | ../../../GUI/Widgets/SpiralGUI.C | ||||
@@ -71,6 +73,7 @@ OBJECTS = SpiralLoopPlugin.o \ | |||||
../../RiffWav.o \ | ../../RiffWav.o \ | ||||
Fl_Loop.o \ | Fl_Loop.o \ | ||||
Fl_Trigger.o \ | Fl_Trigger.o \ | ||||
../GUI/WaveChooser.o \ | |||||
../Widgets/Fl_Knob.o \ | ../Widgets/Fl_Knob.o \ | ||||
../Widgets/Fl_LED_Button.o \ | ../Widgets/Fl_LED_Button.o \ | ||||
../../../GUI/Widgets/SpiralGUI.o | ../../../GUI/Widgets/SpiralGUI.o | ||||
@@ -163,6 +166,9 @@ Fl_Trigger.o: Fl_Trigger.C \ | |||||
Fl_Trigger.h \ | Fl_Trigger.h \ | ||||
Fl_Loop.h | Fl_Loop.h | ||||
../GUI/WaveChooser.o: ../GUI/WaveChooser.C \ | |||||
../GUI/WaveChooser.h | |||||
SpiralLoopPlugin.o: SpiralLoopPlugin.C \ | SpiralLoopPlugin.o: SpiralLoopPlugin.C \ | ||||
SpiralLoopPlugin.h \ | SpiralLoopPlugin.h \ | ||||
../SpiralPlugin.h \ | ../SpiralPlugin.h \ | ||||
@@ -20,6 +20,7 @@ | |||||
#include <FL/fl_draw.h> | #include <FL/fl_draw.h> | ||||
#include <FL/fl_draw.H> | #include <FL/fl_draw.H> | ||||
#include <FL/fl_file_chooser.h> | #include <FL/fl_file_chooser.h> | ||||
#include "../GUI/WaveChooser.h" | |||||
using namespace std; | 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) | 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') | if (fn && fn!='\0') | ||||
{ | { | ||||
strcpy(m_TextBuf,fn); | 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) | inline void SpiralLoopPluginGUI::cb_Save_i(Fl_Button* o, void* v) | ||||
{ | { | ||||
char *fn=fl_file_chooser("Load a sample", "{*.wav,*.WAV}", NULL); | char *fn=fl_file_chooser("Load a sample", "{*.wav,*.WAV}", NULL); | ||||
if (fn && fn!='\0') | if (fn && fn!='\0') | ||||
{ | { | ||||
strcpy(m_TextBuf,fn); | strcpy(m_TextBuf,fn); | ||||
m_GUICH->SetData("Name",m_TextBuf); | m_GUICH->SetData("Name",m_TextBuf); | ||||
m_GUICH->SetCommand(SpiralLoopPlugin::SAVE); | m_GUICH->SetCommand(SpiralLoopPlugin::SAVE); | ||||
} | |||||
} | |||||
} | } | ||||
void SpiralLoopPluginGUI::cb_Save(Fl_Button* o, void* v) | void SpiralLoopPluginGUI::cb_Save(Fl_Button* o, void* v) | ||||
{ ((SpiralLoopPluginGUI*)(o->parent()->parent()))->cb_Save_i(o,v); } | { ((SpiralLoopPluginGUI*)(o->parent()->parent()))->cb_Save_i(o,v); } | ||||
@@ -47,6 +47,7 @@ HEADERS = StreamPlugin.h \ | |||||
../../RiffWav.h \ | ../../RiffWav.h \ | ||||
../Widgets/Fl_Knob.H \ | ../Widgets/Fl_Knob.H \ | ||||
../Widgets/Fl_SevenSeg.H \ | ../Widgets/Fl_SevenSeg.H \ | ||||
../GUI/WaveChooser.h \ | |||||
../../../GUI/Widgets/SpiralGUI.H | ../../../GUI/Widgets/SpiralGUI.H | ||||
SOURCES = StreamPlugin.C \ | SOURCES = StreamPlugin.C \ | ||||
StreamPluginGUI.C \ | StreamPluginGUI.C \ | ||||
@@ -57,6 +58,7 @@ SOURCES = StreamPlugin.C \ | |||||
../../RiffWav.C \ | ../../RiffWav.C \ | ||||
../Widgets/Fl_Knob.cxx \ | ../Widgets/Fl_Knob.cxx \ | ||||
../Widgets/Fl_SevenSeg.cxx \ | ../Widgets/Fl_SevenSeg.cxx \ | ||||
../GUI/WaveChooser.C \ | |||||
../../../GUI/Widgets/SpiralGUI.C | ../../../GUI/Widgets/SpiralGUI.C | ||||
OBJECTS = StreamPlugin.o \ | OBJECTS = StreamPlugin.o \ | ||||
StreamPluginGUI.o \ | StreamPluginGUI.o \ | ||||
@@ -67,6 +69,7 @@ OBJECTS = StreamPlugin.o \ | |||||
../../RiffWav.o \ | ../../RiffWav.o \ | ||||
../Widgets/Fl_Knob.o \ | ../Widgets/Fl_Knob.o \ | ||||
../Widgets/Fl_SevenSeg.o \ | ../Widgets/Fl_SevenSeg.o \ | ||||
../GUI/WaveChooser.o \ | |||||
../../../GUI/Widgets/SpiralGUI.o | ../../../GUI/Widgets/SpiralGUI.o | ||||
INTERFACES = | INTERFACES = | ||||
UICDECLS = | UICDECLS = | ||||
@@ -137,6 +140,9 @@ install: | |||||
../../ChannelHandler.h \ | ../../ChannelHandler.h \ | ||||
../../../GUI/Widgets/SpiralGUI.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.o: ../Widgets/Fl_Knob.cxx \ | ||||
../Widgets/Fl_Knob.H | ../Widgets/Fl_Knob.H | ||||
@@ -21,38 +21,27 @@ | |||||
#include "SpiralIcon.xpm" | #include "SpiralIcon.xpm" | ||||
#include "../../NoteTable.h" | #include "../../NoteTable.h" | ||||
#include <stdio.h> | #include <stdio.h> | ||||
#include "../../RiffWav.h" | #include "../../RiffWav.h" | ||||
using namespace std; | using namespace std; | ||||
static const float TRIG_THRESH = 0.1; | |||||
static const float BUFSECONDS = 1.0f; | |||||
extern "C" { | 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() : | StreamPlugin::StreamPlugin() : | ||||
m_SampleRate (44100), | m_SampleRate (44100), | ||||
m_SampleSize (256), | m_SampleSize (256), | ||||
@@ -65,22 +54,26 @@ m_Mode(STOPM) | |||||
{ | { | ||||
m_PluginInfo.Name = "Stream"; | m_PluginInfo.Name = "Stream"; | ||||
m_PluginInfo.Width = 245; | m_PluginInfo.Width = 245; | ||||
m_PluginInfo.Height = 165; | |||||
m_PluginInfo.Height = 160; | |||||
m_PluginInfo.NumInputs = 3; | m_PluginInfo.NumInputs = 3; | ||||
m_PluginInfo.NumOutputs = 3; | |||||
m_PluginInfo.NumOutputs = 4; | |||||
m_PluginInfo.PortTips.push_back ("Pitch CV"); | m_PluginInfo.PortTips.push_back ("Pitch CV"); | ||||
m_PluginInfo.PortTips.push_back ("Play Trigger"); | m_PluginInfo.PortTips.push_back ("Play Trigger"); | ||||
m_PluginInfo.PortTips.push_back ("Stop Trigger"); | m_PluginInfo.PortTips.push_back ("Stop Trigger"); | ||||
m_PluginInfo.PortTips.push_back ("Left Out"); | m_PluginInfo.PortTips.push_back ("Left Out"); | ||||
m_PluginInfo.PortTips.push_back ("Right Out"); | m_PluginInfo.PortTips.push_back ("Right Out"); | ||||
m_PluginInfo.PortTips.push_back ("Finish Trigger"); | m_PluginInfo.PortTips.push_back ("Finish Trigger"); | ||||
m_PluginInfo.PortTips.push_back ("Playing Trigger"); | |||||
m_GUIArgs.Volume = 1.0f; | m_GUIArgs.Volume = 1.0f; | ||||
m_GUIArgs.PitchMod = 1.0f; | m_GUIArgs.PitchMod = 1.0f; | ||||
m_GUIArgs.PlayOut = false; | m_GUIArgs.PlayOut = false; | ||||
strcpy (m_GUIArgs.FileName, ""); | |||||
m_AudioCH->Register ("Volume", &m_GUIArgs.Volume); | m_AudioCH->Register ("Volume", &m_GUIArgs.Volume); | ||||
m_AudioCH->Register ("Pitch", &m_GUIArgs.PitchMod, ChannelHandler::INPUT); | m_AudioCH->Register ("Pitch", &m_GUIArgs.PitchMod, ChannelHandler::INPUT); | ||||
m_AudioCH->RegisterData ("FileName", ChannelHandler::INPUT, | m_AudioCH->RegisterData ("FileName", ChannelHandler::INPUT, | ||||
&m_GUIArgs.FileName, sizeof (m_GUIArgs.FileName)); | &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 ("Time", &m_GUIArgs.Time); | ||||
m_AudioCH->Register ("TimeOut", &m_GUIArgs.TimeOut, ChannelHandler::OUTPUT); | m_AudioCH->Register ("TimeOut", &m_GUIArgs.TimeOut, ChannelHandler::OUTPUT); | ||||
m_AudioCH->Register ("MaxTime", &m_GUIArgs.MaxTime, ChannelHandler::OUTPUT); | m_AudioCH->Register ("MaxTime", &m_GUIArgs.MaxTime, ChannelHandler::OUTPUT); | ||||
@@ -123,7 +116,7 @@ void StreamPlugin::Execute() { | |||||
m_StreamPos = 0; | m_StreamPos = 0; | ||||
} | } | ||||
if (m_Pos<0) { | |||||
if (m_Pos<0) { | |||||
m_Pos = m_SampleSize - 1; | m_Pos = m_SampleSize - 1; | ||||
m_StreamPos -= m_SampleSize; | m_StreamPos -= m_SampleSize; | ||||
FinTrig = m_StreamPos < 0; | FinTrig = m_StreamPos < 0; | ||||
@@ -136,7 +129,7 @@ void StreamPlugin::Execute() { | |||||
if ((m_File.GetSize() - m_StreamPos) < 256) | if ((m_File.GetSize() - m_StreamPos) < 256) | ||||
m_SampleSize = m_File.GetSize() - m_StreamPos; | m_SampleSize = m_File.GetSize() - m_StreamPos; | ||||
else | else | ||||
m_SampleSize = 256; | |||||
m_SampleSize = 256; | |||||
m_File.LoadChunk (m_SampleSize, m_SampleL, m_SampleR); | m_File.LoadChunk (m_SampleSize, m_SampleL, m_SampleR); | ||||
} | } | ||||
@@ -153,22 +146,27 @@ void StreamPlugin::Execute() { | |||||
if ((m_File.GetSize() - m_StreamPos) < 256) | if ((m_File.GetSize() - m_StreamPos) < 256) | ||||
m_SampleSize = m_File.GetSize() - m_StreamPos; | m_SampleSize = m_File.GetSize() - m_StreamPos; | ||||
else | else | ||||
m_SampleSize = 256; | |||||
m_SampleSize = 256; | |||||
m_File.LoadChunk (m_SampleSize, m_SampleL, m_SampleR); | m_File.LoadChunk (m_SampleSize, m_SampleL, m_SampleR); | ||||
} | } | ||||
// finished trigger | |||||
if (FinTrig) SetOutput (2, n, 1); | if (FinTrig) SetOutput (2, n, 1); | ||||
else SetOutput (2, n, 0); | else SetOutput (2, n, 0); | ||||
if (m_Mode==PLAYM) { | if (m_Mode==PLAYM) { | ||||
// left and right outputs | |||||
SetOutput (0, n, m_SampleL[m_Pos] * m_GUIArgs.Volume); | SetOutput (0, n, m_SampleL[m_Pos] * m_GUIArgs.Volume); | ||||
SetOutput (1, n, m_SampleR[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_Pos += m_GUIArgs.PitchMod + CVPitch; | ||||
m_GlobalPos += m_GUIArgs.PitchMod + CVPitch; | m_GlobalPos += m_GUIArgs.PitchMod + CVPitch; | ||||
} | } | ||||
else { | else { | ||||
SetOutput (0, n, 0); | SetOutput (0, n, 0); | ||||
SetOutput (1, n, 0); | SetOutput (1, n, 0); | ||||
SetOutput (3, n, 0); | |||||
} | } | ||||
} | } | ||||
m_GUIArgs.TimeOut = m_GlobalPos / (float)m_SampleRate; | 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; | float m_GlobalPos, m_Pitch, m_SamplePos, m_Pos; | ||||
enum Mode { PLAYM, STOPM } m_Mode; | enum Mode { PLAYM, STOPM } m_Mode; | ||||
struct GUIArgs { | 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; | } m_GUIArgs; | ||||
float GetLength (void); | float GetLength (void); | ||||
// Commands | // Commands | ||||
@@ -19,7 +19,7 @@ | |||||
#include "StreamPluginGUI.h" | #include "StreamPluginGUI.h" | ||||
#include <FL/fl_draw.h> | #include <FL/fl_draw.h> | ||||
#include <FL/fl_draw.H> | #include <FL/fl_draw.H> | ||||
#include <FL/fl_file_chooser.h> | |||||
#include "../GUI/WaveChooser.h" | |||||
using namespace std; | using namespace std; | ||||
@@ -30,9 +30,10 @@ SpiralPluginGUI(w,h,o,ch), | |||||
m_Playing (false), | m_Playing (false), | ||||
m_PitchValue (1.0f) | m_PitchValue (1.0f) | ||||
{ | { | ||||
strcpy (m_TextBuf, ""); | |||||
// 7 seg displays | // 7 seg displays | ||||
for (int dis=0; dis<6; dis++) { | 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] -> bar_width (4); | ||||
m_Display[dis] -> color (Info->SCOPE_FG_COLOUR); | m_Display[dis] -> color (Info->SCOPE_FG_COLOUR); | ||||
m_Display[dis] -> color2 (Info->SCOPE_BG_COLOUR); | m_Display[dis] -> color2 (Info->SCOPE_BG_COLOUR); | ||||
@@ -40,7 +41,7 @@ m_PitchValue (1.0f) | |||||
add (m_Display[dis]); | add (m_Display[dis]); | ||||
} | } | ||||
// volume control | // 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->color (Info->GUI_COLOUR); | ||||
m_Volume->type (Fl_Knob::LINELIN); | m_Volume->type (Fl_Knob::LINELIN); | ||||
m_Volume->labelsize (10); | m_Volume->labelsize (10); | ||||
@@ -49,8 +50,15 @@ m_PitchValue (1.0f) | |||||
m_Volume->value (1); | m_Volume->value (1); | ||||
m_Volume->callback ((Fl_Callback*)cb_Volume); | m_Volume->callback ((Fl_Callback*)cb_Volume); | ||||
add (m_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 | // 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->type (FL_HORIZONTAL); | ||||
m_Pitch->labelsize (10); | m_Pitch->labelsize (10); | ||||
m_Pitch->labelcolor (Info->GUI_COLOUR); | m_Pitch->labelcolor (Info->GUI_COLOUR); | ||||
@@ -62,7 +70,7 @@ m_PitchValue (1.0f) | |||||
m_Pitch->callback ((Fl_Callback*)cb_Pitch); | m_Pitch->callback ((Fl_Callback*)cb_Pitch); | ||||
add (m_Pitch); | add (m_Pitch); | ||||
// position indicator | // 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->type (FL_HORIZONTAL); | ||||
m_Pos->box (FL_PLASTIC_DOWN_BOX); | m_Pos->box (FL_PLASTIC_DOWN_BOX); | ||||
m_Pos->labelcolor (Info->GUI_COLOUR); | m_Pos->labelcolor (Info->GUI_COLOUR); | ||||
@@ -71,7 +79,7 @@ m_PitchValue (1.0f) | |||||
m_Pos->callback ((Fl_Callback*)cb_Pos); | m_Pos->callback ((Fl_Callback*)cb_Pos); | ||||
add (m_Pos); | add (m_Pos); | ||||
// load btn | // 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->labelsize (9); | ||||
m_Load->box (FL_PLASTIC_UP_BOX); | m_Load->box (FL_PLASTIC_UP_BOX); | ||||
m_Load->color (Info->GUI_COLOUR); | m_Load->color (Info->GUI_COLOUR); | ||||
@@ -79,7 +87,7 @@ m_PitchValue (1.0f) | |||||
m_Load->callback ((Fl_Callback*)cb_Load); | m_Load->callback ((Fl_Callback*)cb_Load); | ||||
add (m_Load); | add (m_Load); | ||||
// reset btn | // 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->labelsize (10); | ||||
m_ToStart->labeltype (FL_SYMBOL_LABEL); | m_ToStart->labeltype (FL_SYMBOL_LABEL); | ||||
m_ToStart->box (FL_PLASTIC_UP_BOX); | m_ToStart->box (FL_PLASTIC_UP_BOX); | ||||
@@ -88,7 +96,7 @@ m_PitchValue (1.0f) | |||||
m_ToStart->callback ((Fl_Callback*)cb_ToStart); | m_ToStart->callback ((Fl_Callback*)cb_ToStart); | ||||
add (m_ToStart); | add (m_ToStart); | ||||
// play btn | // 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->labelsize (10); | ||||
m_Play->labeltype (FL_SYMBOL_LABEL); | m_Play->labeltype (FL_SYMBOL_LABEL); | ||||
m_Play->box (FL_PLASTIC_UP_BOX); | m_Play->box (FL_PLASTIC_UP_BOX); | ||||
@@ -97,7 +105,7 @@ m_PitchValue (1.0f) | |||||
m_Play->callback ((Fl_Callback*)cb_Play); | m_Play->callback ((Fl_Callback*)cb_Play); | ||||
add (m_Play); | add (m_Play); | ||||
// normal speed btn | // 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->labelsize (9); | ||||
m_Reset->box (FL_PLASTIC_UP_BOX); | m_Reset->box (FL_PLASTIC_UP_BOX); | ||||
m_Reset->color (Info->GUI_COLOUR); | m_Reset->color (Info->GUI_COLOUR); | ||||
@@ -105,7 +113,7 @@ m_PitchValue (1.0f) | |||||
m_Reset->callback ((Fl_Callback*)cb_Reset); | m_Reset->callback ((Fl_Callback*)cb_Reset); | ||||
add (m_Reset); | add (m_Reset); | ||||
// Reverse Button | // 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->labelsize (10); | ||||
m_Rev->labeltype (FL_SYMBOL_LABEL); | m_Rev->labeltype (FL_SYMBOL_LABEL); | ||||
m_Rev->box (FL_PLASTIC_UP_BOX); | m_Rev->box (FL_PLASTIC_UP_BOX); | ||||
@@ -114,7 +122,7 @@ m_PitchValue (1.0f) | |||||
m_Rev->callback ((Fl_Callback*)cb_Rev); | m_Rev->callback ((Fl_Callback*)cb_Rev); | ||||
add (m_Rev); | add (m_Rev); | ||||
// 1/2 speed btn | // 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->labelsize (9); | ||||
m_Div->box (FL_PLASTIC_UP_BOX); | m_Div->box (FL_PLASTIC_UP_BOX); | ||||
m_Div->color (Info->GUI_COLOUR); | m_Div->color (Info->GUI_COLOUR); | ||||
@@ -122,7 +130,7 @@ m_PitchValue (1.0f) | |||||
m_Div->callback ((Fl_Callback*)cb_Div); | m_Div->callback ((Fl_Callback*)cb_Div); | ||||
add (m_Div); | add (m_Div); | ||||
// dbl speed btn | // 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->labelsize (9); | ||||
m_Dbl->box (FL_PLASTIC_UP_BOX); | m_Dbl->box (FL_PLASTIC_UP_BOX); | ||||
m_Dbl->color (Info->GUI_COLOUR); | m_Dbl->color (Info->GUI_COLOUR); | ||||
@@ -130,7 +138,7 @@ m_PitchValue (1.0f) | |||||
m_Dbl->callback ((Fl_Callback*)cb_Dbl); | m_Dbl->callback ((Fl_Callback*)cb_Dbl); | ||||
add (m_Dbl); | add (m_Dbl); | ||||
// nudge btn | // 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->labelsize (9); | ||||
m_Nudge->box (FL_PLASTIC_UP_BOX); | m_Nudge->box (FL_PLASTIC_UP_BOX); | ||||
m_Nudge->color (Info->GUI_COLOUR); | m_Nudge->color (Info->GUI_COLOUR); | ||||
@@ -158,6 +166,15 @@ void StreamPluginGUI::Update() { | |||||
redraw(); | redraw(); | ||||
SetMaxTime (m_GUICH->GetFloat ("MaxTime")); | SetMaxTime (m_GUICH->GetFloat ("MaxTime")); | ||||
if (m_Playing != m_GUICH->GetBool ("Playing")) UpdatePlayStatus (); | 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 | // Update GUI on load | ||||
@@ -219,7 +236,7 @@ void StreamPluginGUI::cb_Pos (Fl_Slider* o, void* v) { | |||||
// load | // load | ||||
inline void StreamPluginGUI::cb_Load_i (Fl_Button* o, void* v) { | 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') { | if (fn && fn!='\0') { | ||||
strcpy (m_TextBuf, fn); | strcpy (m_TextBuf, fn); | ||||
m_GUICH->SetData ("FileName", (void*)m_TextBuf); | m_GUICH->SetData ("FileName", (void*)m_TextBuf); | ||||
@@ -21,6 +21,7 @@ | |||||
#include <FL/Fl.H> | #include <FL/Fl.H> | ||||
#include <FL/Fl_Slider.H> | #include <FL/Fl_Slider.H> | ||||
#include <FL/Fl_Input.H> | |||||
#include <FL/Fl_Repeat_Button.H> | #include <FL/Fl_Repeat_Button.H> | ||||
#include <FL/Fl_Button.H> | #include <FL/Fl_Button.H> | ||||
#include "StreamPlugin.h" | #include "StreamPlugin.h" | ||||
@@ -46,6 +47,7 @@ class StreamPluginGUI : public SpiralPluginGUI { | |||||
// Widgets | // Widgets | ||||
Fl_SevenSeg *m_Display[6]; | Fl_SevenSeg *m_Display[6]; | ||||
Fl_Knob *m_Volume; | Fl_Knob *m_Volume; | ||||
Fl_Input *m_FileName; | |||||
Fl_Slider *m_Pitch, *m_Pos; | Fl_Slider *m_Pitch, *m_Pos; | ||||
Fl_Button *m_Load, *m_ToStart, *m_Play, *m_Reset, *m_Rev, *m_Div, *m_Dbl; | Fl_Button *m_Load, *m_ToStart, *m_Play, *m_Reset, *m_Rev, *m_Div, *m_Dbl; | ||||
Fl_Repeat_Button* m_Nudge; | Fl_Repeat_Button* m_Nudge; | ||||