-Updated GTrack: renameable and extra buttons, GMasterTrack BPM dial
parent
499fc93ffe
commit
63680a3ffb
|
@ -52,6 +52,16 @@ class Background : public Fl_Widget
|
||||||
int x, y, w, h;
|
int x, y, w, h;
|
||||||
const char* label;
|
const char* label;
|
||||||
|
|
||||||
|
void setLabel(const char* l)
|
||||||
|
{
|
||||||
|
free( (char*) label);
|
||||||
|
label = strdup( l );
|
||||||
|
}
|
||||||
|
const char* getLabel()
|
||||||
|
{
|
||||||
|
return label;
|
||||||
|
}
|
||||||
|
|
||||||
void draw()
|
void draw()
|
||||||
{
|
{
|
||||||
if (damage() & FL_DAMAGE_ALL)
|
if (damage() & FL_DAMAGE_ALL)
|
||||||
|
|
|
@ -84,8 +84,7 @@ void DiskWriter::writeMaster()
|
||||||
GMasterTrack* master = gui->getMasterTrack();
|
GMasterTrack* master = gui->getMasterTrack();
|
||||||
|
|
||||||
cJSON_AddNumberToObject( masterTrack, "fader", master->getVolume()->value() );
|
cJSON_AddNumberToObject( masterTrack, "fader", master->getVolume()->value() );
|
||||||
cJSON_AddNumberToObject( masterTrack, "bpm", gui->getMasterTrack()->bpm );
|
cJSON_AddNumberToObject( masterTrack, "bpm", gui->getMasterTrack()->getBpm() );
|
||||||
|
|
||||||
|
|
||||||
// scene names
|
// scene names
|
||||||
Avtk::ClipSelector* clipSelector = master->getClipSelector();
|
Avtk::ClipSelector* clipSelector = master->getClipSelector();
|
||||||
|
@ -108,9 +107,6 @@ void DiskWriter::writeMaster()
|
||||||
cJSON_AddNumberToObject( reverb, "damping", rev->damping() );
|
cJSON_AddNumberToObject( reverb, "damping", rev->damping() );
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//cJSON_AddNumberToObject( reverb, "wet", rev->wet() );
|
|
||||||
//cJSON_AddNumberToObject( reverb, "damping", rev->damping() );
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiskWriter::writeSession( std::string path, std::string sessionName )
|
void DiskWriter::writeSession( std::string path, std::string sessionName )
|
||||||
|
@ -122,11 +118,10 @@ void DiskWriter::writeSession( std::string path, std::string sessionName )
|
||||||
cJSON_AddNumberToObject( session, "version_minor", 0 );
|
cJSON_AddNumberToObject( session, "version_minor", 0 );
|
||||||
cJSON_AddNumberToObject( session, "version_patch", 0 );
|
cJSON_AddNumberToObject( session, "version_patch", 0 );
|
||||||
|
|
||||||
|
|
||||||
writeMaster();
|
writeMaster();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// add JSON "tracks" array
|
// add JSON "tracks" array
|
||||||
cJSON* trackArray = cJSON_CreateArray();
|
cJSON* trackArray = cJSON_CreateArray();
|
||||||
cJSON_AddItemToObject(session, "tracks", trackArray );
|
cJSON_AddItemToObject(session, "tracks", trackArray );
|
||||||
|
@ -168,13 +163,11 @@ void DiskWriter::writeSession( std::string path, std::string sessionName )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// write session.luppp JSON node to <path>/<sessionName>.luppp
|
// write session.luppp JSON node to <path>/<sessionName>.luppp
|
||||||
stringstream sessionDir;
|
stringstream sessionDir;
|
||||||
sessionDir << getenv("HOME") << "/" << sessionName;
|
sessionDir << getenv("HOME") << "/" << sessionName;
|
||||||
|
@ -192,13 +185,11 @@ void DiskWriter::writeSession( std::string path, std::string sessionName )
|
||||||
sessionLuppp << sessionDir.str() << "/session.luppp";
|
sessionLuppp << sessionDir.str() << "/session.luppp";
|
||||||
|
|
||||||
//cout << "Session dir: " << sessionDir.str() << "\n" << "Sample dir : " << sampleDir.str() << endl;
|
//cout << "Session dir: " << sessionDir.str() << "\n" << "Sample dir : " << sampleDir.str() << endl;
|
||||||
|
|
||||||
ofstream sessionFile;
|
ofstream sessionFile;
|
||||||
sessionFile.open ( sessionLuppp.str().c_str() );
|
sessionFile.open ( sessionLuppp.str().c_str() );
|
||||||
sessionFile << cJSON_Print( session );
|
sessionFile << cJSON_Print( session );
|
||||||
sessionFile.close();
|
sessionFile.close();
|
||||||
|
|
||||||
|
|
||||||
// write the sample JSON node to <path>/samples/sample.cfg
|
// write the sample JSON node to <path>/samples/sample.cfg
|
||||||
stringstream sampleConfig;
|
stringstream sampleConfig;
|
||||||
sampleConfig << sampleDir.str() << "/sample.cfg";
|
sampleConfig << sampleDir.str() << "/sample.cfg";
|
||||||
|
|
|
@ -100,7 +100,7 @@ void handleGuiEvents()
|
||||||
if ( availableRead >= sizeof(EventTimeBPM) ) {
|
if ( availableRead >= sizeof(EventTimeBPM) ) {
|
||||||
EventTimeBPM ev;
|
EventTimeBPM ev;
|
||||||
jack_ringbuffer_read( rbToGui, (char*)&ev, sizeof(EventTimeBPM) );
|
jack_ringbuffer_read( rbToGui, (char*)&ev, sizeof(EventTimeBPM) );
|
||||||
gui->getMasterTrack()->bpm = ev.bpm;
|
gui->getMasterTrack()->setBpm( ev.bpm );
|
||||||
} break; }
|
} break; }
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,16 +1,6 @@
|
||||||
|
|
||||||
#include "gmastertrack.hxx"
|
#include "gmastertrack.hxx"
|
||||||
|
|
||||||
/*
|
|
||||||
static void gmastertrack_reverb_cb(Fl_Widget *w, void *data)
|
|
||||||
{
|
|
||||||
int enable = ((Avtk::Reverb*)w)->getActive();
|
|
||||||
printf("reverb enable %i\n",enable);
|
|
||||||
EventFxReverb e = EventFxReverb( enable, 0.5, 0.5, 0.5 );
|
|
||||||
writeToDspRingbuffer( &e );
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
static void gmastertrack_button_callback(Fl_Widget *w, void *data) {
|
static void gmastertrack_button_callback(Fl_Widget *w, void *data) {
|
||||||
if ( strcmp( w->label(), "Metro" ) == 0 )
|
if ( strcmp( w->label(), "Metro" ) == 0 )
|
||||||
{
|
{
|
||||||
|
@ -51,8 +41,8 @@ GMasterTrack::GMasterTrack(int x, int y, int w, int h, const char* l ) :
|
||||||
tapTempo ( x + w * 2/4.f - 18, y + 426 + 41 * 0, 44,38, "Tap"),
|
tapTempo ( x + w * 2/4.f - 18, y + 426 + 41 * 0, 44,38, "Tap"),
|
||||||
metronomeButton( x + w * 2/4.f - 18, y + 426 + 41 * 1, 44, 38,"Metro"),
|
metronomeButton( x + w * 2/4.f - 18, y + 426 + 41 * 1, 44, 38,"Metro"),
|
||||||
|
|
||||||
tempoDial ( x + w * 2/4.f - 18, y + 426 + 41 * 2, 44, 38,"BPM"),
|
tempoDial ( x + w * 2/4.f - 18, y + 426 + 41 * 2, 45, 36,"BPM"),
|
||||||
aboutButton ( x + w * 2/4.f - 18, y + 426 + 41 * 3, 44, 38,"About"),
|
metroVol ( x + w * 2/4.f - 18, y + 426 + 41 * 3, 45, 36,"MtroVol"),
|
||||||
|
|
||||||
inputVolume(x + 9,y + 26 + 4, w - 18, 29,""),
|
inputVolume(x + 9,y + 26 + 4, w - 18, 29,""),
|
||||||
volume(x+106, y +425, 36, 166, "")
|
volume(x+106, y +425, 36, 166, "")
|
||||||
|
@ -65,10 +55,9 @@ GMasterTrack::GMasterTrack(int x, int y, int w, int h, const char* l ) :
|
||||||
|
|
||||||
tapTempo.callback( gmastertrack_button_callback, &ID );
|
tapTempo.callback( gmastertrack_button_callback, &ID );
|
||||||
metronomeButton.callback( gmastertrack_button_callback, 0 );
|
metronomeButton.callback( gmastertrack_button_callback, 0 );
|
||||||
//tapTempo.setBgColor( 0, 0, 0 );
|
|
||||||
//metronomeButton.setBgColor( 0, 0, 0 );
|
tempoDial.align( FL_ALIGN_CENTER );
|
||||||
//metronomeButton.setColor( 0.4, 0.4, 0.4 );
|
metroVol.align( FL_ALIGN_CENTER );
|
||||||
//metronomeButton.setOutlineColor( 0.4, 0.4, 0.4 );
|
|
||||||
|
|
||||||
for(int i = 0; i < 4; i++)
|
for(int i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
|
@ -92,9 +81,20 @@ GMasterTrack::GMasterTrack(int x, int y, int w, int h, const char* l ) :
|
||||||
end(); // close the group
|
end(); // close the group
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GMasterTrack::setBpm( int b )
|
||||||
|
{
|
||||||
|
bpm = b;
|
||||||
|
tempoDial.value( ( bpm - 60 ) / 140.f );
|
||||||
|
}
|
||||||
|
|
||||||
|
int GMasterTrack::getBpm()
|
||||||
|
{
|
||||||
|
return bpm;
|
||||||
|
}
|
||||||
|
|
||||||
void GMasterTrack::setTapTempo( bool b )
|
void GMasterTrack::setTapTempo( bool b )
|
||||||
{
|
{
|
||||||
//tapTempo.setHighlight( b );
|
tapTempo.setHighlight( b );
|
||||||
}
|
}
|
||||||
|
|
||||||
void GMasterTrack::setBarBeat(int b, int beat)
|
void GMasterTrack::setBarBeat(int b, int beat)
|
||||||
|
|
|
@ -30,25 +30,23 @@ class GMasterTrack : public Fl_Group
|
||||||
public:
|
public:
|
||||||
GMasterTrack(int x, int y, int w, int h, const char* l = 0 );
|
GMasterTrack(int x, int y, int w, int h, const char* l = 0 );
|
||||||
|
|
||||||
|
int getBpm();
|
||||||
|
void setBpm( int bpm );
|
||||||
void setTapTempo( bool b );
|
void setTapTempo( bool b );
|
||||||
void setBarBeat(int b, int beat);
|
void setBarBeat(int b, int beat);
|
||||||
|
|
||||||
// FIXME: refactor into time class?
|
|
||||||
int bpm;
|
|
||||||
|
|
||||||
Avtk::Volume* getInputVolume();
|
Avtk::Volume* getInputVolume();
|
||||||
Avtk::Volume* getVolume();
|
Avtk::Volume* getVolume();
|
||||||
Avtk::ClipSelector* getClipSelector();
|
Avtk::ClipSelector* getClipSelector();
|
||||||
|
|
||||||
~GMasterTrack();
|
~GMasterTrack();
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int ID;
|
int ID;
|
||||||
|
char* title;
|
||||||
|
|
||||||
int bar;
|
int bar;
|
||||||
|
int bpm;
|
||||||
char* title;
|
|
||||||
|
|
||||||
Avtk::Background bg;
|
Avtk::Background bg;
|
||||||
|
|
||||||
|
@ -60,7 +58,7 @@ class GMasterTrack : public Fl_Group
|
||||||
Avtk::Button tapTempo;
|
Avtk::Button tapTempo;
|
||||||
Avtk::LightButton metronomeButton;
|
Avtk::LightButton metronomeButton;
|
||||||
Avtk::Dial tempoDial;
|
Avtk::Dial tempoDial;
|
||||||
Avtk::Button aboutButton;
|
Avtk::Dial metroVol;
|
||||||
|
|
||||||
Avtk::LightButton* beatLights[4];
|
Avtk::LightButton* beatLights[4];
|
||||||
|
|
||||||
|
|
|
@ -20,9 +20,11 @@ GTrack::GTrack(int x, int y, int w, int h, const char* l ) :
|
||||||
volBox(x+5, y+422, 100, 172, ""),
|
volBox(x+5, y+422, 100, 172, ""),
|
||||||
volume(x+66, y +425, 36, 166, ""),
|
volume(x+66, y +425, 36, 166, ""),
|
||||||
|
|
||||||
side(x+11, y +427 + 0, 50, 25, "Side"),
|
active (x+11, y +427 + 0, 50, 25, "Active"),
|
||||||
post(x+21, y +435 + 50, 30, 30, "Post"),
|
side (x+11, y +427 + 27, 50, 25, "Side"),
|
||||||
rev (x+21, y +440 +100, 30, 30, "Verb")
|
recEnable(x+11, y +427 + 54, 50, 25, "Rec"),
|
||||||
|
post (x+21, y +435 + 70, 30, 30, "Post"),
|
||||||
|
rev (x+21, y +440 +110, 30, 30, "Verb")
|
||||||
{
|
{
|
||||||
ID = privateID++;
|
ID = privateID++;
|
||||||
|
|
||||||
|
@ -31,6 +33,9 @@ GTrack::GTrack(int x, int y, int w, int h, const char* l ) :
|
||||||
side.callback( gtrack_side_cb, this );
|
side.callback( gtrack_side_cb, this );
|
||||||
side.setColor( 0, 0.6, 1 );
|
side.setColor( 0, 0.6, 1 );
|
||||||
|
|
||||||
|
active.setColor( 0, 1.0, 0.0 );
|
||||||
|
recEnable.setColor( 1, 0.0, 0.0 );
|
||||||
|
|
||||||
rev.callback( gtrack_reverb_cb, this );
|
rev.callback( gtrack_reverb_cb, this );
|
||||||
post.callback( gtrack_post_cb, this );
|
post.callback( gtrack_post_cb, this );
|
||||||
|
|
||||||
|
@ -46,6 +51,31 @@ GTrack::GTrack(int x, int y, int w, int h, const char* l ) :
|
||||||
end(); // close the group
|
end(); // close the group
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int GTrack::handle( int event )
|
||||||
|
{
|
||||||
|
// highjack right-click on track title for renaming
|
||||||
|
if ( event == FL_PUSH )
|
||||||
|
{
|
||||||
|
if ( Fl::event_y() < y() + 20 )
|
||||||
|
{
|
||||||
|
if ( Fl::event_state(FL_BUTTON3) )
|
||||||
|
{
|
||||||
|
const char* name = fl_input( "Track name: ", "" );
|
||||||
|
if ( name )
|
||||||
|
{
|
||||||
|
bg.setLabel( name );
|
||||||
|
redraw();
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void gtrack_reverb_cb(Fl_Widget *w, void *data)
|
void gtrack_reverb_cb(Fl_Widget *w, void *data)
|
||||||
{
|
{
|
||||||
|
|
|
@ -40,6 +40,8 @@ class GTrack : public Fl_Group
|
||||||
free(title);
|
free(title);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int handle( int );
|
||||||
|
|
||||||
int ID;
|
int ID;
|
||||||
|
|
||||||
char* title;
|
char* title;
|
||||||
|
@ -54,6 +56,8 @@ class GTrack : public Fl_Group
|
||||||
|
|
||||||
Avtk::Volume volume;
|
Avtk::Volume volume;
|
||||||
|
|
||||||
|
Avtk::LightButton active;
|
||||||
|
Avtk::LightButton recEnable;
|
||||||
Avtk::LightButton side;
|
Avtk::LightButton side;
|
||||||
Avtk::Dial post;
|
Avtk::Dial post;
|
||||||
Avtk::Dial rev;
|
Avtk::Dial rev;
|
||||||
|
|
Loading…
Reference in New Issue