@@ -127,10 +127,6 @@ Engine::process ( nframes_t nframes ) | |||||
{ | { | ||||
transport->poll(); | transport->poll(); | ||||
if ( ! transport->rolling ) | |||||
/* FIXME: fill all ports with silence */ | |||||
return 0; | |||||
if ( ! trylock() ) | if ( ! trylock() ) | ||||
{ | { | ||||
/* the data structures we need to access here (tracks and | /* the data structures we need to access here (tracks and | ||||
@@ -141,6 +137,11 @@ Engine::process ( nframes_t nframes ) | |||||
return 0; | return 0; | ||||
} | } | ||||
/* if ( ! transport->rolling ) */ | |||||
/* timeline->silence( nframes ); */ | |||||
/* return 0; */ | |||||
/* handle chicken/egg problem */ | /* handle chicken/egg problem */ | ||||
if ( timeline ) | if ( timeline ) | ||||
/* this will initiate the process() call graph for the various | /* this will initiate the process() call graph for the various | ||||
@@ -122,3 +122,9 @@ Port::buffer ( nframes_t nframes ) | |||||
{ | { | ||||
return jack_port_get_buffer( _port, nframes ); | return jack_port_get_buffer( _port, nframes ); | ||||
} | } | ||||
void | |||||
Port::silence ( nframes_t nframes ) | |||||
{ | |||||
memset( buffer( nframes ), 0, nframes * sizeof( sample_t ) ); | |||||
} |
@@ -62,5 +62,5 @@ public: | |||||
void write ( sample_t *buf, nframes_t nframes ); | void write ( sample_t *buf, nframes_t nframes ); | ||||
void read ( sample_t *buf, nframes_t nframes ); | void read ( sample_t *buf, nframes_t nframes ); | ||||
void *buffer ( nframes_t nframes ); | void *buffer ( nframes_t nframes ); | ||||
void silence ( nframes_t nframes ); | |||||
}; | }; |
@@ -645,6 +645,22 @@ Track::configure_inputs ( int n ) | |||||
nframes_t | nframes_t | ||||
Track::process ( nframes_t nframes ) | Track::process ( nframes_t nframes ) | ||||
{ | { | ||||
if ( ! transport->rolling ) | |||||
{ | |||||
for ( int i = output.size(); i--; ) | |||||
output[ i ].silence( nframes ); | |||||
for ( int i = input.size(); i--; ) | |||||
input[ i ].silence( nframes ); | |||||
/* FIXME: is this really the right thing to do for control ports? */ | |||||
for ( int i = control_out.size(); i--; ) | |||||
control_out[ i ]->silence( nframes ); | |||||
return 0; | |||||
} | |||||
for ( int i = control->children(); i--; ) | for ( int i = control->children(); i--; ) | ||||
((Control_Sequence*)control->child( i ))->process( nframes ); | ((Control_Sequence*)control->child( i ))->process( nframes ); | ||||