From 0306a1873ea563e6ea0d0e5b4507152b6265cbd1 Mon Sep 17 00:00:00 2001 From: Harry van Haaren Date: Tue, 13 Aug 2013 00:41:17 +0100 Subject: [PATCH] -Updated APC handling, bug hunting --- src/eventhandlerdsp.cxx | 1 + src/gridlogic.cxx | 6 ++++++ src/gridlogic.hxx | 3 +++ src/jack.cxx | 17 ++++++++++++----- src/looper.cxx | 13 ++++++++++--- src/looperclip.hxx | 7 ++++--- src/trackoutput.hxx | 1 - 7 files changed, 36 insertions(+), 12 deletions(-) diff --git a/src/eventhandlerdsp.cxx b/src/eventhandlerdsp.cxx index 62ee42b..670c35c 100644 --- a/src/eventhandlerdsp.cxx +++ b/src/eventhandlerdsp.cxx @@ -58,6 +58,7 @@ void handleDspEvents() jack_ringbuffer_read( rbToDsp, (char*)&ev, sizeof(EventLooperLoad) ); Looper* l = jack->getLooper( ev.track ); l->setSample( ev.clip, (AudioBuffer*)ev.audioBuffer ); + jack->getGridLogic()->load( ev.track, ev.clip ); } break; } case Event::METRONOME_ACTIVE: { if ( availableRead >= sizeof(EventMetronomeActive) ) { diff --git a/src/gridlogic.cxx b/src/gridlogic.cxx index 5a3c552..e71071b 100644 --- a/src/gridlogic.cxx +++ b/src/gridlogic.cxx @@ -38,6 +38,12 @@ void GridLogic::released( int track, int scene ) jack->getControllerUpdater()->setSceneState(track, scene, state[track*NSCENES + scene] ); } +void GridLogic::load(int track, int scene) +{ + state[track*NSCENES + scene] = STATE_LOADED; + jack->getControllerUpdater()->setSceneState(track, scene, state[track*NSCENES + scene] ); +} + void GridLogic::updateState() { diff --git a/src/gridlogic.hxx b/src/gridlogic.hxx index f6a0479..ba7eaf6 100644 --- a/src/gridlogic.hxx +++ b/src/gridlogic.hxx @@ -54,6 +54,9 @@ class GridLogic : public TimeObserver /// button release / click-release event void released( int track, int scene ); + /// GUI load event + void load(int track, int scene); + /// resend entire grid state to controllers void updateState(); diff --git a/src/jack.cxx b/src/jack.cxx index fe0f1c6..bbea9cc 100644 --- a/src/jack.cxx +++ b/src/jack.cxx @@ -189,9 +189,9 @@ int Jack::process (jack_nframes_t nframes) } - metronome->process( nframes, &buffers ); + //metronome->process( nframes, &buffers ); + - /* // process fx float* buf[] = { buffers.audio[Buffers::REVERB], @@ -205,7 +205,8 @@ int Jack::process (jack_nframes_t nframes) reverbMeter->process(nframes, buffers.audio[Buffers::REVERB], buffers.audio[Buffers::REVERB] ); reverb->process( nframes, &buf[0], &buf[2] ); } - */ + + // db meter on master output, then memcpy to JACK masterMeter->process(nframes, buffers.audio[Buffers::MASTER_OUT_L], buffers.audio[Buffers::MASTER_OUT_R] ); @@ -223,8 +224,14 @@ int Jack::process (jack_nframes_t nframes) for(int i = 0; i < buffers.nframes; i++) { - buffers.audio[Buffers::JACK_MASTER_OUT_L][i] = buffers.audio[Buffers::MASTER_OUT_L][i]; - buffers.audio[Buffers::JACK_MASTER_OUT_R][i] = buffers.audio[Buffers::MASTER_OUT_R][i]; + float tmp = 0.f; + for(int t = 0; t < NTRACKS; t++) + { + tmp += buffers.audio[Buffers::TRACK_0 + t][i]; + } + + buffers.audio[Buffers::JACK_MASTER_OUT_L][i] = tmp; + buffers.audio[Buffers::JACK_MASTER_OUT_R][i] = tmp; } /* diff --git a/src/looper.cxx b/src/looper.cxx index f85f29a..d948344 100644 --- a/src/looper.cxx +++ b/src/looper.cxx @@ -49,7 +49,14 @@ void Looper::setRecord(int scene, bool r) void Looper::play(int scene, bool r) { - clips[scene].playing(r); + if ( r ) + { + for(int i = 0; i < NSCENES; i++) + { + clips[scene].playing(false); + } + clips[scene].playing(true); + } } LooperClip* Looper::getClip(int scene) @@ -185,7 +192,7 @@ void Looper::process(int nframes, Buffers* buffers) if ( clips[clip].recording() ) { if ( clips[clip].recordSpaceAvailable() < LOOPER_SAMPLES_BEFORE_REQUEST && - !clips[clip].newBufferInTransit() ) + !clips[clip].newBufferInTransit() ) { EventLooperClipRequestBuffer e( track, clip, clips[clip].audioBufferSize() + 44100 * 4); writeToGuiRingbuffer( &e ); @@ -206,7 +213,7 @@ void Looper::process(int nframes, Buffers* buffers) out[i] = clips[clip].getSample(); } - // update UI of progress + // FIXME: should user ControllerUpdater if ( uiUpdateCounter > uiUpdateConstant ) { jack->getControllerUpdater()->setTrackSceneProgress(track, clip, clips[clip].getProgress() ); diff --git a/src/looperclip.hxx b/src/looperclip.hxx index 91cc98e..f55c19e 100644 --- a/src/looperclip.hxx +++ b/src/looperclip.hxx @@ -53,8 +53,6 @@ class LooperClip _buffer = ab; _playhead = 0; - - _playing = true; } /// used to update the size of the buffer for this looperclip. The current @@ -99,7 +97,10 @@ class LooperClip unsigned long recordSpaceAvailable() { - return _buffer->getData().size() - _recordhead; + if ( _buffer ) + return _buffer->getData().size() - _recordhead; + + return 0; } size_t audioBufferSize() diff --git a/src/trackoutput.hxx b/src/trackoutput.hxx index 6c99e62..b4bbbfb 100644 --- a/src/trackoutput.hxx +++ b/src/trackoutput.hxx @@ -105,7 +105,6 @@ class TrackOutput : public AudioProcessor *sidechain++ += tmp * _toSidechain; *postSidechain++ += tmp * _toPostSidechain; } - } ~TrackOutput()