@@ -47,9 +47,11 @@ | |||
*/ | |||
#include "const.h" | |||
#include <stdlib.h> | |||
#include <stdio.h> | |||
#include <string.h> | |||
#include "Chain.H" | |||
#include "Module.H" | |||
#include "Meter_Module.H" | |||
#include "JACK_Module.H" | |||
@@ -60,62 +62,21 @@ | |||
#include <Fl/Fl_Box.H> | |||
#include <FL/Fl_Menu.H> | |||
#include <FL/fl_ask.H> | |||
#include <stdlib.h> | |||
#include "util/debug.h" | |||
#include <stdio.h> | |||
#include <FL/fl_draw.H> | |||
#include "Engine/Engine.H" | |||
#include <FL/Fl_Flip_Button.H> | |||
#include <FL/Fl_Tabs.H> | |||
#include "FL/Fl_Flowpack.H" | |||
#include "FL/Fl_Scroll.H" | |||
#include "FL/Fl_Packscroller.H" | |||
#include <string.h> | |||
#include <FL/fl_draw.H> | |||
#include "FL/menu_popup.H" | |||
#include "FL/test_press.H" | |||
#include "util/debug.h" | |||
#include "Engine/Engine.H" | |||
#include "Mixer_Strip.H" | |||
#include <dsp.h> | |||
#include <FL/Fl_Flip_Button.H> | |||
void | |||
Chain::get ( Log_Entry &e ) const | |||
{ | |||
e.add( ":strip", strip() ); | |||
e.add( ":tab", tab_button->value() ? "controls" : "chain" ); | |||
} | |||
void | |||
Chain::set ( Log_Entry &e ) | |||
{ | |||
for ( int i = 0; i < e.size(); ++i ) | |||
{ | |||
const char *s, *v; | |||
e.get( i, &s, &v ); | |||
if ( ! strcmp( s, ":tab" ) ) | |||
{ | |||
tab_button->value( strcmp( v, "controls" ) == 0 ); | |||
tab_button->do_callback(); | |||
} | |||
else if ( ! strcmp( s, ":strip" ) ) | |||
{ | |||
int i; | |||
sscanf( v, "%X", &i ); | |||
Mixer_Strip *t = (Mixer_Strip*)Loggable::find( i ); | |||
assert( t ); | |||
t->chain( this ); | |||
} | |||
} | |||
} | |||
@@ -220,6 +181,42 @@ Chain::~Chain ( ) | |||
void | |||
Chain::get ( Log_Entry &e ) const | |||
{ | |||
e.add( ":strip", strip() ); | |||
e.add( ":tab", tab_button->value() ? "controls" : "chain" ); | |||
} | |||
void | |||
Chain::set ( Log_Entry &e ) | |||
{ | |||
for ( int i = 0; i < e.size(); ++i ) | |||
{ | |||
const char *s, *v; | |||
e.get( i, &s, &v ); | |||
if ( ! strcmp( s, ":tab" ) ) | |||
{ | |||
tab_button->value( strcmp( v, "controls" ) == 0 ); | |||
tab_button->do_callback(); | |||
} | |||
else if ( ! strcmp( s, ":strip" ) ) | |||
{ | |||
int i; | |||
sscanf( v, "%X", &i ); | |||
Mixer_Strip *t = (Mixer_Strip*)Loggable::find( i ); | |||
assert( t ); | |||
t->chain( this ); | |||
} | |||
} | |||
} | |||
void | |||
Chain::log_children ( void ) | |||
{ | |||
@@ -287,18 +284,6 @@ void Chain::cb_handle(Fl_Widget* o) { | |||
control_tab->show(); | |||
} | |||
} | |||
/* if ( o == head_button ) */ | |||
/* { */ | |||
/* Module *m = Module::pick_plugin(); */ | |||
/* insert_before( (Module*)modules_pack->child( 0 ), m ); */ | |||
/* } */ | |||
/* else if ( o == tail_button ) */ | |||
/* { */ | |||
/* Module *m = Module::pick_plugin(); */ | |||
/* insert_before( 0, m ); */ | |||
/* } */ | |||
} | |||
void Chain::cb_handle(Fl_Widget* o, void* v) { | |||
@@ -444,12 +429,6 @@ Chain::name ( const char *name ) | |||
module( i )->handle_chain_name_changed(); | |||
} | |||
#include "FL/menu_popup.H" | |||
bool | |||
Chain::add ( Module *m ) | |||
{ | |||
@@ -685,6 +664,14 @@ Chain::build_process_queue ( void ) | |||
/* } */ | |||
} | |||
void | |||
Chain::strip ( Mixer_Strip * ms ) | |||
{ | |||
_strip = ms; | |||
} | |||
void | |||
Chain::draw ( void ) | |||
{ | |||
@@ -705,8 +692,6 @@ Chain::resize ( int X, int Y, int W, int H ) | |||
controls_pack->size( W, controls_pack->h() ); | |||
} | |||
#include "FL/test_press.H" | |||
int | |||
Chain::handle ( int m ) | |||
{ | |||
@@ -778,12 +763,12 @@ Chain::handle ( int m ) | |||
return Fl_Group::handle( m ); | |||
} | |||
void | |||
Chain::strip ( Mixer_Strip * ms ) | |||
{ | |||
_strip = ms; | |||
} | |||
/**********/ | |||
/* Engine */ | |||
/**********/ | |||
void | |||
Chain::process ( nframes_t nframes, void *v ) | |||
@@ -37,41 +37,33 @@ class Controller_Module; | |||
class Chain : public Fl_Group, public Loggable { | |||
Fl_Pack *modules_pack; | |||
Fl_Flowpack *controls_pack; | |||
Fl_Flip_Button *tab_button; | |||
Fl_Flowpack *controls_pack; | |||
Fl_Group *chain_tab; | |||
Fl_Group *control_tab; | |||
Fl_Pack *modules_pack; | |||
void cb_handle(Fl_Widget*); | |||
static void cb_handle(Fl_Widget*, void*); | |||
Mixer_Strip *_strip; | |||
const char *_name; | |||
/* int _ins; */ | |||
/* int _outs; */ | |||
std::list<Module*> process_queue; | |||
Mixer_Strip *_strip; | |||
std::vector <Module::Port> scratch_port; | |||
// sample_t **_buffer; | |||
// int _nbuffers; | |||
Engine *_engine; | |||
Fl_Callback *_configure_outputs_callback; | |||
void *_configure_outputs_userdata; | |||
const char *_name; | |||
void draw_connections ( Module *m ); | |||
private: | |||
std::list<Module*> process_queue; | |||
void cb_handle(Fl_Widget*); | |||
static void cb_handle(Fl_Widget*, void*); | |||
void draw_connections ( Module *m ); | |||
void build_process_queue ( void ); | |||
void add_to_process_queue ( Module *m ); | |||
std::vector <Module::Port> scratch_port; | |||
Engine *_engine; | |||
static void process ( nframes_t, void * ); | |||
void process ( nframes_t ); | |||
@@ -80,11 +72,14 @@ protected: | |||
void get ( Log_Entry &e ) const; | |||
void set ( Log_Entry &e ); | |||
int handle ( int m ); | |||
void draw ( void ); | |||
public: | |||
Chain ( int X, int Y, int W, int H, const char *L = 0 ); | |||
Chain ( ); | |||
virtual ~Chain ( ); | |||
int handle ( int m ); | |||
void draw ( void ); | |||
void resize ( int X, int Y, int W, int H ); | |||
Mixer_Strip *strip ( void ) const { return _strip; } | |||
@@ -95,17 +90,8 @@ public: | |||
void configure_ports ( void ); | |||
int required_buffers ( void ); | |||
Chain ( int X, int Y, int W, int H, const char *L = 0 ); | |||
Chain ( ); | |||
virtual ~Chain ( ); | |||
bool can_support_input_channels ( int n ); | |||
/* void ins ( int i ) { _ins = i; } */ | |||
/* void outs ( int i ) { _outs = i; } */ | |||
/* int ins ( void ) const { return _ins; } */ | |||
/* int outs ( void ) const { return _outs; } */ | |||
int modules ( void ) const { return modules_pack->children(); } | |||
Module *module ( int n ) const { return (Module*)modules_pack->child( n ); } | |||
void remove ( Module *m ); | |||
@@ -17,21 +17,27 @@ | |||
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | |||
/*******************************************************************************/ | |||
#include "const.h" | |||
#include "Controller_Module.H" | |||
#include <stdio.h> | |||
#include <FL/Fl.H> | |||
#include "FL/Fl_Value_SliderX.H" | |||
#include <FL/Fl_Box.H> | |||
#include <FL/Fl_Counter.H> | |||
#include "FL/Fl_Arc_Dial.H" | |||
#include <FL/Fl_Menu_Item.H> | |||
#include <FL/Fl_Menu_Button.H> | |||
#include <FL/Fl_Menu_.H> | |||
#include "FL/Fl_Light_Button.H" | |||
#include <FL/Fl_Light_Button.H> | |||
#include "FL/Boxtypes.H" | |||
#include <FL/fl_draw.H> | |||
#include "FL/Fl_Arc_Dial.H" | |||
#include "FL/Fl_Labelpad_Group.H" | |||
#include <stdio.h> | |||
#include "FL/Fl_Value_SliderX.H" | |||
#include "FL/test_press.H" | |||
#include "FL/menu_popup.H" | |||
#include "Engine/Engine.H" | |||
#include "Chain.H" | |||
@@ -41,6 +47,38 @@ const float CONTROL_UPDATE_FREQ = 0.1f; | |||
Controller_Module::Controller_Module ( bool is_default ) : Module( is_default, 50, 100, name() ) | |||
{ | |||
// label( "" ); | |||
box( FL_NO_BOX ); | |||
_pad = true; | |||
control = 0; | |||
control_value =0.0f; | |||
add_port( Port( this, Port::OUTPUT, Port::CONTROL ) ); | |||
_mode = GUI; | |||
// mode( GUI ); | |||
// mode( CV ); | |||
// configure_inputs( 1 ); | |||
end(); | |||
Fl::add_timeout( CONTROL_UPDATE_FREQ, update_cb, this ); | |||
log_create(); | |||
} | |||
Controller_Module::~Controller_Module ( ) | |||
{ | |||
Fl::remove_timeout( update_cb, this ); | |||
log_destroy(); | |||
} | |||
void | |||
Controller_Module::get ( Log_Entry &e ) const | |||
{ | |||
@@ -107,72 +145,39 @@ Controller_Module::set ( Log_Entry &e ) | |||
Controller_Module::Controller_Module ( bool is_default ) : Module( is_default, 50, 100, name() ) | |||
{ | |||
// label( "" ); | |||
box( FL_NO_BOX ); | |||
_pad = true; | |||
control = 0; | |||
control_value =0.0f; | |||
add_port( Port( this, Port::OUTPUT, Port::CONTROL ) ); | |||
_mode = GUI; | |||
// mode( GUI ); | |||
// mode( CV ); | |||
// configure_inputs( 1 ); | |||
end(); | |||
Fl::add_timeout( CONTROL_UPDATE_FREQ, update_cb, this ); | |||
log_create(); | |||
} | |||
Controller_Module::~Controller_Module ( ) | |||
{ | |||
Fl::remove_timeout( update_cb, this ); | |||
log_destroy(); | |||
} | |||
void | |||
Controller_Module::update_cb ( void *v ) | |||
Controller_Module::mode ( Mode m ) | |||
{ | |||
((Controller_Module*)v)->update_cb(); | |||
} | |||
void | |||
Controller_Module::update_cb ( void ) | |||
{ | |||
Fl::repeat_timeout( CONTROL_UPDATE_FREQ, update_cb, this ); | |||
if( mode() != CV && m == CV ) | |||
{ | |||
if ( control_output[0].connected() ) | |||
{ | |||
chain()->engine()->lock(); | |||
if ( control && control_output[0].connected() ) | |||
control->value(control_value); | |||
} | |||
Port *p = control_output[0].connected_port(); | |||
void | |||
Controller_Module::cb_handle ( Fl_Widget *w, void *v ) | |||
{ | |||
((Controller_Module*)v)->cb_handle( w ); | |||
} | |||
JACK::Port po( chain()->engine(), JACK::Port::Input, p->name(), 0, "CV" ); | |||
void | |||
Controller_Module::cb_handle ( Fl_Widget *w ) | |||
{ | |||
control_value = ((Fl_Valuator*)w)->value(); | |||
if ( control_output[0].connected() ) | |||
if ( po.valid() ) | |||
{ | |||
jack_input.push_back( po ); | |||
} | |||
chain()->engine()->unlock(); | |||
} | |||
} | |||
else if ( mode() == CV && m == GUI ) | |||
{ | |||
control_output[0].control_value( control_value ); | |||
Port *p = control_output[0].connected_port(); | |||
Module *m = p->module(); | |||
chain()->engine()->lock(); | |||
m->handle_control_changed( p ); | |||
jack_input.back().shutdown(); | |||
jack_input.pop_back(); | |||
chain()->engine()->unlock(); | |||
} | |||
_mode = m ; | |||
} | |||
void | |||
@@ -221,9 +226,6 @@ Controller_Module::connect_to ( Port *p ) | |||
o->value(1); | |||
o->textsize(14); | |||
// o->type( FL_VERTICAL ); | |||
// o->type(1); | |||
if ( p->hints.ranged ) | |||
{ | |||
o->minimum( p->hints.maximum ); | |||
@@ -244,8 +246,6 @@ Controller_Module::connect_to ( Port *p ) | |||
} | |||
o->box( FL_BURNISHED_OVAL_BOX ); | |||
// o->box( FL_OVAL_BOX ); | |||
// o->type( FL_FILL_DIAL ); | |||
o->color( fl_darker( fl_darker( FL_GRAY ) ) ); | |||
o->selection_color( FL_WHITE ); | |||
o->value( p->control_value() ); | |||
@@ -273,6 +273,8 @@ Controller_Module::connect_to ( Port *p ) | |||
} | |||
} | |||
void | |||
Controller_Module::resize ( int X, int Y, int W, int H ) | |||
{ | |||
@@ -284,6 +286,40 @@ Controller_Module::resize ( int X, int Y, int W, int H ) | |||
} | |||
} | |||
void | |||
Controller_Module::update_cb ( void *v ) | |||
{ | |||
((Controller_Module*)v)->update_cb(); | |||
} | |||
void | |||
Controller_Module::update_cb ( void ) | |||
{ | |||
Fl::repeat_timeout( CONTROL_UPDATE_FREQ, update_cb, this ); | |||
if ( control && control_output[0].connected() ) | |||
control->value(control_value); | |||
} | |||
void | |||
Controller_Module::cb_handle ( Fl_Widget *w, void *v ) | |||
{ | |||
((Controller_Module*)v)->cb_handle( w ); | |||
} | |||
void | |||
Controller_Module::cb_handle ( Fl_Widget *w ) | |||
{ | |||
control_value = ((Fl_Valuator*)w)->value(); | |||
if ( control_output[0].connected() ) | |||
{ | |||
control_output[0].control_value( control_value ); | |||
Port *p = control_output[0].connected_port(); | |||
Module *m = p->module(); | |||
m->handle_control_changed( p ); | |||
} | |||
} | |||
void | |||
Controller_Module::menu_cb ( Fl_Widget *w, void *v ) | |||
@@ -306,9 +342,6 @@ Controller_Module::menu_cb ( const Fl_Menu_ *m ) | |||
mode( CV ); | |||
} | |||
#include "FL/test_press.H" | |||
#include "FL/menu_popup.H" | |||
/** build the context menu for this control */ | |||
Fl_Menu_Button & | |||
Controller_Module::menu ( void ) | |||
@@ -357,43 +390,9 @@ Controller_Module::handle ( int m ) | |||
void | |||
Controller_Module::mode ( Mode m ) | |||
{ | |||
if( mode() != CV && m == CV ) | |||
{ | |||
if ( control_output[0].connected() ) | |||
{ | |||
chain()->engine()->lock(); | |||
// char name[256]; | |||
// snprintf( name, sizeof( name ), "%s-CV", p->name() ); | |||
Port *p = control_output[0].connected_port(); | |||
JACK::Port po( chain()->engine(), JACK::Port::Input, p->name(), 0, "CV" ); | |||
if ( po.valid() ) | |||
{ | |||
jack_input.push_back( po ); | |||
} | |||
chain()->engine()->unlock(); | |||
} | |||
} | |||
else if ( mode() == CV && m == GUI ) | |||
{ | |||
chain()->engine()->lock(); | |||
jack_input.back().shutdown(); | |||
jack_input.pop_back(); | |||
chain()->engine()->unlock(); | |||
} | |||
_mode = m ; | |||
} | |||
/**********/ | |||
/* Engine */ | |||
/**********/ | |||
void | |||
Controller_Module::process ( void ) | |||
@@ -50,7 +50,6 @@ public: | |||
void mode ( Mode v ); | |||
Controller_Module ( bool is_default = false ); | |||
// Controller_Module ( int W, int H, const char *L=0 ); | |||
virtual ~Controller_Module ( ); | |||
const char *name ( void ) const { return "Controller"; } | |||
@@ -67,24 +66,21 @@ public: | |||
LOG_CREATE_FUNC( Controller_Module ); | |||
void resize ( int, int, int, int ); | |||
void process ( void ); | |||
protected: | |||
void get ( Log_Entry &e ) const; | |||
void set ( Log_Entry &e ); | |||
// virtual void draw ( void ); | |||
virtual void process ( void ); | |||
virtual void draw ( void ) | |||
void draw ( void ) | |||
{ | |||
draw_box(); | |||
Fl_Group::draw(); | |||
} | |||
virtual int handle ( int m ); | |||
int handle ( int m ); | |||
void resize ( int, int, int, int ); | |||
protected: | |||
void get ( Log_Entry &e ) const; | |||
void set ( Log_Entry &e ); | |||
private: | |||
@@ -17,11 +17,13 @@ | |||
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | |||
/*******************************************************************************/ | |||
#include "Gain_Module.H" | |||
#include <math.h> | |||
#include <dsp.h> | |||
#include "Gain_Module.H" | |||
Gain_Module::Gain_Module ( ) | |||
: Module ( 50, 24, name() ) | |||
{ | |||
@@ -32,7 +34,6 @@ Gain_Module::Gain_Module ( ) | |||
p.hints.type = Port::Hints::LOGARITHMIC; | |||
p.hints.ranged = true; | |||
p.hints.minimum = -70.0f; | |||
// p.hints.maximum = HUGE; | |||
p.hints.maximum = 6.0f; | |||
p.hints.default_value = 0.0f; | |||
@@ -41,8 +42,6 @@ Gain_Module::Gain_Module ( ) | |||
add_port( p ); | |||
// color( FL_BLACK ); | |||
end(); | |||
log_create(); | |||
@@ -67,11 +66,6 @@ Gain_Module::configure_inputs ( int n ) | |||
{ | |||
add_port( Port( this, Port::INPUT, Port::AUDIO ) ); | |||
add_port( Port( this, Port::OUTPUT, Port::AUDIO ) ); | |||
// add_port( Port( this, Port::INPUT, Port::CONTROL ) ); | |||
/* Port p( Port::OUTPUT, Port::CONTROL, "dB level" ); */ | |||
/* p.hints.type = Port::Hints::LOGARITHMIC; */ | |||
/* add_port( p ); */ | |||
} | |||
return true; | |||
@@ -79,6 +73,10 @@ Gain_Module::configure_inputs ( int n ) | |||
/**********/ | |||
/* Engine */ | |||
/**********/ | |||
void | |||
Gain_Module::process ( void ) | |||
{ | |||
@@ -17,14 +17,17 @@ | |||
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | |||
/*******************************************************************************/ | |||
#include "JACK_Module.H" | |||
#include <FL/Fl_Single_Window.H> | |||
#include "const.h" | |||
#include "Engine/Engine.H" | |||
#include "dsp.h" | |||
#include <string.h> | |||
#include "dsp.h" | |||
#include "Engine/Engine.H" | |||
#include "Chain.H" | |||
#include "JACK_Module.H" | |||
JACK_Module::JACK_Module ( ) | |||
@@ -148,7 +151,6 @@ JACK_Module::configure_outputs ( int n ) | |||
bool | |||
JACK_Module::initialize ( void ) | |||
{ | |||
// configure_inputs( 1 ); | |||
return true; | |||
} | |||
@@ -196,6 +198,10 @@ JACK_Module::handle_chain_name_changed ( void ) | |||
/**********/ | |||
/* Engine */ | |||
/**********/ | |||
void | |||
JACK_Module::process ( void ) | |||
{ | |||
@@ -19,29 +19,68 @@ | |||
#include "Meter_Indicator_Module.H" | |||
#include <stdio.h> | |||
#include <FL/Fl.H> | |||
#include <FL/Fl_Value_Slider.H> | |||
#include <FL/Fl_Box.H> | |||
#include <FL/fl_draw.H> | |||
#include <FL/Fl_Counter.H> | |||
#include "FL/Fl_Arc_Dial.H" | |||
#include "FL/Fl_Light_Button.H" | |||
#include <FL/Fl_Light_Button.H> | |||
#include "FL/Boxtypes.H" | |||
#include <FL/fl_draw.H> | |||
#include "FL/Fl_Arc_Dial.H" | |||
#include "FL/Fl_Labelpad_Group.H" | |||
#include <stdio.h> | |||
#include "FL/Fl_Scalepack.H" | |||
#include "Engine/Engine.H" | |||
#include "Chain.H" | |||
#include "DPM.H" | |||
#include "FL/Fl_Scalepack.H" | |||
#include "FL/test_press.H" | |||
const float CONTROL_UPDATE_FREQ = 0.1f; | |||
#include "FL/test_press.H" | |||
Meter_Indicator_Module::Meter_Indicator_Module ( bool is_default ) | |||
: Module ( is_default, 50, 100, name() ) | |||
{ | |||
box( FL_NO_BOX ); | |||
_pad = true; | |||
control = 0; | |||
control_value = 0; | |||
add_port( Port( this, Port::INPUT, Port::CONTROL ) ); | |||
dpm_pack = new Fl_Scalepack( x(), y(), w(), h() ); | |||
dpm_pack->type( FL_HORIZONTAL ); | |||
control_value = new float[1]; | |||
*control_value = -70.0f; | |||
end(); | |||
Fl::add_timeout( CONTROL_UPDATE_FREQ, update_cb, this ); | |||
} | |||
Meter_Indicator_Module::~Meter_Indicator_Module ( ) | |||
{ | |||
if ( control_value ) | |||
{ | |||
delete[] control_value; | |||
control_value = NULL; | |||
} | |||
Fl::remove_timeout( update_cb, this ); | |||
log_destroy(); | |||
} | |||
void | |||
Meter_Indicator_Module::get ( Log_Entry &e ) const | |||
@@ -92,43 +131,6 @@ Meter_Indicator_Module::set ( Log_Entry &e ) | |||
Meter_Indicator_Module::Meter_Indicator_Module ( bool is_default ) | |||
: Module ( is_default, 50, 100, name() ) | |||
{ | |||
box( FL_NO_BOX ); | |||
_pad = true; | |||
control = 0; | |||
control_value = 0; | |||
add_port( Port( this, Port::INPUT, Port::CONTROL ) ); | |||
dpm_pack = new Fl_Scalepack( x(), y(), w(), h() ); | |||
dpm_pack->type( FL_HORIZONTAL ); | |||
control_value = new float[1]; | |||
*control_value = -70.0f; | |||
end(); | |||
Fl::add_timeout( CONTROL_UPDATE_FREQ, update_cb, this ); | |||
} | |||
Meter_Indicator_Module::~Meter_Indicator_Module ( ) | |||
{ | |||
if ( control_value ) | |||
{ | |||
delete[] control_value; | |||
control_value = NULL; | |||
} | |||
Fl::remove_timeout( update_cb, this ); | |||
log_destroy(); | |||
} | |||
void | |||
Meter_Indicator_Module::update_cb ( void *v ) | |||
{ | |||
@@ -186,17 +188,15 @@ Meter_Indicator_Module::connect_to ( Port *p ) | |||
{ | |||
control_input[0].connect_to( p ); | |||
/* else if ( p->hints.type == Module::Port::Hints::LOGARITHMIC ) */ | |||
/* { */ | |||
{ | |||
DPM *o = new DPM( x(), y(), this->w(), h() ); | |||
o->type( FL_VERTICAL ); | |||
align( (Fl_Align)(FL_ALIGN_CENTER | FL_ALIGN_INSIDE ) ); | |||
DPM *o = new DPM( x(), y(), this->w(), h() ); | |||
o->type( FL_VERTICAL ); | |||
align( (Fl_Align)(FL_ALIGN_CENTER | FL_ALIGN_INSIDE ) ); | |||
dpm_pack->add( o ); | |||
} | |||
dpm_pack->add( o ); | |||
} | |||
int | |||
Meter_Indicator_Module::handle ( int m ) | |||
{ | |||
@@ -251,6 +251,10 @@ Meter_Indicator_Module::handle_control_changed ( Port *p ) | |||
} | |||
} | |||
/**********/ | |||
/* Engine */ | |||
/**********/ | |||
void | |||
Meter_Indicator_Module::process ( void ) | |||
{ | |||
@@ -17,15 +17,19 @@ | |||
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | |||
/*******************************************************************************/ | |||
#include "Meter_Module.H" | |||
#include "DPM.H" | |||
#include "const.h" | |||
#include <math.h> | |||
#include <FL/Fl.H> | |||
#include <FL/Fl_Single_Window.H> | |||
#include <FL/Fl_Scalepack.H> | |||
#include "JACK/Port.H" | |||
#include <math.h> | |||
#include "FL/Fl_Scalepack.H" | |||
#include "FL/test_press.H" | |||
#include "Meter_Module.H" | |||
#include "DPM.H" | |||
#include "JACK/Port.H" | |||
const float METER_UPDATE_FREQ = 0.1f; | |||
@@ -152,6 +156,8 @@ Meter_Module::configure_inputs ( int n ) | |||
return true; | |||
} | |||
int | |||
Meter_Module::handle ( int m ) | |||
{ | |||
@@ -173,6 +179,10 @@ Meter_Module::handle ( int m ) | |||
/**********/ | |||
/* Engine */ | |||
/**********/ | |||
static float | |||
get_peak_sample ( const sample_t* buf, nframes_t nframes ) | |||
{ | |||
@@ -372,7 +372,10 @@ Mixer::rows ( int n ) | |||
sh = (scroll->h() - 18) / n; | |||
if ( sh < Mixer_Strip::min_h() ) | |||
{ | |||
rows( ( scroll->h() - 18 ) / Mixer_Strip::min_h() ); | |||
return; | |||
} | |||
int tw = 0; | |||
@@ -447,7 +450,7 @@ Mixer::snapshot ( void ) | |||
void | |||
Mixer::new_strip ( void ) | |||
{ | |||
add( new Mixer_Strip( get_unique_track_name( "Unnamed" ), 1 ) ); | |||
add( new Mixer_Strip( get_unique_track_name( "Unnamed" ) ) ); | |||
} | |||
bool | |||
@@ -55,11 +55,54 @@ extern Mixer *mixer; | |||
/* add a new mixer strip (with default configuration) */ | |||
Mixer_Strip::Mixer_Strip( const char *strip_name ) : Fl_Group( 0, 0, 120, 600 ) | |||
{ | |||
label( strdup( strip_name ) ); | |||
labeltype( FL_NO_LABEL ); | |||
init(); | |||
chain( new Chain() ); | |||
_chain->initialize_with_default(); | |||
_chain->configure_ports(); | |||
color( (Fl_Color)rand() ); | |||
// name( strdup( strip_name ) ); | |||
log_create(); | |||
} | |||
/* virgin strip created from journal */ | |||
Mixer_Strip::Mixer_Strip() : Fl_Group( 0, 0, 120, 600 ) | |||
{ | |||
init(); | |||
log_create(); | |||
} | |||
Mixer_Strip::~Mixer_Strip ( ) | |||
{ | |||
DMESSAGE( "Destroying mixer strip" ); | |||
delete _chain; | |||
_chain = NULL; | |||
log_destroy(); | |||
mixer->remove( this ); | |||
} | |||
void | |||
Mixer_Strip::get ( Log_Entry &e ) const | |||
{ | |||
e.add( ":name", name() ); | |||
e.add( ":width", prepost_button->value() ? "wide" : "narrow" ); | |||
e.add( ":width", width_button->value() ? "wide" : "narrow" ); | |||
e.add( ":tab", tab_button->value() ? "signal" : "fader" ); | |||
e.add( ":color", (unsigned long)color()); | |||
} | |||
@@ -77,8 +120,8 @@ Mixer_Strip::set ( Log_Entry &e ) | |||
name( v ); | |||
else if ( ! strcmp( s, ":width" ) ) | |||
{ | |||
prepost_button->value( strcmp( v, "wide" ) == 0 ); | |||
prepost_button->do_callback(); | |||
width_button->value( strcmp( v, "wide" ) == 0 ); | |||
width_button->do_callback(); | |||
} | |||
else if ( ! strcmp( s, ":tab" ) ) | |||
{ | |||
@@ -145,46 +188,6 @@ Mixer_Strip::chain ( Chain *c ) | |||
meter_indicator->chain( c ); | |||
} | |||
/* add a new mixer strip (with default configuration) */ | |||
Mixer_Strip::Mixer_Strip( const char *strip_name, int channels ) : Fl_Group( 0, 0, 120, 600 ) | |||
{ | |||
label( strdup( strip_name ) ); | |||
labeltype( FL_NO_LABEL ); | |||
init(); | |||
chain( new Chain() ); | |||
_chain->initialize_with_default(); | |||
_chain->configure_ports(); | |||
color( (Fl_Color)rand() ); | |||
// name( strdup( strip_name ) ); | |||
log_create(); | |||
} | |||
/* virgin strip created from journal */ | |||
Mixer_Strip::Mixer_Strip() : Fl_Group( 0, 0, 120, 600 ) | |||
{ | |||
init(); | |||
log_create(); | |||
} | |||
Mixer_Strip::~Mixer_Strip ( ) | |||
{ | |||
DMESSAGE( "Destroying mixer strip" ); | |||
delete _chain; | |||
_chain = NULL; | |||
log_destroy(); | |||
mixer->remove( this ); | |||
} | |||
void Mixer_Strip::cb_handle(Fl_Widget* o) { | |||
// parent()->parent()->damage( FL_DAMAGE_ALL, x(), y(), w(), h() ); | |||
@@ -220,7 +223,7 @@ void Mixer_Strip::cb_handle(Fl_Widget* o) { | |||
} | |||
else if ( o == name_field ) | |||
name( name_field->value() ); | |||
else if ( o == prepost_button ) | |||
else if ( o == width_button ) | |||
{ | |||
if ( ((Fl_Button*)o)->value() ) | |||
size( 300, h() ); | |||
@@ -352,7 +355,7 @@ Mixer_Strip::init ( ) | |||
o->end(); | |||
} // Fl_Group* o | |||
{ Fl_Flip_Button* o = prepost_button = new Fl_Flip_Button(61, 183, 45, 22, "narrow/wide"); | |||
{ Fl_Flip_Button* o = width_button = new Fl_Flip_Button(61, 183, 45, 22, "narrow/wide"); | |||
o->type(1); | |||
o->labelsize(14); | |||
o->callback( ((Fl_Callback*)cb_handle), this ); | |||
@@ -54,8 +54,7 @@ public: | |||
static int min_h ( void ) { return 250; } | |||
Mixer_Strip(int X, int Y, int W, int H, const char *L = 0); | |||
Mixer_Strip( const char *name, int channels ); | |||
Mixer_Strip( const char *strip_name ); | |||
Mixer_Strip(); /* for log create */ | |||
virtual ~Mixer_Strip(); | |||
@@ -77,14 +76,12 @@ public: | |||
void update ( void ); | |||
// int channels ( void ) const { return _in.size(); } | |||
void name ( const char *name ); | |||
const char *name ( void ) const { return label(); } | |||
private: | |||
// Fl_Value_Slider *gain_slider; | |||
Fl_Flip_Button *prepost_button; | |||
Fl_Flip_Button *width_button; | |||
Fl_Flip_Button *tab_button; | |||
Fl_Button *close_button; | |||
Fl_Button *left_button; | |||
@@ -17,25 +17,28 @@ | |||
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | |||
/*******************************************************************************/ | |||
#include <string.h> | |||
#include <stdlib.h> | |||
#include <stdio.h> | |||
#include <math.h> | |||
#include <FL/fl_draw.H> | |||
#include <FL/Fl_Pack.H> | |||
#include "FL/Fl_Value_SliderX.H" | |||
#include <FL/Fl_Box.H> | |||
#include <FL/Fl_Menu_Button.H> | |||
#include <FL/Fl_Counter.H> | |||
#include "FL/Fl_Arc_Dial.H" | |||
#include "FL/Boxtypes.H" | |||
#include "FL/Fl_Flowpack.H" | |||
#include "FL/Fl_Labelpad_Group.H" | |||
#include "FL/Fl_Menu_Button.H" | |||
#include "FL/Fl_Value_SliderX.H" | |||
#include "FL/Fl_Arc_Dial.H" | |||
#include "Module.H" | |||
#include "Module_Parameter_Editor.H" | |||
#include "Controller_Module.H" | |||
#include "Chain.H" | |||
#include <string.h> | |||
#include <stdlib.h> | |||
#include <stdio.h> | |||
#include <util/debug.h> | |||
#include <math.h> | |||
@@ -298,7 +301,6 @@ Module_Parameter_Editor::bind_control ( int i ) | |||
_module->redraw(); | |||
} | |||
void | |||
Module_Parameter_Editor::set_value (int i, float value ) | |||
{ | |||
@@ -20,6 +20,7 @@ | |||
#pragma once | |||
#include <FL/Fl_Double_Window.H> | |||
class Fl_Pack; | |||
class Fl_Flowpack; | |||
class Module; | |||
@@ -53,8 +54,6 @@ class Module_Parameter_Editor : public Fl_Double_Window | |||
Fl_Menu_Button *mode_choice; | |||
bool _resized; | |||
public: | |||
Module_Parameter_Editor ( Module *module ); | |||
@@ -17,16 +17,19 @@ | |||
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | |||
/*******************************************************************************/ | |||
#include "Mono_Pan_Module.H" | |||
#include "const.h" | |||
#include <math.h> | |||
#include <dsp.h> | |||
#include "Mono_Pan_Module.H" | |||
Mono_Pan_Module::Mono_Pan_Module ( ) | |||
: Module ( 50, 24, name() ) | |||
{ | |||
Port p( this, Port::INPUT, Port::CONTROL, "Pan" ); | |||
// p.hints.type = Port::Hints::LOGARITHMIC; | |||
p.hints.ranged = true; | |||
p.hints.minimum = -1.0f; | |||
p.hints.maximum = 1.0f; | |||
@@ -62,15 +65,15 @@ Mono_Pan_Module::configure_inputs ( int n ) | |||
/**********/ | |||
/* Engine */ | |||
/**********/ | |||
void | |||
Mono_Pan_Module::process ( void ) | |||
{ | |||
const float g = control_input[0].control_value(); | |||
// this is obviously wrong, but it produces a strange false stereo effect. | |||
// const float lg = (0.0f - g); | |||
// const float rg = g; | |||
const float lg = (0.0f - g) + 1.0f; | |||
const float rg = g + 1.0f; | |||
@@ -22,22 +22,23 @@ | |||
#include "const.h" | |||
#include "Plugin_Module.H" | |||
#include <string.h> | |||
#include <vector> | |||
#include <string> | |||
#include <ladspa.h> | |||
#include <stdlib.h> | |||
#include <math.h> | |||
#include <Fl/fl_draw.H> | |||
#include <FL/Fl_Group.H> | |||
#include <FL/Fl_Menu_Button.H> | |||
#include "util/debug.h" | |||
#include "Plugin_Module.H" | |||
#include <string.h> | |||
#include "util/debug.h" | |||
#define HAVE_LIBLRDF 1 | |||
#include "LADSPAInfo.h" | |||
#include <vector> | |||
#include <string> | |||
#include <ladspa.h> | |||
#include <stdlib.h> | |||
#include <math.h> | |||
#include "Engine/Engine.H" | |||
@@ -56,7 +57,6 @@ struct Plugin_Module::ImplementationData | |||
Plugin_Module::Plugin_Module ( ) : Module( 50, 35, name() ) | |||
{ | |||
init(); | |||
@@ -74,7 +74,6 @@ Plugin_Module::~Plugin_Module ( ) | |||
void | |||
Plugin_Module::get ( Log_Entry &e ) const | |||
{ | |||
@@ -103,11 +102,8 @@ Plugin_Module::set ( Log_Entry &e ) | |||
Module::set( e ); | |||
} | |||
#include <FL/Fl_Menu_Button.H> | |||
void | |||
Plugin_Module::add_plugins_to_menu ( Fl_Menu_Button *menu ) | |||
{ | |||
@@ -181,46 +177,6 @@ Plugin_Module::init ( void ) | |||
bbox( tx, ty, tw, th ); | |||
} | |||
#include "FL/test_press.H" | |||
int | |||
Plugin_Module::handle ( int m ) | |||
{ | |||
switch ( m ) | |||
{ | |||
case FL_ENTER: | |||
case FL_LEAVE: | |||
redraw(); | |||
return 1; | |||
break; | |||
default: | |||
return Module::handle( m ); | |||
} | |||
return 0; | |||
} | |||
/* There are two possible adaptations that can be made at Plugin_Module input to account for a mismatch | |||
between channel configurations. | |||
The two scenarios are as follows. | |||
1. The preceding module has fewer outputs than this module has inputs. If | |||
the preceding module has 1 output (MONO) then it will be duplicated | |||
for this module's addition inputs. If the preceding module has more | |||
than one output, then the chain is in error. | |||
2. The preceding module has more outputs than this module has inputs | |||
If this module has 1 output (MONO) then it will create the required number of | |||
instances of its plugin. | |||
Stereo plugins are never run with more than one instance. Mono | |||
plugins will have their outputs brought up to stereo for plugins with | |||
stereo input. | |||
*/ | |||
int | |||
Plugin_Module::can_support_inputs ( int n ) | |||
{ | |||
@@ -721,6 +677,12 @@ Plugin_Module::handle_port_connection_change ( void ) | |||
set_output_buffer( i, audio_output[i].buffer() ); | |||
} | |||
/**********/ | |||
/* Engine */ | |||
/**********/ | |||
void | |||
Plugin_Module::process ( ) | |||
{ | |||
@@ -116,7 +116,6 @@ public: | |||
protected: | |||
virtual int handle ( int ); | |||
void get ( Log_Entry &e ) const; | |||
void set ( Log_Entry &e ); | |||
@@ -17,29 +17,26 @@ | |||
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | |||
/*******************************************************************************/ | |||
#include <stdlib.h> | |||
#include <unistd.h> | |||
#include <sys/types.h> | |||
#include <sys/stat.h> | |||
#include <FL/Fl.H> | |||
#include <FL/Fl_Double_Window.H> | |||
#include <FL/Fl_Scroll.H> | |||
#include <FL/Fl_Tooltip.H> | |||
#include <FL/fl_ask.H> | |||
#include <FL/Fl_Pack.H> | |||
#include "Mixer_Strip.H" | |||
#include <stdlib.h> | |||
#include <unistd.h> | |||
#include "DPM.H" | |||
#include <FL/Boxtypes.H> | |||
#include "Mixer.H" | |||
#include "util/Thread.H" | |||
#include "util/debug.h" | |||
#include "Project.H" | |||
Mixer *mixer; | |||
#include "Mixer.H" | |||
#include "Project.H" | |||
#include <FL/Boxtypes.H> | |||
#include "Loggable.H" | |||
#include <FL/Fl_Tooltip.H> | |||
#include <FL/fl_ask.H> | |||
/* for registration */ | |||
#include "Module.H" | |||
@@ -51,14 +48,14 @@ Mixer *mixer; | |||
#include "Controller_Module.H" | |||
#include "Mono_Pan_Module.H" | |||
#include "Chain.H" | |||
#include "Mixer_Strip.H" | |||
#include <sys/types.h> | |||
#include <sys/stat.h> | |||
/* TODO: put these in a header */ | |||
#define USER_CONFIG_DIR ".non-mixer/" | |||
char *user_config_dir; | |||
Mixer *mixer; | |||
#include <errno.h> | |||
@@ -111,10 +108,6 @@ main ( int argc, char **argv ) | |||
Fl::get_system_colors(); | |||
Fl::scheme( "plastic" ); | |||
// Fl::scheme( "gtk+" ); | |||
/* Fl::foreground( 0xFF, 0xFF, 0xFF ); */ | |||
/* Fl::background( 0x10, 0x10, 0x10 ); */ | |||
Plugin_Module::spawn_discover_thread(); | |||
@@ -135,11 +128,6 @@ main ( int argc, char **argv ) | |||
{ | |||
if ( argc > 1 ) | |||
{ | |||
/* char name[1024]; */ | |||
/* snprintf( name, sizeof( name ), "%s/history", argv[1] ); */ | |||
/* Loggable::open( name ); */ | |||
MESSAGE( "Loading \"%s\"", argv[1] ); | |||
if ( int err = Project::open( argv[1] ) ) | |||
@@ -159,5 +147,4 @@ main ( int argc, char **argv ) | |||
main_window = NULL; | |||
MESSAGE( "Your fun is over" ); | |||
} |