@@ -47,9 +47,11 @@ | |||||
*/ | */ | ||||
#include "const.h" | #include "const.h" | ||||
#include <stdlib.h> | |||||
#include <stdio.h> | |||||
#include <string.h> | |||||
#include "Chain.H" | #include "Chain.H" | ||||
#include "Module.H" | #include "Module.H" | ||||
#include "Meter_Module.H" | #include "Meter_Module.H" | ||||
#include "JACK_Module.H" | #include "JACK_Module.H" | ||||
@@ -60,62 +62,21 @@ | |||||
#include <Fl/Fl_Box.H> | #include <Fl/Fl_Box.H> | ||||
#include <FL/Fl_Menu.H> | #include <FL/Fl_Menu.H> | ||||
#include <FL/fl_ask.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_Tabs.H> | ||||
#include "FL/Fl_Flowpack.H" | #include "FL/Fl_Flowpack.H" | ||||
#include "FL/Fl_Scroll.H" | #include "FL/Fl_Scroll.H" | ||||
#include "FL/Fl_Packscroller.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 "Mixer_Strip.H" | ||||
#include <dsp.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 | void | ||||
Chain::log_children ( void ) | Chain::log_children ( void ) | ||||
{ | { | ||||
@@ -287,18 +284,6 @@ void Chain::cb_handle(Fl_Widget* o) { | |||||
control_tab->show(); | 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) { | void Chain::cb_handle(Fl_Widget* o, void* v) { | ||||
@@ -444,12 +429,6 @@ Chain::name ( const char *name ) | |||||
module( i )->handle_chain_name_changed(); | module( i )->handle_chain_name_changed(); | ||||
} | } | ||||
#include "FL/menu_popup.H" | |||||
bool | bool | ||||
Chain::add ( Module *m ) | Chain::add ( Module *m ) | ||||
{ | { | ||||
@@ -685,6 +664,14 @@ Chain::build_process_queue ( void ) | |||||
/* } */ | /* } */ | ||||
} | } | ||||
void | |||||
Chain::strip ( Mixer_Strip * ms ) | |||||
{ | |||||
_strip = ms; | |||||
} | |||||
void | void | ||||
Chain::draw ( 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() ); | controls_pack->size( W, controls_pack->h() ); | ||||
} | } | ||||
#include "FL/test_press.H" | |||||
int | int | ||||
Chain::handle ( int m ) | Chain::handle ( int m ) | ||||
{ | { | ||||
@@ -778,12 +763,12 @@ Chain::handle ( int m ) | |||||
return Fl_Group::handle( m ); | return Fl_Group::handle( m ); | ||||
} | } | ||||
void | |||||
Chain::strip ( Mixer_Strip * ms ) | |||||
{ | |||||
_strip = ms; | |||||
} | |||||
/**********/ | |||||
/* Engine */ | |||||
/**********/ | |||||
void | void | ||||
Chain::process ( nframes_t nframes, void *v ) | Chain::process ( nframes_t nframes, void *v ) | ||||
@@ -37,41 +37,33 @@ class Controller_Module; | |||||
class Chain : public Fl_Group, public Loggable { | class Chain : public Fl_Group, public Loggable { | ||||
Fl_Pack *modules_pack; | |||||
Fl_Flowpack *controls_pack; | |||||
Fl_Flip_Button *tab_button; | Fl_Flip_Button *tab_button; | ||||
Fl_Flowpack *controls_pack; | |||||
Fl_Group *chain_tab; | Fl_Group *chain_tab; | ||||
Fl_Group *control_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; | Fl_Callback *_configure_outputs_callback; | ||||
void *_configure_outputs_userdata; | 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 build_process_queue ( void ); | ||||
void add_to_process_queue ( Module *m ); | void add_to_process_queue ( Module *m ); | ||||
std::vector <Module::Port> scratch_port; | |||||
Engine *_engine; | |||||
static void process ( nframes_t, void * ); | static void process ( nframes_t, void * ); | ||||
void process ( nframes_t ); | void process ( nframes_t ); | ||||
@@ -80,11 +72,14 @@ protected: | |||||
void get ( Log_Entry &e ) const; | void get ( Log_Entry &e ) const; | ||||
void set ( Log_Entry &e ); | void set ( Log_Entry &e ); | ||||
int handle ( int m ); | |||||
void draw ( void ); | |||||
public: | 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 ); | void resize ( int X, int Y, int W, int H ); | ||||
Mixer_Strip *strip ( void ) const { return _strip; } | Mixer_Strip *strip ( void ) const { return _strip; } | ||||
@@ -95,17 +90,8 @@ public: | |||||
void configure_ports ( void ); | void configure_ports ( void ); | ||||
int required_buffers ( 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 ); | 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(); } | int modules ( void ) const { return modules_pack->children(); } | ||||
Module *module ( int n ) const { return (Module*)modules_pack->child( n ); } | Module *module ( int n ) const { return (Module*)modules_pack->child( n ); } | ||||
void remove ( Module *m ); | void remove ( Module *m ); | ||||
@@ -17,21 +17,27 @@ | |||||
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | ||||
/*******************************************************************************/ | /*******************************************************************************/ | ||||
#include "const.h" | |||||
#include "Controller_Module.H" | #include "Controller_Module.H" | ||||
#include <stdio.h> | |||||
#include <FL/Fl.H> | #include <FL/Fl.H> | ||||
#include "FL/Fl_Value_SliderX.H" | |||||
#include <FL/Fl_Box.H> | #include <FL/Fl_Box.H> | ||||
#include <FL/Fl_Counter.H> | #include <FL/Fl_Counter.H> | ||||
#include "FL/Fl_Arc_Dial.H" | |||||
#include <FL/Fl_Menu_Item.H> | #include <FL/Fl_Menu_Item.H> | ||||
#include <FL/Fl_Menu_Button.H> | #include <FL/Fl_Menu_Button.H> | ||||
#include <FL/Fl_Menu_.H> | #include <FL/Fl_Menu_.H> | ||||
#include "FL/Fl_Light_Button.H" | |||||
#include <FL/Fl_Light_Button.H> | |||||
#include "FL/Boxtypes.H" | #include "FL/Boxtypes.H" | ||||
#include <FL/fl_draw.H> | #include <FL/fl_draw.H> | ||||
#include "FL/Fl_Arc_Dial.H" | |||||
#include "FL/Fl_Labelpad_Group.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 "Engine/Engine.H" | ||||
#include "Chain.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 | void | ||||
Controller_Module::get ( Log_Entry &e ) const | 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 | 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 | void | ||||
@@ -221,9 +226,6 @@ Controller_Module::connect_to ( Port *p ) | |||||
o->value(1); | o->value(1); | ||||
o->textsize(14); | o->textsize(14); | ||||
// o->type( FL_VERTICAL ); | |||||
// o->type(1); | |||||
if ( p->hints.ranged ) | if ( p->hints.ranged ) | ||||
{ | { | ||||
o->minimum( p->hints.maximum ); | o->minimum( p->hints.maximum ); | ||||
@@ -244,8 +246,6 @@ Controller_Module::connect_to ( Port *p ) | |||||
} | } | ||||
o->box( FL_BURNISHED_OVAL_BOX ); | 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->color( fl_darker( fl_darker( FL_GRAY ) ) ); | ||||
o->selection_color( FL_WHITE ); | o->selection_color( FL_WHITE ); | ||||
o->value( p->control_value() ); | o->value( p->control_value() ); | ||||
@@ -273,6 +273,8 @@ Controller_Module::connect_to ( Port *p ) | |||||
} | } | ||||
} | } | ||||
void | void | ||||
Controller_Module::resize ( int X, int Y, int W, int H ) | 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 | void | ||||
Controller_Module::menu_cb ( Fl_Widget *w, void *v ) | Controller_Module::menu_cb ( Fl_Widget *w, void *v ) | ||||
@@ -306,9 +342,6 @@ Controller_Module::menu_cb ( const Fl_Menu_ *m ) | |||||
mode( CV ); | mode( CV ); | ||||
} | } | ||||
#include "FL/test_press.H" | |||||
#include "FL/menu_popup.H" | |||||
/** build the context menu for this control */ | /** build the context menu for this control */ | ||||
Fl_Menu_Button & | Fl_Menu_Button & | ||||
Controller_Module::menu ( void ) | 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 | void | ||||
Controller_Module::process ( void ) | Controller_Module::process ( void ) | ||||
@@ -50,7 +50,6 @@ public: | |||||
void mode ( Mode v ); | void mode ( Mode v ); | ||||
Controller_Module ( bool is_default = false ); | Controller_Module ( bool is_default = false ); | ||||
// Controller_Module ( int W, int H, const char *L=0 ); | |||||
virtual ~Controller_Module ( ); | virtual ~Controller_Module ( ); | ||||
const char *name ( void ) const { return "Controller"; } | const char *name ( void ) const { return "Controller"; } | ||||
@@ -67,24 +66,21 @@ public: | |||||
LOG_CREATE_FUNC( Controller_Module ); | 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(); | draw_box(); | ||||
Fl_Group::draw(); | 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: | private: | ||||
@@ -17,11 +17,13 @@ | |||||
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | ||||
/*******************************************************************************/ | /*******************************************************************************/ | ||||
#include "Gain_Module.H" | |||||
#include <math.h> | #include <math.h> | ||||
#include <dsp.h> | #include <dsp.h> | ||||
#include "Gain_Module.H" | |||||
Gain_Module::Gain_Module ( ) | Gain_Module::Gain_Module ( ) | ||||
: Module ( 50, 24, name() ) | : Module ( 50, 24, name() ) | ||||
{ | { | ||||
@@ -32,7 +34,6 @@ Gain_Module::Gain_Module ( ) | |||||
p.hints.type = Port::Hints::LOGARITHMIC; | p.hints.type = Port::Hints::LOGARITHMIC; | ||||
p.hints.ranged = true; | p.hints.ranged = true; | ||||
p.hints.minimum = -70.0f; | p.hints.minimum = -70.0f; | ||||
// p.hints.maximum = HUGE; | |||||
p.hints.maximum = 6.0f; | p.hints.maximum = 6.0f; | ||||
p.hints.default_value = 0.0f; | p.hints.default_value = 0.0f; | ||||
@@ -41,8 +42,6 @@ Gain_Module::Gain_Module ( ) | |||||
add_port( p ); | add_port( p ); | ||||
// color( FL_BLACK ); | |||||
end(); | end(); | ||||
log_create(); | 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::INPUT, Port::AUDIO ) ); | ||||
add_port( Port( this, Port::OUTPUT, 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; | return true; | ||||
@@ -79,6 +73,10 @@ Gain_Module::configure_inputs ( int n ) | |||||
/**********/ | |||||
/* Engine */ | |||||
/**********/ | |||||
void | void | ||||
Gain_Module::process ( void ) | Gain_Module::process ( void ) | ||||
{ | { | ||||
@@ -17,14 +17,17 @@ | |||||
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | /* 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 <string.h> | ||||
#include "dsp.h" | |||||
#include "Engine/Engine.H" | |||||
#include "Chain.H" | #include "Chain.H" | ||||
#include "JACK_Module.H" | |||||
JACK_Module::JACK_Module ( ) | JACK_Module::JACK_Module ( ) | ||||
@@ -148,7 +151,6 @@ JACK_Module::configure_outputs ( int n ) | |||||
bool | bool | ||||
JACK_Module::initialize ( void ) | JACK_Module::initialize ( void ) | ||||
{ | { | ||||
// configure_inputs( 1 ); | |||||
return true; | return true; | ||||
} | } | ||||
@@ -196,6 +198,10 @@ JACK_Module::handle_chain_name_changed ( void ) | |||||
/**********/ | |||||
/* Engine */ | |||||
/**********/ | |||||
void | void | ||||
JACK_Module::process ( void ) | JACK_Module::process ( void ) | ||||
{ | { | ||||
@@ -19,29 +19,68 @@ | |||||
#include "Meter_Indicator_Module.H" | #include "Meter_Indicator_Module.H" | ||||
#include <stdio.h> | |||||
#include <FL/Fl.H> | #include <FL/Fl.H> | ||||
#include <FL/Fl_Value_Slider.H> | #include <FL/Fl_Value_Slider.H> | ||||
#include <FL/Fl_Box.H> | #include <FL/Fl_Box.H> | ||||
#include <FL/fl_draw.H> | |||||
#include <FL/Fl_Counter.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/Boxtypes.H" | ||||
#include <FL/fl_draw.H> | |||||
#include "FL/Fl_Arc_Dial.H" | |||||
#include "FL/Fl_Labelpad_Group.H" | #include "FL/Fl_Labelpad_Group.H" | ||||
#include <stdio.h> | |||||
#include "FL/Fl_Scalepack.H" | |||||
#include "Engine/Engine.H" | #include "Engine/Engine.H" | ||||
#include "Chain.H" | #include "Chain.H" | ||||
#include "DPM.H" | #include "DPM.H" | ||||
#include "FL/Fl_Scalepack.H" | |||||
#include "FL/test_press.H" | |||||
const float CONTROL_UPDATE_FREQ = 0.1f; | 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 | void | ||||
Meter_Indicator_Module::get ( Log_Entry &e ) const | 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 | void | ||||
Meter_Indicator_Module::update_cb ( void *v ) | Meter_Indicator_Module::update_cb ( void *v ) | ||||
{ | { | ||||
@@ -186,17 +188,15 @@ Meter_Indicator_Module::connect_to ( Port *p ) | |||||
{ | { | ||||
control_input[0].connect_to( 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 | int | ||||
Meter_Indicator_Module::handle ( int m ) | Meter_Indicator_Module::handle ( int m ) | ||||
{ | { | ||||
@@ -251,6 +251,10 @@ Meter_Indicator_Module::handle_control_changed ( Port *p ) | |||||
} | } | ||||
} | } | ||||
/**********/ | |||||
/* Engine */ | |||||
/**********/ | |||||
void | void | ||||
Meter_Indicator_Module::process ( void ) | Meter_Indicator_Module::process ( void ) | ||||
{ | { | ||||
@@ -17,15 +17,19 @@ | |||||
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | /* 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.H> | ||||
#include <FL/Fl_Single_Window.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 "FL/test_press.H" | ||||
#include "Meter_Module.H" | |||||
#include "DPM.H" | |||||
#include "JACK/Port.H" | |||||
const float METER_UPDATE_FREQ = 0.1f; | const float METER_UPDATE_FREQ = 0.1f; | ||||
@@ -152,6 +156,8 @@ Meter_Module::configure_inputs ( int n ) | |||||
return true; | return true; | ||||
} | } | ||||
int | int | ||||
Meter_Module::handle ( int m ) | Meter_Module::handle ( int m ) | ||||
{ | { | ||||
@@ -173,6 +179,10 @@ Meter_Module::handle ( int m ) | |||||
/**********/ | |||||
/* Engine */ | |||||
/**********/ | |||||
static float | static float | ||||
get_peak_sample ( const sample_t* buf, nframes_t nframes ) | get_peak_sample ( const sample_t* buf, nframes_t nframes ) | ||||
{ | { | ||||
@@ -372,7 +372,10 @@ Mixer::rows ( int n ) | |||||
sh = (scroll->h() - 18) / n; | sh = (scroll->h() - 18) / n; | ||||
if ( sh < Mixer_Strip::min_h() ) | if ( sh < Mixer_Strip::min_h() ) | ||||
{ | |||||
rows( ( scroll->h() - 18 ) / Mixer_Strip::min_h() ); | |||||
return; | return; | ||||
} | |||||
int tw = 0; | int tw = 0; | ||||
@@ -447,7 +450,7 @@ Mixer::snapshot ( void ) | |||||
void | void | ||||
Mixer::new_strip ( 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 | 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 | void | ||||
Mixer_Strip::get ( Log_Entry &e ) const | Mixer_Strip::get ( Log_Entry &e ) const | ||||
{ | { | ||||
e.add( ":name", name() ); | 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( ":tab", tab_button->value() ? "signal" : "fader" ); | ||||
e.add( ":color", (unsigned long)color()); | e.add( ":color", (unsigned long)color()); | ||||
} | } | ||||
@@ -77,8 +120,8 @@ Mixer_Strip::set ( Log_Entry &e ) | |||||
name( v ); | name( v ); | ||||
else if ( ! strcmp( s, ":width" ) ) | 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" ) ) | else if ( ! strcmp( s, ":tab" ) ) | ||||
{ | { | ||||
@@ -145,46 +188,6 @@ Mixer_Strip::chain ( Chain *c ) | |||||
meter_indicator->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) { | void Mixer_Strip::cb_handle(Fl_Widget* o) { | ||||
// parent()->parent()->damage( FL_DAMAGE_ALL, x(), y(), w(), h() ); | // 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 ) | else if ( o == name_field ) | ||||
name( name_field->value() ); | name( name_field->value() ); | ||||
else if ( o == prepost_button ) | |||||
else if ( o == width_button ) | |||||
{ | { | ||||
if ( ((Fl_Button*)o)->value() ) | if ( ((Fl_Button*)o)->value() ) | ||||
size( 300, h() ); | size( 300, h() ); | ||||
@@ -352,7 +355,7 @@ Mixer_Strip::init ( ) | |||||
o->end(); | o->end(); | ||||
} // Fl_Group* o | } // 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->type(1); | ||||
o->labelsize(14); | o->labelsize(14); | ||||
o->callback( ((Fl_Callback*)cb_handle), this ); | o->callback( ((Fl_Callback*)cb_handle), this ); | ||||
@@ -54,8 +54,7 @@ public: | |||||
static int min_h ( void ) { return 250; } | 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 */ | Mixer_Strip(); /* for log create */ | ||||
virtual ~Mixer_Strip(); | virtual ~Mixer_Strip(); | ||||
@@ -77,14 +76,12 @@ public: | |||||
void update ( void ); | void update ( void ); | ||||
// int channels ( void ) const { return _in.size(); } | |||||
void name ( const char *name ); | void name ( const char *name ); | ||||
const char *name ( void ) const { return label(); } | const char *name ( void ) const { return label(); } | ||||
private: | private: | ||||
// Fl_Value_Slider *gain_slider; | |||||
Fl_Flip_Button *prepost_button; | |||||
Fl_Flip_Button *width_button; | |||||
Fl_Flip_Button *tab_button; | Fl_Flip_Button *tab_button; | ||||
Fl_Button *close_button; | Fl_Button *close_button; | ||||
Fl_Button *left_button; | Fl_Button *left_button; | ||||
@@ -17,25 +17,28 @@ | |||||
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | /* 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_draw.H> | ||||
#include <FL/Fl_Pack.H> | #include <FL/Fl_Pack.H> | ||||
#include "FL/Fl_Value_SliderX.H" | |||||
#include <FL/Fl_Box.H> | #include <FL/Fl_Box.H> | ||||
#include <FL/Fl_Menu_Button.H> | |||||
#include <FL/Fl_Counter.H> | #include <FL/Fl_Counter.H> | ||||
#include "FL/Fl_Arc_Dial.H" | |||||
#include "FL/Boxtypes.H" | #include "FL/Boxtypes.H" | ||||
#include "FL/Fl_Flowpack.H" | #include "FL/Fl_Flowpack.H" | ||||
#include "FL/Fl_Labelpad_Group.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.H" | ||||
#include "Module_Parameter_Editor.H" | #include "Module_Parameter_Editor.H" | ||||
#include "Controller_Module.H" | #include "Controller_Module.H" | ||||
#include "Chain.H" | #include "Chain.H" | ||||
#include <string.h> | |||||
#include <stdlib.h> | |||||
#include <stdio.h> | |||||
#include <util/debug.h> | #include <util/debug.h> | ||||
#include <math.h> | |||||
@@ -298,7 +301,6 @@ Module_Parameter_Editor::bind_control ( int i ) | |||||
_module->redraw(); | _module->redraw(); | ||||
} | } | ||||
void | void | ||||
Module_Parameter_Editor::set_value (int i, float value ) | Module_Parameter_Editor::set_value (int i, float value ) | ||||
{ | { | ||||
@@ -20,6 +20,7 @@ | |||||
#pragma once | #pragma once | ||||
#include <FL/Fl_Double_Window.H> | #include <FL/Fl_Double_Window.H> | ||||
class Fl_Pack; | class Fl_Pack; | ||||
class Fl_Flowpack; | class Fl_Flowpack; | ||||
class Module; | class Module; | ||||
@@ -53,8 +54,6 @@ class Module_Parameter_Editor : public Fl_Double_Window | |||||
Fl_Menu_Button *mode_choice; | Fl_Menu_Button *mode_choice; | ||||
bool _resized; | bool _resized; | ||||
public: | public: | ||||
Module_Parameter_Editor ( Module *module ); | Module_Parameter_Editor ( Module *module ); | ||||
@@ -17,16 +17,19 @@ | |||||
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | ||||
/*******************************************************************************/ | /*******************************************************************************/ | ||||
#include "Mono_Pan_Module.H" | |||||
#include "const.h" | |||||
#include <math.h> | #include <math.h> | ||||
#include <dsp.h> | #include <dsp.h> | ||||
#include "Mono_Pan_Module.H" | |||||
Mono_Pan_Module::Mono_Pan_Module ( ) | Mono_Pan_Module::Mono_Pan_Module ( ) | ||||
: Module ( 50, 24, name() ) | : Module ( 50, 24, name() ) | ||||
{ | { | ||||
Port p( this, Port::INPUT, Port::CONTROL, "Pan" ); | Port p( this, Port::INPUT, Port::CONTROL, "Pan" ); | ||||
// p.hints.type = Port::Hints::LOGARITHMIC; | |||||
p.hints.ranged = true; | p.hints.ranged = true; | ||||
p.hints.minimum = -1.0f; | p.hints.minimum = -1.0f; | ||||
p.hints.maximum = 1.0f; | p.hints.maximum = 1.0f; | ||||
@@ -62,15 +65,15 @@ Mono_Pan_Module::configure_inputs ( int n ) | |||||
/**********/ | |||||
/* Engine */ | |||||
/**********/ | |||||
void | void | ||||
Mono_Pan_Module::process ( void ) | Mono_Pan_Module::process ( void ) | ||||
{ | { | ||||
const float g = control_input[0].control_value(); | 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 lg = (0.0f - g) + 1.0f; | ||||
const float rg = g + 1.0f; | const float rg = g + 1.0f; | ||||
@@ -22,22 +22,23 @@ | |||||
#include "const.h" | #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_draw.H> | ||||
#include <FL/Fl_Group.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 | #define HAVE_LIBLRDF 1 | ||||
#include "LADSPAInfo.h" | #include "LADSPAInfo.h" | ||||
#include <vector> | |||||
#include <string> | |||||
#include <ladspa.h> | |||||
#include <stdlib.h> | |||||
#include <math.h> | |||||
#include "Engine/Engine.H" | #include "Engine/Engine.H" | ||||
@@ -56,7 +57,6 @@ struct Plugin_Module::ImplementationData | |||||
Plugin_Module::Plugin_Module ( ) : Module( 50, 35, name() ) | Plugin_Module::Plugin_Module ( ) : Module( 50, 35, name() ) | ||||
{ | { | ||||
init(); | init(); | ||||
@@ -74,7 +74,6 @@ Plugin_Module::~Plugin_Module ( ) | |||||
void | void | ||||
Plugin_Module::get ( Log_Entry &e ) const | Plugin_Module::get ( Log_Entry &e ) const | ||||
{ | { | ||||
@@ -103,11 +102,8 @@ Plugin_Module::set ( Log_Entry &e ) | |||||
Module::set( e ); | Module::set( e ); | ||||
} | } | ||||
#include <FL/Fl_Menu_Button.H> | |||||
void | void | ||||
Plugin_Module::add_plugins_to_menu ( Fl_Menu_Button *menu ) | Plugin_Module::add_plugins_to_menu ( Fl_Menu_Button *menu ) | ||||
{ | { | ||||
@@ -181,46 +177,6 @@ Plugin_Module::init ( void ) | |||||
bbox( tx, ty, tw, th ); | 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 | int | ||||
Plugin_Module::can_support_inputs ( int n ) | 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() ); | set_output_buffer( i, audio_output[i].buffer() ); | ||||
} | } | ||||
/**********/ | |||||
/* Engine */ | |||||
/**********/ | |||||
void | void | ||||
Plugin_Module::process ( ) | Plugin_Module::process ( ) | ||||
{ | { | ||||
@@ -116,7 +116,6 @@ public: | |||||
protected: | protected: | ||||
virtual int handle ( int ); | |||||
void get ( Log_Entry &e ) const; | void get ( Log_Entry &e ) const; | ||||
void set ( Log_Entry &e ); | void set ( Log_Entry &e ); | ||||
@@ -17,29 +17,26 @@ | |||||
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | /* 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.H> | ||||
#include <FL/Fl_Double_Window.H> | #include <FL/Fl_Double_Window.H> | ||||
#include <FL/Fl_Scroll.H> | #include <FL/Fl_Scroll.H> | ||||
#include <FL/Fl_Tooltip.H> | |||||
#include <FL/fl_ask.H> | |||||
#include <FL/Fl_Pack.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/Thread.H" | ||||
#include "util/debug.h" | #include "util/debug.h" | ||||
#include "Project.H" | |||||
Mixer *mixer; | |||||
#include "Mixer.H" | |||||
#include "Project.H" | |||||
#include <FL/Boxtypes.H> | |||||
#include "Loggable.H" | #include "Loggable.H" | ||||
#include <FL/Fl_Tooltip.H> | |||||
#include <FL/fl_ask.H> | |||||
/* for registration */ | /* for registration */ | ||||
#include "Module.H" | #include "Module.H" | ||||
@@ -51,14 +48,14 @@ Mixer *mixer; | |||||
#include "Controller_Module.H" | #include "Controller_Module.H" | ||||
#include "Mono_Pan_Module.H" | #include "Mono_Pan_Module.H" | ||||
#include "Chain.H" | #include "Chain.H" | ||||
#include "Mixer_Strip.H" | |||||
#include <sys/types.h> | |||||
#include <sys/stat.h> | |||||
/* TODO: put these in a header */ | /* TODO: put these in a header */ | ||||
#define USER_CONFIG_DIR ".non-mixer/" | #define USER_CONFIG_DIR ".non-mixer/" | ||||
char *user_config_dir; | char *user_config_dir; | ||||
Mixer *mixer; | |||||
#include <errno.h> | #include <errno.h> | ||||
@@ -111,10 +108,6 @@ main ( int argc, char **argv ) | |||||
Fl::get_system_colors(); | Fl::get_system_colors(); | ||||
Fl::scheme( "plastic" ); | Fl::scheme( "plastic" ); | ||||
// Fl::scheme( "gtk+" ); | |||||
/* Fl::foreground( 0xFF, 0xFF, 0xFF ); */ | |||||
/* Fl::background( 0x10, 0x10, 0x10 ); */ | |||||
Plugin_Module::spawn_discover_thread(); | Plugin_Module::spawn_discover_thread(); | ||||
@@ -135,11 +128,6 @@ main ( int argc, char **argv ) | |||||
{ | { | ||||
if ( argc > 1 ) | if ( argc > 1 ) | ||||
{ | { | ||||
/* char name[1024]; */ | |||||
/* snprintf( name, sizeof( name ), "%s/history", argv[1] ); */ | |||||
/* Loggable::open( name ); */ | |||||
MESSAGE( "Loading \"%s\"", argv[1] ); | MESSAGE( "Loading \"%s\"", argv[1] ); | ||||
if ( int err = Project::open( argv[1] ) ) | if ( int err = Project::open( argv[1] ) ) | ||||
@@ -159,5 +147,4 @@ main ( int argc, char **argv ) | |||||
main_window = NULL; | main_window = NULL; | ||||
MESSAGE( "Your fun is over" ); | MESSAGE( "Your fun is over" ); | ||||
} | } |