From a20da93fdbdfd51a67984eac4575bf2f5b13ea6f Mon Sep 17 00:00:00 2001 From: Harry van Haaren Date: Thu, 25 Jul 2013 18:11:59 +0100 Subject: [PATCH] -Implementing track buffers --- src/buffers.hxx | 17 +++++++++++++++-- src/jack.cxx | 3 +++ src/looper.cxx | 4 +++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/buffers.hxx b/src/buffers.hxx index 87b5e35..8e5719c 100644 --- a/src/buffers.hxx +++ b/src/buffers.hxx @@ -10,10 +10,11 @@ class Buffers public: Buffers() { - memset( audio, 0, sizeof(float*)*2); + memset( audio, 0, sizeof(float*)*32); + memset( midi , 0, sizeof(void *)*32); } float* audio[32]; - void* midi [32]; + void* midi [32]; enum BUFFER { MASTER_OUTPUT = 0, @@ -21,6 +22,18 @@ class Buffers MASTER_MIDI_INPUT, APC_INPUT, APC_OUTPUT, + + // track buffers: they are the "working" buffers per track: + // the end result is mixed into the master output, while each + // stage along the way the amplitude etc can be analysed + TRACK_0, + TRACK_1, + TRACK_2, + TRACK_3, + TRACK_4, + TRACK_5, + TRACK_6, + TRACK_7, }; // Jack details diff --git a/src/jack.cxx b/src/jack.cxx index aa0f9d2..3969071 100644 --- a/src/jack.cxx +++ b/src/jack.cxx @@ -66,6 +66,9 @@ Jack::Jack() for(int i = 0; i < NTRACKS; i++) { + // allocate working buffers for each track + buffers.audio[Buffers::TRACK_0 + i] = (float*) malloc( sizeof(float) * nframes ); + loopers.push_back( new Looper(i) ); timeManager.registerObserver( loopers.back() ); } diff --git a/src/looper.cxx b/src/looper.cxx index 6e2343a..9829e4c 100644 --- a/src/looper.cxx +++ b/src/looper.cxx @@ -24,6 +24,8 @@ Looper::Looper(int t) : // pre-zero the internal sample memset( &sample[0], 0, SAMPLE_SIZE ); + printf("Looper ID %i\n" , track ); + // init faust pitch shift variables fSamplingFreq = 44100; IOTA = 0; @@ -151,7 +153,7 @@ void Looper::setSample(int c, AudioBuffer* ab) void Looper::process(int nframes, Buffers* buffers) { float* in = buffers->audio[Buffers::MASTER_INPUT]; - float* out = buffers->audio[Buffers::MASTER_OUTPUT]; + float* out = buffers->audio[Buffers::TRACK_0 + track]; float playbackSpeed = endPoint / ( float(numBeats) * fpb ); semitoneShift = -( 12 * log ( playbackSpeed ) / log (2) );