Mixer: Rearrange so that each mixer strip runs as its own JACK client.
This commit is contained in:
parent
82e1c50b8f
commit
a971175c8e
|
@ -79,7 +79,6 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
std::vector <Module::Port> Chain::port;
|
|
||||||
std::list <Chain*> Chain::chain;
|
std::list <Chain*> Chain::chain;
|
||||||
|
|
||||||
|
|
||||||
|
@ -126,6 +125,10 @@ Chain::set ( Log_Entry &e )
|
||||||
Chain::Chain ( ) : Fl_Group( 0, 0, 100, 100, "")
|
Chain::Chain ( ) : Fl_Group( 0, 0, 100, 100, "")
|
||||||
|
|
||||||
{
|
{
|
||||||
|
_engine = new Engine( &Chain::process, this );
|
||||||
|
|
||||||
|
engine()->init( "Non-Mixer" );
|
||||||
|
|
||||||
int X = 0;
|
int X = 0;
|
||||||
int Y = 0;
|
int Y = 0;
|
||||||
int W = 100;
|
int W = 100;
|
||||||
|
@ -192,8 +195,19 @@ Chain::Chain ( ) : Fl_Group( 0, 0, 100, 100, "")
|
||||||
|
|
||||||
Chain::~Chain ( )
|
Chain::~Chain ( )
|
||||||
{
|
{
|
||||||
|
DMESSAGE( "Destroying chain" );
|
||||||
|
|
||||||
chain.remove( this );
|
chain.remove( this );
|
||||||
|
|
||||||
log_destroy();
|
log_destroy();
|
||||||
|
|
||||||
|
/* if we leave this up to FLTK, it will happen after we've
|
||||||
|
already destroyed the engine */
|
||||||
|
modules_pack->clear();
|
||||||
|
controls_pack->clear();
|
||||||
|
|
||||||
|
delete _engine;
|
||||||
|
_engine = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -313,7 +327,7 @@ Chain::configure_ports ( void )
|
||||||
/* int old_outs = outs(); */
|
/* int old_outs = outs(); */
|
||||||
int nouts = 0;
|
int nouts = 0;
|
||||||
|
|
||||||
engine->lock();
|
engine()->lock();
|
||||||
|
|
||||||
for ( int i = 0; i < modules(); ++i )
|
for ( int i = 0; i < modules(); ++i )
|
||||||
{
|
{
|
||||||
|
@ -333,18 +347,18 @@ Chain::configure_ports ( void )
|
||||||
|
|
||||||
DMESSAGE( "required_buffers = %i", req_buffers );
|
DMESSAGE( "required_buffers = %i", req_buffers );
|
||||||
|
|
||||||
if ( port.size() < req_buffers )
|
if ( scratch_port.size() < req_buffers )
|
||||||
{
|
{
|
||||||
for ( unsigned int i = port.size(); i--; )
|
for ( unsigned int i = scratch_port.size(); i--; )
|
||||||
delete[] (sample_t*)port[i].buffer();
|
delete[] (sample_t*)scratch_port[i].buffer();
|
||||||
port.clear();
|
scratch_port.clear();
|
||||||
|
|
||||||
for ( unsigned int i = 0; i < req_buffers; ++i )
|
for ( unsigned int i = 0; i < req_buffers; ++i )
|
||||||
{
|
{
|
||||||
Module::Port p( NULL, Module::Port::OUTPUT, Module::Port::AUDIO );
|
Module::Port p( NULL, Module::Port::OUTPUT, Module::Port::AUDIO );
|
||||||
p.connect_to( new sample_t[engine->nframes()] );
|
p.connect_to( new sample_t[engine()->nframes()] );
|
||||||
buffer_fill_with_silence( (sample_t*)p.buffer(), engine->nframes() );
|
buffer_fill_with_silence( (sample_t*)p.buffer(), engine()->nframes() );
|
||||||
port.push_back( p );
|
scratch_port.push_back( p );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -359,7 +373,7 @@ Chain::configure_ports ( void )
|
||||||
(*i)->build_process_queue();
|
(*i)->build_process_queue();
|
||||||
}
|
}
|
||||||
|
|
||||||
engine->unlock();
|
engine()->unlock();
|
||||||
|
|
||||||
parent()->redraw();
|
parent()->redraw();
|
||||||
}
|
}
|
||||||
|
@ -445,7 +459,7 @@ bool
|
||||||
Chain::insert ( Module *m, Module *n )
|
Chain::insert ( Module *m, Module *n )
|
||||||
{
|
{
|
||||||
|
|
||||||
engine->lock();
|
engine()->lock();
|
||||||
|
|
||||||
if ( !m )
|
if ( !m )
|
||||||
{
|
{
|
||||||
|
@ -505,13 +519,13 @@ Chain::insert ( Module *m, Module *n )
|
||||||
|
|
||||||
configure_ports();
|
configure_ports();
|
||||||
|
|
||||||
engine->unlock();
|
engine()->unlock();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
|
|
||||||
engine->unlock();
|
engine()->unlock();
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -520,11 +534,11 @@ err:
|
||||||
void
|
void
|
||||||
Chain::add_control ( Module *m )
|
Chain::add_control ( Module *m )
|
||||||
{
|
{
|
||||||
engine->lock();
|
engine()->lock();
|
||||||
|
|
||||||
controls_pack->add( m );
|
controls_pack->add( m );
|
||||||
|
|
||||||
engine->unlock();
|
engine()->unlock();
|
||||||
|
|
||||||
controls_pack->redraw();
|
controls_pack->redraw();
|
||||||
}
|
}
|
||||||
|
@ -608,11 +622,11 @@ Chain::build_process_queue ( void )
|
||||||
Module *m = module( i );
|
Module *m = module( i );
|
||||||
for ( unsigned int j = 0; j < m->audio_input.size(); ++j )
|
for ( unsigned int j = 0; j < m->audio_input.size(); ++j )
|
||||||
{
|
{
|
||||||
m->audio_input[j].connect_to( &port[j] );
|
m->audio_input[j].connect_to( &scratch_port[j] );
|
||||||
}
|
}
|
||||||
for ( unsigned int j = 0; j < m->audio_output.size(); ++j )
|
for ( unsigned int j = 0; j < m->audio_output.size(); ++j )
|
||||||
{
|
{
|
||||||
m->audio_output[j].connect_to( &port[j] );
|
m->audio_output[j].connect_to( &scratch_port[j] );
|
||||||
}
|
}
|
||||||
|
|
||||||
m->handle_port_connection_change();
|
m->handle_port_connection_change();
|
||||||
|
@ -730,6 +744,13 @@ Chain::strip ( Mixer_Strip * ms )
|
||||||
_strip = ms;
|
_strip = ms;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
Chain::process ( nframes_t nframes, void *v )
|
||||||
|
{
|
||||||
|
((Chain*)v)->process( nframes );
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Chain::process ( nframes_t nframes )
|
Chain::process ( nframes_t nframes )
|
||||||
{
|
{
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
class Mixer_Strip;
|
class Mixer_Strip;
|
||||||
class Fl_Flowpack;
|
class Fl_Flowpack;
|
||||||
class Fl_Flip_Button;
|
class Fl_Flip_Button;
|
||||||
|
class Engine;
|
||||||
|
|
||||||
class Chain : public Fl_Group, public Loggable {
|
class Chain : public Fl_Group, public Loggable {
|
||||||
|
|
||||||
|
@ -66,9 +67,14 @@ class Chain : public Fl_Group, public Loggable {
|
||||||
void build_process_queue ( void );
|
void build_process_queue ( void );
|
||||||
void add_to_process_queue ( Module *m );
|
void add_to_process_queue ( Module *m );
|
||||||
|
|
||||||
static std::vector <Module::Port> port;
|
std::vector <Module::Port> scratch_port;
|
||||||
static std::list <Chain*> chain;
|
static std::list <Chain*> chain;
|
||||||
|
|
||||||
|
Engine *_engine;
|
||||||
|
|
||||||
|
static void process ( nframes_t, void * );
|
||||||
|
void process ( nframes_t );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
void get ( Log_Entry &e ) const;
|
void get ( Log_Entry &e ) const;
|
||||||
|
@ -119,9 +125,9 @@ public:
|
||||||
|
|
||||||
Fl_Callback * configure_outputs_callback ( void ) const { return _configure_outputs_callback; }
|
Fl_Callback * configure_outputs_callback ( void ) const { return _configure_outputs_callback; }
|
||||||
|
|
||||||
void process ( nframes_t );
|
|
||||||
|
|
||||||
void log_children ( void );
|
void log_children ( void );
|
||||||
|
|
||||||
|
Engine *engine ( void ) const { return _engine; }
|
||||||
|
|
||||||
LOG_CREATE_FUNC( Chain );
|
LOG_CREATE_FUNC( Chain );
|
||||||
};
|
};
|
||||||
|
|
|
@ -164,19 +164,19 @@ Controller_Module::connect_to ( Port *p )
|
||||||
|
|
||||||
if( mode() == CV )
|
if( mode() == CV )
|
||||||
{
|
{
|
||||||
engine->lock();
|
chain()->engine()->lock();
|
||||||
|
|
||||||
|
char name[256];
|
||||||
|
snprintf( name, sizeof( name ), "%s-CV", p->name() );
|
||||||
|
|
||||||
|
JACK::Port po( chain()->engine()->client(), JACK::Port::Input, chain()->name(), 0, name );
|
||||||
|
|
||||||
|
if ( po.valid() )
|
||||||
{
|
{
|
||||||
char name[256];
|
|
||||||
snprintf( name, sizeof( name ), "%s-CV", p->name() );
|
|
||||||
|
|
||||||
JACK::Port po( engine->client(), JACK::Port::Input, chain()->name(), 0, name );
|
|
||||||
|
|
||||||
if ( po.valid() )
|
|
||||||
{
|
|
||||||
jack_input.push_back( po );
|
jack_input.push_back( po );
|
||||||
}
|
|
||||||
}
|
}
|
||||||
engine->unlock();
|
|
||||||
|
chain()->engine()->unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
Fl_Widget *w;
|
Fl_Widget *w;
|
||||||
|
@ -302,7 +302,7 @@ Controller_Module::process ( void )
|
||||||
|
|
||||||
if ( mode() == CV )
|
if ( mode() == CV )
|
||||||
{
|
{
|
||||||
f = *((float*)jack_input[0].buffer( engine->nframes() ));
|
f = *((float*)jack_input[0].buffer( chain()->engine()->nframes() ));
|
||||||
|
|
||||||
const Port *p = control_output[0].connected_port();
|
const Port *p = control_output[0].connected_port();
|
||||||
|
|
||||||
|
|
|
@ -30,8 +30,10 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Engine::Engine ( ) : _thread( "RT" )
|
Engine::Engine ( void (*process_callback)(nframes_t nframes, void *), void *user_data ) : _thread( "RT" )
|
||||||
{
|
{
|
||||||
|
_process_callback = process_callback;
|
||||||
|
_user_data = user_data;
|
||||||
_buffers_dropped = 0;
|
_buffers_dropped = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -120,12 +122,7 @@ Engine::process ( nframes_t nframes )
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* handle chicken/egg problem */
|
_process_callback(nframes, _user_data);
|
||||||
if ( mixer )
|
|
||||||
/* this will initiate the process() call graph for the various
|
|
||||||
* number and types of tracks, which will in turn send data out
|
|
||||||
* the appropriate ports. */
|
|
||||||
mixer->process( nframes );
|
|
||||||
|
|
||||||
unlock();
|
unlock();
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,6 +34,9 @@ class Engine : public JACK::Client, public Mutex
|
||||||
int _buffers_dropped; /* buffers dropped because of locking */
|
int _buffers_dropped; /* buffers dropped because of locking */
|
||||||
/* int _buffers_dropped; /\* buffers dropped because of locking *\/ */
|
/* int _buffers_dropped; /\* buffers dropped because of locking *\/ */
|
||||||
|
|
||||||
|
void ( * _process_callback ) ( nframes_t, void * );
|
||||||
|
void *_user_data;
|
||||||
|
|
||||||
void shutdown ( void );
|
void shutdown ( void );
|
||||||
int process ( nframes_t nframes );
|
int process ( nframes_t nframes );
|
||||||
int sync ( jack_transport_state_t state, jack_position_t *pos );
|
int sync ( jack_transport_state_t state, jack_position_t *pos );
|
||||||
|
@ -56,11 +59,9 @@ private:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
Engine ( );
|
Engine ( void (*process_callback) (nframes_t, void *), void *user_data );
|
||||||
~Engine ( );
|
~Engine ( );
|
||||||
|
|
||||||
int dropped ( void ) const { return _buffers_dropped; }
|
int dropped ( void ) const { return _buffers_dropped; }
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extern Engine * engine;
|
|
||||||
|
|
|
@ -86,7 +86,7 @@ JACK_Module::configure_inputs ( int n )
|
||||||
{
|
{
|
||||||
for ( int i = on; i < n; ++i )
|
for ( int i = on; i < n; ++i )
|
||||||
{
|
{
|
||||||
JACK::Port po( engine->client(), JACK::Port::Output, chain()->name(), i );
|
JACK::Port po( chain()->engine()->client(), JACK::Port::Output, chain()->name(), i );
|
||||||
|
|
||||||
if ( po.valid() )
|
if ( po.valid() )
|
||||||
{
|
{
|
||||||
|
@ -120,7 +120,7 @@ JACK_Module::configure_outputs ( int n )
|
||||||
{
|
{
|
||||||
for ( int i = on; i < n; ++i )
|
for ( int i = on; i < n; ++i )
|
||||||
{
|
{
|
||||||
JACK::Port po( engine->client(), JACK::Port::Input, chain()->name(), i );
|
JACK::Port po( chain()->engine()->client(), JACK::Port::Input, chain()->name(), i );
|
||||||
|
|
||||||
if ( po.valid() )
|
if ( po.valid() )
|
||||||
{
|
{
|
||||||
|
|
|
@ -140,7 +140,7 @@ Mixer::Mixer ( int X, int Y, int W, int H, const char *L ) :
|
||||||
Mixer::~Mixer ( )
|
Mixer::~Mixer ( )
|
||||||
{
|
{
|
||||||
/* FIXME: teardown */
|
/* FIXME: teardown */
|
||||||
|
DMESSAGE( "Destroying mixer" );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Mixer::resize ( int X, int Y, int W, int H )
|
void Mixer::resize ( int X, int Y, int W, int H )
|
||||||
|
@ -156,16 +156,9 @@ void Mixer::add ( Mixer_Strip *ms )
|
||||||
{
|
{
|
||||||
MESSAGE( "Add mixer strip \"%s\"", ms->name() );
|
MESSAGE( "Add mixer strip \"%s\"", ms->name() );
|
||||||
|
|
||||||
engine->lock();
|
|
||||||
|
|
||||||
mixer_strips->add( ms );
|
mixer_strips->add( ms );
|
||||||
// mixer_strips->insert( *ms, 0 );
|
|
||||||
|
|
||||||
engine->unlock();
|
|
||||||
|
|
||||||
scroll->redraw();
|
scroll->redraw();
|
||||||
|
|
||||||
// redraw();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -180,13 +173,9 @@ Mixer::quit ( void )
|
||||||
void
|
void
|
||||||
Mixer::insert ( Mixer_Strip *ms, Mixer_Strip *before )
|
Mixer::insert ( Mixer_Strip *ms, Mixer_Strip *before )
|
||||||
{
|
{
|
||||||
engine->lock();
|
|
||||||
|
|
||||||
mixer_strips->remove( ms );
|
mixer_strips->remove( ms );
|
||||||
mixer_strips->insert( *ms, before );
|
mixer_strips->insert( *ms, before );
|
||||||
|
|
||||||
engine->unlock();
|
|
||||||
|
|
||||||
scroll->redraw();
|
scroll->redraw();
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
|
@ -219,12 +208,8 @@ void Mixer::remove ( Mixer_Strip *ms )
|
||||||
{
|
{
|
||||||
MESSAGE( "Remove mixer strip \"%s\"", ms->name() );
|
MESSAGE( "Remove mixer strip \"%s\"", ms->name() );
|
||||||
|
|
||||||
engine->lock();
|
|
||||||
|
|
||||||
mixer_strips->remove( ms );
|
mixer_strips->remove( ms );
|
||||||
|
|
||||||
engine->unlock();
|
|
||||||
|
|
||||||
delete ms;
|
delete ms;
|
||||||
|
|
||||||
parent()->redraw();
|
parent()->redraw();
|
||||||
|
@ -247,17 +232,6 @@ void Mixer::update ( void )
|
||||||
// redraw();
|
// redraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
Mixer::process ( unsigned int nframes )
|
|
||||||
{
|
|
||||||
THREAD_ASSERT( RT );
|
|
||||||
|
|
||||||
for ( int i = mixer_strips->children(); i--; )
|
|
||||||
{
|
|
||||||
((Mixer_Strip*)mixer_strips->child( i ))->process( nframes );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** retrun a pointer to the track named /name/, or NULL if no track is named /name/ */
|
/** retrun a pointer to the track named /name/, or NULL if no track is named /name/ */
|
||||||
Mixer_Strip *
|
Mixer_Strip *
|
||||||
Mixer::track_by_name ( const char *name )
|
Mixer::track_by_name ( const char *name )
|
||||||
|
@ -299,13 +273,7 @@ Mixer::snapshot ( void )
|
||||||
void
|
void
|
||||||
Mixer::new_strip ( void )
|
Mixer::new_strip ( void )
|
||||||
{
|
{
|
||||||
engine->lock();
|
|
||||||
|
|
||||||
add( new Mixer_Strip( get_unique_track_name( "Unnamed" ), 1 ) );
|
add( new Mixer_Strip( get_unique_track_name( "Unnamed" ), 1 ) );
|
||||||
|
|
||||||
engine->unlock();
|
|
||||||
|
|
||||||
// scroll->size( mixer_strips->w(), scroll->h() );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
|
|
@ -175,6 +175,7 @@ Mixer_Strip::Mixer_Strip() : Fl_Group( 0, 0, 120, 600 )
|
||||||
|
|
||||||
Mixer_Strip::~Mixer_Strip ( )
|
Mixer_Strip::~Mixer_Strip ( )
|
||||||
{
|
{
|
||||||
|
DMESSAGE( "Destroying mixer strip" );
|
||||||
log_destroy();
|
log_destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -274,15 +275,6 @@ Mixer_Strip::handle_module_added ( Module *m )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
Mixer_Strip::process ( nframes_t nframes )
|
|
||||||
{
|
|
||||||
THREAD_ASSERT( RT );
|
|
||||||
|
|
||||||
_chain->process( nframes );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* update GUI with values from RT thread */
|
/* update GUI with values from RT thread */
|
||||||
void
|
void
|
||||||
Mixer_Strip::update ( void )
|
Mixer_Strip::update ( void )
|
||||||
|
|
|
@ -67,8 +67,6 @@ public:
|
||||||
|
|
||||||
LOG_CREATE_FUNC( Mixer_Strip );
|
LOG_CREATE_FUNC( Mixer_Strip );
|
||||||
|
|
||||||
void process ( unsigned int nframes );
|
|
||||||
|
|
||||||
static void configure_outputs ( Fl_Widget *o, void *v );
|
static void configure_outputs ( Fl_Widget *o, void *v );
|
||||||
void configure_outputs ( void );
|
void configure_outputs ( void );
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
#include "Engine/Engine.H"
|
#include "Engine/Engine.H"
|
||||||
|
#include "Chain.H"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -331,7 +332,7 @@ Plugin_Module::plugin_instances ( unsigned int n )
|
||||||
|
|
||||||
DMESSAGE( "Instantiating plugin..." );
|
DMESSAGE( "Instantiating plugin..." );
|
||||||
|
|
||||||
if ( ! (h = _idata->descriptor->instantiate( _idata->descriptor, engine->sample_rate() ) ) )
|
if ( ! (h = _idata->descriptor->instantiate( _idata->descriptor, chain()->engine()->sample_rate() ) ) )
|
||||||
{
|
{
|
||||||
WARNING( "Failed to instantiate plugin" );
|
WARNING( "Failed to instantiate plugin" );
|
||||||
return false;
|
return false;
|
||||||
|
@ -457,7 +458,7 @@ Plugin_Module::load ( unsigned long id )
|
||||||
Min=_idata->descriptor->PortRangeHints[Port].LowerBound;
|
Min=_idata->descriptor->PortRangeHints[Port].LowerBound;
|
||||||
if (LADSPA_IS_HINT_SAMPLE_RATE(HintDesc))
|
if (LADSPA_IS_HINT_SAMPLE_RATE(HintDesc))
|
||||||
{
|
{
|
||||||
Min*=engine->sample_rate();
|
Min*=chain()->engine()->sample_rate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (LADSPA_IS_HINT_BOUNDED_ABOVE(HintDesc))
|
if (LADSPA_IS_HINT_BOUNDED_ABOVE(HintDesc))
|
||||||
|
@ -465,7 +466,7 @@ Plugin_Module::load ( unsigned long id )
|
||||||
Max=_idata->descriptor->PortRangeHints[Port].UpperBound;
|
Max=_idata->descriptor->PortRangeHints[Port].UpperBound;
|
||||||
if (LADSPA_IS_HINT_SAMPLE_RATE(HintDesc))
|
if (LADSPA_IS_HINT_SAMPLE_RATE(HintDesc))
|
||||||
{
|
{
|
||||||
Max*=engine->sample_rate();
|
Max*=chain()->engine()->sample_rate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -533,7 +534,7 @@ Plugin_Module::load ( unsigned long id )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (LADSPA_IS_HINT_SAMPLE_RATE(HintDesc)) {
|
if (LADSPA_IS_HINT_SAMPLE_RATE(HintDesc)) {
|
||||||
Default *= engine->sample_rate();
|
Default *= chain()->engine()->sample_rate();
|
||||||
}
|
}
|
||||||
if (LADSPA_IS_HINT_INTEGER(HintDesc)) {
|
if (LADSPA_IS_HINT_INTEGER(HintDesc)) {
|
||||||
if ( p.hints.ranged &&
|
if ( p.hints.ranged &&
|
||||||
|
|
15
Mixer/main.C
15
Mixer/main.C
|
@ -31,12 +31,10 @@
|
||||||
#include "DPM.H"
|
#include "DPM.H"
|
||||||
|
|
||||||
#include "Mixer.H"
|
#include "Mixer.H"
|
||||||
#include "Engine/Engine.H"
|
|
||||||
#include "util/Thread.H"
|
#include "util/Thread.H"
|
||||||
#include "util/debug.h"
|
#include "util/debug.h"
|
||||||
#include "Project.H"
|
#include "Project.H"
|
||||||
|
|
||||||
Engine *engine;
|
|
||||||
Mixer *mixer;
|
Mixer *mixer;
|
||||||
|
|
||||||
Fl_Single_Window *main_window;
|
Fl_Single_Window *main_window;
|
||||||
|
@ -98,12 +96,6 @@ main ( int argc, char **argv )
|
||||||
/* Fl::foreground( 0xFF, 0xFF, 0xFF ); */
|
/* Fl::foreground( 0xFF, 0xFF, 0xFF ); */
|
||||||
/* Fl::background( 0x10, 0x10, 0x10 ); */
|
/* Fl::background( 0x10, 0x10, 0x10 ); */
|
||||||
|
|
||||||
MESSAGE( "Initializing JACK" );
|
|
||||||
|
|
||||||
engine = new Engine();
|
|
||||||
|
|
||||||
engine->init( "Non-Mixer" );
|
|
||||||
|
|
||||||
{
|
{
|
||||||
Fl_Single_Window *o = main_window = new Fl_Single_Window( 1024, 768, "Mixer" );
|
Fl_Single_Window *o = main_window = new Fl_Single_Window( 1024, 768, "Mixer" );
|
||||||
{
|
{
|
||||||
|
@ -117,8 +109,6 @@ main ( int argc, char **argv )
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
engine->lock();
|
|
||||||
|
|
||||||
if ( argc > 1 )
|
if ( argc > 1 )
|
||||||
{
|
{
|
||||||
/* char name[1024]; */
|
/* char name[1024]; */
|
||||||
|
@ -137,13 +127,12 @@ main ( int argc, char **argv )
|
||||||
{
|
{
|
||||||
WARNING( "Running without a project--nothing will be saved." );
|
WARNING( "Running without a project--nothing will be saved." );
|
||||||
}
|
}
|
||||||
|
|
||||||
engine->unlock();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Fl::run();
|
Fl::run();
|
||||||
|
|
||||||
delete engine;
|
delete main_window;
|
||||||
|
main_window = NULL;
|
||||||
|
|
||||||
MESSAGE( "Your fun is over" );
|
MESSAGE( "Your fun is over" );
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue