@@ -82,3 +82,12 @@ inline void DiskWriterPluginGUI::cb_Record_i(Fl_Button* o, void* v) | |||
} | |||
void DiskWriterPluginGUI::cb_Record(Fl_Button* o, void* v) | |||
{ ((DiskWriterPluginGUI*)(o->parent()))->cb_Record_i(o,v); } | |||
const string DiskWriterPluginGUI::GetHelpText(const string &loc){ | |||
return string("") | |||
+ "One way of recording your creations to disk. First open a file\n" | |||
+ "you wish to save to, then hit record to start recording.\n" | |||
+ "You are able to stop and restart recording without closing the\n" | |||
+ "file, which should make life a little easier if you are doing\n" | |||
+ "things like recording lots of little samples."; | |||
} |
@@ -36,7 +36,10 @@ public: | |||
DiskWriterPluginGUI(int w, int h, SpiralPlugin *o, ChannelHandler *ch, const HostInfo *Info); | |||
virtual void UpdateValues(SpiralPlugin *o); | |||
protected: | |||
const string GetHelpText(const string &loc); | |||
private: | |||
Fl_Button *Open; | |||
@@ -20,7 +20,6 @@ | |||
#include "../../RiffWav.h" | |||
#include <FL/Fl_Pixmap.H> | |||
#include <map> | |||
#include <glib.h> | |||
#include <jack/jack.h> | |||
typedef jack_default_audio_sample_t sample_t; | |||
@@ -229,3 +229,21 @@ inline void JackPluginGUI::cb_InputConnect_i(Fl_Button* o, void* v) | |||
} | |||
void JackPluginGUI::cb_InputConnect(Fl_Button* o, void* v) | |||
{ ((JackPluginGUI*)(o->parent()))->cb_InputConnect_i(o,v);} | |||
const string JackPluginGUI::GetHelpText(const string &loc){ | |||
return string("") | |||
+ "JACK is the Jack Audio Connection Kit, and allows multiple Linux audio\n" | |||
+ "apps to be connected together and run simultaneously in a low latency.\n" | |||
+ "environment.\n\n" | |||
+ "This plugin allows you to connect up to 8 inputs and outputs to other\n" | |||
+ "JACK apps (providing a server is running)\n" | |||
+ "You can use the JackPlugin to connect the ports, or a external program\n" | |||
+ "such as the excellent qjackconnect app. Be aware however that if you\n" | |||
+ "connect from an external app, the port GUI does not update itself yet.\n" | |||
+ "Another problem yet to be fixed is that ssm will get confused if more\n" | |||
+ "than one JackPlugin is being used. It's best to use one central\n" | |||
+ "JackPlugin at this time.\n\n" | |||
+ "When using JACK, make sure the buffer size and samplerate are set to\n" | |||
+ "match the JACK server, otherwise glitchy playback, and/or crashes may\n" | |||
+ "result"; | |||
} |
@@ -39,6 +39,9 @@ public: | |||
virtual void UpdateValues(SpiralPlugin *o); | |||
virtual void Update(); | |||
protected: | |||
const string GetHelpText(const string &loc); | |||
private: | |||
@@ -11,7 +11,7 @@ CC = gcc | |||
CXX = g++ | |||
CFLAGS = @CFLAGS@ | |||
CXXFLAGS= @CXXFLAGS@ | |||
INCPATH = -I/usr/X11R6/include -I/usr/lib/glib/include/ | |||
INCPATH = -I/usr/X11R6/include | |||
LINK = g++ -shared | |||
LFLAGS = | |||
LIBS = -L/usr/X11R6/lib -L/usr/local/lib/ @FLTK_LIBS@ -lGL -lXext -lX11 -ldl -ljack -lpthread | |||
@@ -188,3 +188,13 @@ inline void KeyboardPluginGUI::cb_Key_i(Fl_Button* o, void* v) | |||
} | |||
void KeyboardPluginGUI::cb_Key(Fl_Button* o, void* v) | |||
{ ((KeyboardPluginGUI*)(o->parent()->user_data()))->cb_Key_i(o,v);} | |||
const string KeyboardPluginGUI::GetHelpText(const string &loc){ | |||
return string("") | |||
+ "This plugin provides you with a soft-keyboard if you don't have midi.\n" | |||
+ "You can either use the mouse to play the keyboard GUI, or it will also\n" | |||
+ "pick up PC keyboard presses in the ssm window.\n\n" | |||
+ "The keyboard map follows the SoundTracker standard - i.e:\n" | |||
+ "z=C4 s=C#4 x=D4 ... q=C5 2=C#5 w=D5...\n" | |||
+ "The function keys change the octave."; | |||
} |
@@ -41,6 +41,9 @@ public: | |||
virtual void UpdateValues(SpiralPlugin *o); | |||
virtual void Update(); | |||
protected: | |||
const string GetHelpText(const string &loc); | |||
private: | |||
int m_Num[NUM_KEYS]; | |||
Fl_Button* m_Key[NUM_KEYS]; | |||
@@ -282,3 +282,9 @@ void LFOPluginGUI::cb_Saw (Fl_Check_Button* o, void* v) { | |||
((LFOPluginGUI*)(o->parent()))->cb_Saw_i (o, v); | |||
} | |||
const string LFOPluginGUI::GetHelpText(const string &loc){ | |||
return string("") | |||
+ "A very low frequency oscillator. Also produces inverted and \"cosine\"\n" | |||
+ "outputs (output phase shifted by 180 degrees)\n" | |||
+ "Period length goes down to 2 minutes :]\n"; | |||
} |
@@ -31,6 +31,9 @@ class LFOPluginGUI : public SpiralPluginGUI { | |||
LFOPluginGUI(int w, int h, LFOPlugin *o,ChannelHandler *ch,const HostInfo *Info); | |||
virtual void UpdateValues(SpiralPlugin *o); | |||
protected: | |||
const string GetHelpText(const string &loc); | |||
private: | |||
Fl_Check_Button* ShapeSine; | |||
Fl_Pixmap pixmap_Sine; | |||
@@ -415,3 +415,30 @@ void MatrixPluginGUI::cb_TransDnBtn (Fl_Button* o, void* v) | |||
{ | |||
((MatrixPluginGUI*)(o->parent())) -> cb_TransDnBtn_i (o, v); | |||
} | |||
const string MatrixPluginGUI::GetHelpText(const string &loc){ | |||
return string("") | |||
+ "This is a matrix style step sequencer for techno purists. Great for\n" | |||
+ "drum programming, but also capable of robotic bass and melodies.\n\n" | |||
+ "Note events are turned on and off by activating the 64*32 grid of\n" | |||
+ "toggle buttons on the GUI. The speed and octave of the notes can be\n" | |||
+ "set. The length of the pattern in notes and note cut are also\n" | |||
+ "present. The current play position is indicated by the row of LED's\n" | |||
+ "along the top of the plugin window. You can copy and paste between\n" | |||
+ "different patterns and transpose the notes\n\n" | |||
+ "16 triggers are supplied for simultaneous triggering of samples in the\n" | |||
+ "sampler plugin (for instance).\n\n" | |||
+ "Each Matrix plugin can contain up to 16 different patterns, these are\n" | |||
+ "selectable on the plugin GUI, and triggerable by the play trigger CV.\n" | |||
+ "This CV input takes a note frequency CV rather than just a trigger,\n" | |||
+ "and the bottom 16 notes on the midi scale trigger the 16 patterns.\n" | |||
+ "This means that a matrix can trigger another matrix, if set to a much\n" | |||
+ "lower speed, and (set to octave 0) the notes trigger the differnt\n" | |||
+ "patterns in the slave matrix.\n\n" | |||
+ "The external clock input is an important alternative to the matrixes\n" | |||
+ "internal clock, it allows you to have multiple matrixes powered from one\n" | |||
+ "oscillator clock. To allow you to sync these matrixes, the matrix is\n" | |||
+ "provided with a Reset Trigger, which when plugged into the Play Trigger\n" | |||
+ "of another matrix, will synch the two so they start at the same clock\n" | |||
+ "pulse."; | |||
} |
@@ -71,6 +71,9 @@ public: | |||
virtual void UpdateValues(SpiralPlugin *o); | |||
virtual void Update(); | |||
protected: | |||
const string GetHelpText(const string &loc); | |||
private: | |||
void UpdateMatrix(); | |||
@@ -310,4 +310,3 @@ void MidiPlugin::StreamIn(istream &s) | |||
} | |||
} | |||
} | |||
@@ -283,3 +283,26 @@ inline void MidiPluginGUI::cb_RemoveControl_i(Fl_Button* o, void* v) | |||
} | |||
void MidiPluginGUI::cb_RemoveControl(Fl_Button* o, void* v) | |||
{ ((MidiPluginGUI*)(o->parent()))->cb_RemoveControl_i(o,v);} | |||
const string MidiPluginGUI::GetHelpText(const string &loc){ | |||
return string("") | |||
+ "A plugin that converts midi signals into SSM's CVs. The midi plugin\n" | |||
+ "outputs a Frequency CV, which comes from the last note pressed and\n" | |||
+ "Trigger CV which lets you know the timing and the velocity of the\n" | |||
+ "event.\n" | |||
+ "It also detects pitchbend, channel pressure and aftertouch information,\n" | |||
+ "and outputs these as continuous CV data.\n\n" | |||
+ "You can select the Midi device used with the selector. Devices 0-16 are\n" | |||
+ "valid Midi channels. You can run multiple Midi plugins simultaneously\n" | |||
+ "to get data from different device numbers to make an externally\n" | |||
+ "controlled song.\n\n" | |||
+ "The note frequency CV can optionally be switched into \"Note Cut\" mode,\n" | |||
+ "where the frequecy is set to zero when the key is released. This is\n" | |||
+ "useful for a number of things, including retriggering samples from\n" | |||
+ "frequency information (see sampler).\n" | |||
+ "Extra ports can be added to handle the 128 controller messages. Click\n" | |||
+ "add control, and you will get a menu window to pick the controller you\n" | |||
+ "need.\n" | |||
+ "The MidiPlugin also supports midi note output to external devices"; | |||
} | |||
@@ -40,6 +40,9 @@ public: | |||
virtual void UpdateValues(SpiralPlugin *o); | |||
protected: | |||
const string GetHelpText(const string &loc); | |||
private: | |||
Fl_Counter* m_DeviceNum; | |||
@@ -131,3 +131,15 @@ inline void OutputPluginGUI::cb_OpenWrite_i(Fl_Button* o, void* v) | |||
} | |||
void OutputPluginGUI::cb_OpenWrite(Fl_Button* o, void* v) | |||
{ ((OutputPluginGUI*)(o->parent()))->cb_OpenWrite_i(o,v); } | |||
const string OutputPluginGUI::GetHelpText(const string &loc){ | |||
return string("") | |||
+ "Your basic OSS i/o plugin, It opens the OSS sound driver, and outputs\n" | |||
+ "whatever is passed into it's inputs to the soundcard. It works in stereo,\n" | |||
+ "so you have seperate left and right inputs.\n\n" | |||
+ "There are three modes of operation: read, write and duplex. You can select\n" | |||
+ "read to record/process sound from your soundcard, write to play sound\n" | |||
+ "(default) and if your card supports it - duplex, to play and record \n" | |||
+ "simultaneously."; | |||
} |
@@ -37,6 +37,9 @@ public: | |||
virtual void UpdateValues(SpiralPlugin *o); | |||
protected: | |||
const string GetHelpText(const string &loc); | |||
private: | |||
Fl_Group *GUIMixGroup; | |||
@@ -675,3 +675,21 @@ inline void PoshSamplerPluginGUI::cb_ZoomOut_i(Fl_Button* o, void* v) | |||
} | |||
void PoshSamplerPluginGUI::cb_ZoomOut(Fl_Button* o, void* v) | |||
{ ((PoshSamplerPluginGUI*)(o->parent()))->cb_ZoomOut_i(o,v);} | |||
const string PoshSamplerPluginGUI::GetHelpText(const string &loc){ | |||
return string("") | |||
+ "A sampler that allows simple sample editing (cut copy paste etc),\n" | |||
+ "dirty time stretching (by modulating the start pos + retriggering +\n" | |||
+ "modulating pitch) and loop start/end points with ping pong loop mode.\n" | |||
+ "Also implementations of controls, such as continuous pitch changing,\n" | |||
+ "so you can add portmento to samples, trigger velocity sets sample\n" | |||
+ "volume.\n\n" | |||
+ "Can records input data too.\n\n" | |||
+ "Controls:\n" | |||
+ "lmb: Select region\n" | |||
+ "mmb: Move view\n" | |||
+ "rmb: Draws samples at full zoom.\n\n" | |||
+ "Left mouse also drags loop points. The Loop end marker defaults to the\n" | |||
+ "end of the sample.\n\n" | |||
+ "Note: The loading and saving of samples is not yet realtime safe"; | |||
} |
@@ -81,6 +81,9 @@ public: | |||
void SetPlayPos(long s) { m_Display->SetPlayPos(s); } | |||
int GetCurrentSample() { return (int)m_SampleNum->value(); } | |||
protected: | |||
const string GetHelpText(const string &loc); | |||
private: | |||
void UpdateSampleDisplay(int num); | |||
@@ -287,3 +287,14 @@ inline void SeqSelectorPluginGUI::cb_UseRange_i(Fl_Button* o, void* v) | |||
} | |||
void SeqSelectorPluginGUI::cb_UseRange(Fl_Button* o, void* v) | |||
{ ((SeqSelectorPluginGUI*)(o->parent()))->cb_UseRange_i(o,v); } | |||
const string SeqSelectorPluginGUI::GetHelpText(const string &loc){ | |||
return string("") | |||
+ "The SeqSelector is designed to allow you to syncronise and select up\n" | |||
+ "to 8 Sequencer or Matrix patterns into tracks. When the SeqSelector\n" | |||
+ "recieves a trigger (which could come from a master pattern, or a clock\n" | |||
+ "oscillator) it will briefly flash the next set of values to its outputs,\n" | |||
+ "triggering the next patterns on it's slave sequencers or matrix plugins.\n\n" | |||
+ "You can also specify a loop, which will be used if the \"use range\"\n" | |||
+ "button is activated. This is useful for auditioning sections of a track."; | |||
} |
@@ -72,6 +72,9 @@ public: | |||
void StreamOut(ostream &s); | |||
void StreamIn(istream &s); | |||
protected: | |||
const string GetHelpText(const string &loc); | |||
private: | |||
int m_LastLight; | |||
@@ -83,7 +83,7 @@ inline void SpiralPluginGUI::cb_Help_i(Fl_Button* o, void* v) | |||
{ | |||
if (m_HelpWin==NULL) | |||
{ | |||
int w=300,h=200; | |||
int w=330,h=200; | |||
m_HelpWin = new Fl_Double_Window(w,h,"Help"); | |||
Fl_Text_Display* text = new Fl_Text_Display(0,0,10,10); | |||
@@ -76,11 +76,11 @@ m_Mode(STOPM) | |||
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); | |||
} | |||
StreamPlugin::~StreamPlugin() | |||
{ | |||
cerr << "I'm deleted" << endl; | |||
} | |||
PluginInfo &StreamPlugin::Initialise(const HostInfo *Host) | |||
@@ -141,10 +141,7 @@ void StreamPlugin::Execute() | |||
m_Pos+=m_StreamDesc.PitchMod+CVPitch; | |||
m_GlobalPos+=m_StreamDesc.PitchMod+CVPitch; | |||
} | |||
//if (((StreamPluginGUI*)m_GUI)->visible()) | |||
// ((StreamPluginGUI*)m_GUI)->SetTime(GetTime()); | |||
//Joe must fix this. | |||
m_TimeOut=GetTime(); | |||
} | |||
} | |||
@@ -155,14 +152,11 @@ void StreamPlugin::ExecuteCommands() | |||
{ | |||
switch(m_AudioCH->GetCommand()) | |||
{ | |||
case (LOAD) : OpenStream(m_FileNameArg); break; | |||
case (RESTART) : Restart(); break; | |||
case (STOP) : Stop(); break; | |||
case (PLAY) : Play(); break; | |||
case (HALF) : m_StreamDesc.PitchMod/=2; break; | |||
case (RESET) : m_StreamDesc.PitchMod=1; break; | |||
case (DOUBLE) : m_StreamDesc.PitchMod*=2; break; | |||
case (NUDGE) : Nudge(); break; | |||
case (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; | |||
} | |||
} | |||
@@ -220,12 +214,10 @@ void StreamPlugin::OpenStream(const string &Name) | |||
m_StreamDesc.Pitch = m_StreamDesc.SampleRate/(float)m_HostInfo->SAMPLERATE; | |||
if (m_StreamDesc.Stereo) | |||
{ | |||
m_StreamDesc.Pitch*=2; | |||
//((StreamPluginGUI*)m_GUI)->SetMaxTime(GetLength()); | |||
m_StreamDesc.Pitch*=2; | |||
m_MaxTime=GetLength(); | |||
} | |||
//else ((StreamPluginGUI*)m_GUI)->SetMaxTime(GetLength()/2); | |||
//Joe this must use the chanel handler | |||
else m_MaxTime=GetLength()/2; | |||
} | |||
void StreamPlugin::Restart() | |||
@@ -44,7 +44,7 @@ class StreamPlugin : public SpiralPlugin | |||
public: | |||
enum Mode{PLAYM,STOPM}; | |||
enum GUICommands{LOAD,RESTART,STOP,PLAY,HALF,RESET,DOUBLE,NUDGE,SET_TIME}; | |||
enum GUICommands{NONE,LOAD,RESTART,STOP,PLAY,HALF,RESET,DOUBLE,NUDGE,SET_TIME}; | |||
StreamPlugin(); | |||
virtual ~StreamPlugin(); | |||
@@ -92,6 +92,7 @@ private: | |||
char m_FileNameArg[256]; | |||
float m_TimeArg; | |||
float m_TimeOut; | |||
float m_MaxTime; | |||
}; | |||
#endif |
@@ -32,13 +32,9 @@ char PitchLabel[256]; | |||
StreamPluginGUI::StreamPluginGUI(int w, int h,StreamPlugin *o,ChannelHandler *ch,const HostInfo *Info) : | |||
SpiralPluginGUI(w,h,o,ch) | |||
{ | |||
//int Width=20; | |||
//int Height=100; | |||
//What are Width and Height for. | |||
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); | |||
@@ -84,9 +80,6 @@ SpiralPluginGUI(w,h,o,ch) | |||
m_Nudge->callback((Fl_Callback*)cb_Nudge); | |||
add(m_Nudge); | |||
// Andy Preston changed | |||
// m_Volume = new Fl_Knob(170, 15, 50, 50, "Volume"); | |||
// to | |||
m_Volume = new Fl_Knob (180, 15, 50, 50, "Volume"); | |||
m_Volume->color(GUI_COLOUR); | |||
m_Volume->type(Fl_Knob::LINELIN); | |||
@@ -110,40 +103,7 @@ SpiralPluginGUI(w,h,o,ch) | |||
m_Pitch->callback((Fl_Callback*)cb_Pitch); | |||
add(m_Pitch); | |||
// Andy Preston changed | |||
// int k=4; | |||
// m_Display[0] = new Fl_SevenSeg(10, 20, 30, 60); | |||
// m_Display[0]->bar_width(k); | |||
// m_Display[0]->color(FL_WHITE); | |||
// m_Display[0]->color2(GUI_COLOUR); | |||
// add(m_Display[0]); | |||
// m_Display[1] = new Fl_SevenSeg(30, 20, 30, 60); | |||
// m_Display[1]->bar_width(k); | |||
// m_Display[1]->color(FL_WHITE); | |||
// m_Display[1]->color2(GUI_COLOUR); | |||
// add(m_Display[1]); | |||
// m_Display[2] = new Fl_SevenSeg(60, 20, 30, 60); | |||
// m_Display[2]->bar_width(k); | |||
// m_Display[2]->color(FL_WHITE); | |||
// m_Display[2]->color2(GUI_COLOUR); | |||
// add(m_Display[2]); | |||
// m_Display[3] = new Fl_SevenSeg(80, 20, 30, 60); | |||
// m_Display[3]->bar_width(k); | |||
// m_Display[3]->color(FL_WHITE); | |||
// m_Display[3]->color2(GUI_COLOUR); | |||
// add(m_Display[3]); | |||
// m_Display[4] = new Fl_SevenSeg(110, 20, 30, 60); | |||
// m_Display[4]->bar_width(k); | |||
// m_Display[4]->color(FL_WHITE); | |||
// m_Display[4]->color2(GUI_COLOUR); | |||
// add(m_Display[4]); | |||
// m_Display[5] = new Fl_SevenSeg(130, 20, 30, 60); | |||
// m_Display[5]->bar_width(k); | |||
// m_Display[5]->color(FL_WHITE); | |||
// m_Display[5]->color2(GUI_COLOUR); | |||
// add(m_Display[5]); | |||
// to | |||
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] -> bar_width (4); | |||
m_Display[dis] -> color (FL_WHITE); | |||
@@ -163,7 +123,6 @@ SpiralPluginGUI(w,h,o,ch) | |||
StreamPluginGUI::~StreamPluginGUI() | |||
{ | |||
cerr << "~StreamPluginGUI" << endl; | |||
} | |||
void StreamPluginGUI::Update() | |||
@@ -182,26 +141,9 @@ void StreamPluginGUI::Update() | |||
m_Display[0]->value((int)(t/600)%10); | |||
redraw(); | |||
} | |||
/*void StreamPluginGUI::SetTime() | |||
{ | |||
cerr << "foo" << endl; | |||
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")); | |||
} | |||
void StreamPluginGUI::UpdateValues(SpiralPlugin *o) | |||
{ | |||
@@ -219,8 +161,10 @@ inline void StreamPluginGUI::cb_Load_i(Fl_Button* o, void* v) | |||
if (fn && fn!='\0') | |||
{ | |||
strcpy(m_TextBuf,fn); | |||
m_GUICH->Set("FileName",m_TextBuf); | |||
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) | |||
@@ -244,7 +188,7 @@ void StreamPluginGUI::cb_Pitch(Fl_Slider* o, void* v) | |||
inline void StreamPluginGUI::cb_Loop_i(Fl_Button* o, void* v) //Why is this function named so. | |||
{ | |||
m_PitchValue*=2.0f; | |||
m_GUICH->SetCommand(StreamPlugin::DOUBLE); | |||
m_GUICH->Set("Pitch",m_PitchValue); | |||
sprintf(PitchLabel,"%1.3f ",m_PitchValue); | |||
m_Pitch->label(PitchLabel); | |||
m_Pitch->value(m_PitchValue+10); | |||
@@ -256,7 +200,7 @@ void StreamPluginGUI::cb_Loop(Fl_Button* o, void* v) | |||
inline void StreamPluginGUI::cb_Div_i(Fl_Button* o, void* v) | |||
{ | |||
m_PitchValue/=2.0f; | |||
m_GUICH->SetCommand(StreamPlugin::HALF); | |||
m_GUICH->Set("Pitch",m_PitchValue); | |||
sprintf(PitchLabel,"%1.3f ",m_PitchValue); | |||
m_Pitch->label(PitchLabel); | |||
m_Pitch->value(m_PitchValue+10); | |||
@@ -271,18 +215,25 @@ 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_GUICH->SetCommand(StreamPlugin::STOP); } | |||
{ | |||
m_TempPitch=m_PitchValue; | |||
m_PitchValue=0; | |||
m_GUICH->Set("Pitch",m_PitchValue); | |||
} | |||
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_GUICH->SetCommand(StreamPlugin::PLAY); } | |||
{ | |||
m_PitchValue=m_TempPitch; | |||
m_GUICH->Set("Pitch",m_PitchValue); | |||
} | |||
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->SetCommand(StreamPlugin::RESET); | |||
m_GUICH->Set("Pitch",1.0f); | |||
sprintf(PitchLabel,"%1.3f ",1.0); | |||
m_Pitch->label(PitchLabel); | |||
m_Pitch->value(11); | |||
@@ -307,3 +258,13 @@ inline void StreamPluginGUI::cb_Pos_i(Fl_Slider* o, void* 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" | |||
+ "use much memory. The track can be pitched for mixing.\n" | |||
+ "Operates pretty much like a media player such as XMMS (only wav\n" | |||
+ "format though).\n\n" | |||
+ "Note: Not realtime safe, if you're using JACK, use a client such as\n" | |||
+ "alsaplayer."; | |||
} |
@@ -45,6 +45,9 @@ public: | |||
//void SetTime(); | |||
void SetMaxTime(float t) { m_Pos->maximum(t); } | |||
protected: | |||
const string GetHelpText(const string &loc); | |||
private: | |||
Fl_Button* m_Load; | |||
@@ -67,6 +70,7 @@ private: | |||
char m_TextBuf[256]; | |||
float m_PitchValue; | |||
float m_TempPitch; | |||
//// Callbacks //// | |||
inline void cb_Load_i(Fl_Button* o, void* v); | |||
@@ -100,6 +100,7 @@ SpiralSynthModularInfo::SpiralSynthModularInfo() | |||
PLUGINVEC.push_back("XFadePlugin.so"); | |||
PLUGINVEC.push_back("DistributorPlugin.so"); | |||
PLUGINVEC.push_back("SplitterPlugin.so"); | |||
PLUGINVEC.push_back("StreamPlugin.so"); | |||
} | |||
void SpiralSynthModularInfo::StreamInPrefs(istream &s) | |||
@@ -41,14 +41,14 @@ if test $ac_arg_jack = "Y" ; then | |||
PLUGINLIST="AmpPlugin ControllerPlugin DelayPlugin EchoPlugin EnvFollowerPlugin \ | |||
EnvelopePlugin FilterPlugin MatrixPlugin MidiPlugin MixerPlugin MoogFilterPlugin \ | |||
NoteSnapPlugin OscillatorPlugin OutputPlugin RingModPlugin SVFilterPlugin \ | |||
SampleHoldPlugin ScopePlugin SmoothPlugin SplitterPlugin StereoMixerPlugin\ | |||
SampleHoldPlugin ScopePlugin SmoothPlugin SplitterPlugin StereoMixerPlugin StreamPlugin\ | |||
WaveTablePlugin LADSPAPlugin XFadePlugin PoshSamplerPlugin SeqSelectorPlugin\ | |||
DistributorPlugin LFOPlugin KeyboardPlugin DiskWriterPlugin JackPlugin" | |||
else | |||
PLUGINLIST="AmpPlugin ControllerPlugin DelayPlugin EchoPlugin EnvFollowerPlugin \ | |||
EnvelopePlugin FilterPlugin MatrixPlugin MidiPlugin MixerPlugin MoogFilterPlugin \ | |||
NoteSnapPlugin OscillatorPlugin OutputPlugin RingModPlugin SVFilterPlugin \ | |||
SampleHoldPlugin ScopePlugin SmoothPlugin SplitterPlugin StereoMixerPlugin\ | |||
SampleHoldPlugin ScopePlugin SmoothPlugin SplitterPlugin StereoMixerPlugin StreamPlugin\ | |||
WaveTablePlugin LADSPAPlugin XFadePlugin PoshSamplerPlugin SeqSelectorPlugin\ | |||
DistributorPlugin LFOPlugin KeyboardPlugin DiskWriterPlugin" | |||
fi | |||