@@ -213,11 +213,9 @@ Playback_DS::process ( nframes_t nframes ) | |||||
/* FIXME: we need to resync somehow */ | /* FIXME: we need to resync somehow */ | ||||
} | } | ||||
/* /\* testing. *\/ */ | |||||
/* FILE *fp = fopen( "testing.au", "a" ); */ | |||||
/* fwrite( buf, block_size, 1, fp ); */ | |||||
/* fclose( fp ); */ | |||||
/* TODO: figure out a way to stop IO while muted without losing sync */ | |||||
if ( _th->mute() || ( Track::soloing() && ! _th->solo() ) ) | |||||
buffer_fill_with_silence( (sample_t*)buf, nframes ); | |||||
} | } | ||||
block_processed(); | block_processed(); | ||||
@@ -30,6 +30,8 @@ | |||||
#include "../FL/Fl_Sometimes_Input.H" | #include "../FL/Fl_Sometimes_Input.H" | ||||
#include <FL/fl_ask.H> | #include <FL/fl_ask.H> | ||||
int Track::_soloing = 0; | |||||
void | void | ||||
Track::cb_input_field ( Fl_Widget *w, void *v ) | Track::cb_input_field ( Fl_Widget *w, void *v ) | ||||
{ | { | ||||
@@ -57,14 +59,26 @@ void | |||||
Track::cb_button ( Fl_Widget *w ) | Track::cb_button ( Fl_Widget *w ) | ||||
{ | { | ||||
printf( "FIXME: inform mixer here\n" ); | |||||
if ( w == record_button ) | if ( w == record_button ) | ||||
{ | { | ||||
/* FIXME: wrong place for this! */ | |||||
if ( record_button->value() ) | |||||
record_ds->start( transport->frame ); | |||||
/* /\* FIXME: wrong place for this! *\/ */ | |||||
/* if ( record_button->value() ) */ | |||||
/* record_ds->start( transport->frame ); */ | |||||
/* else */ | |||||
/* record_ds->stop( transport->frame ); */ | |||||
} | |||||
if ( w == mute_button ) | |||||
{ | |||||
} | |||||
if ( w == solo_button ) | |||||
{ | |||||
if ( solo_button->value() ) | |||||
++_soloing; | |||||
else | else | ||||
record_ds->stop( transport->frame ); | |||||
--_soloing; | |||||
} | } | ||||
else | else | ||||
if ( w == take_menu ) | if ( w == take_menu ) | ||||
@@ -54,9 +54,11 @@ public: | |||||
Track ( const char *L, int channels=1 ); | Track ( const char *L, int channels=1 ); | ||||
~Track ( ); | ~Track ( ); | ||||
static bool soloing ( void ) { return _soloing; } | |||||
private: | private: | ||||
// Sequence * _track; | |||||
static int _soloing; | |||||
char *_name; | char *_name; | ||||
@@ -20,6 +20,7 @@ | |||||
/* General DSP related functions. */ | /* General DSP related functions. */ | ||||
#include "dsp.h" | #include "dsp.h" | ||||
#include "string.h" // for memset. | |||||
/* TODO: these functions are all targets for optimization (SSE?) */ | /* TODO: these functions are all targets for optimization (SSE?) */ | ||||
@@ -87,3 +88,10 @@ buffer_deinterleave_one_channel ( sample_t *dst, sample_t *src, int channel, int | |||||
src += channels; | src += channels; | ||||
} | } | ||||
} | } | ||||
void | |||||
buffer_fill_with_silence ( sample_t *buf, nframes_t nframes ) | |||||
{ | |||||
memset( buf, 0, nframes * sizeof( sample_t ) ); | |||||
} |
@@ -28,3 +28,4 @@ void buffer_mix_with_gain ( sample_t *dst, sample_t *src, nframes_t nframes, flo | |||||
void buffer_interleave_one_channel ( sample_t *dst, sample_t *src, int channel, int channels, nframes_t nframes ); | void buffer_interleave_one_channel ( sample_t *dst, sample_t *src, int channel, int channels, nframes_t nframes ); | ||||
void buffer_interleave_one_channel_and_mix ( sample_t *dst, sample_t *src, int channel, int channels, nframes_t nframes ); | void buffer_interleave_one_channel_and_mix ( sample_t *dst, sample_t *src, int channel, int channels, nframes_t nframes ); | ||||
void buffer_deinterleave_one_channel ( sample_t *dst, sample_t *src, int channel, int channels, nframes_t nframes ); | void buffer_deinterleave_one_channel ( sample_t *dst, sample_t *src, int channel, int channels, nframes_t nframes ); | ||||
void buffer_fill_with_silence ( sample_t *buf, nframes_t nframes ); |