-APC / GUI feedback using GridState now implemented.

This commit is contained in:
Harry van Haaren 2013-08-06 23:19:56 +01:00
parent 90edacad60
commit a5071a3bbb
6 changed files with 56 additions and 33 deletions

View file

@ -135,30 +135,34 @@ class ClipSelector : public Fl_Button
break;
case GridLogic::STATE_LOADED:
clips[clipNum].load();
clips[clipNum].unqueue();
printf("clipSelector setState() clip %i = STATE_LOADED\n", clipNum);
break;
case GridLogic::STATE_PLAYING:
printf("clipSelector setState() clip %i = CLIP_PLAYING\n", clipNum);
printf("clipSelector setState() clip %i = STATE_PLAYING\n", clipNum);
for(int i = 0; i < numClips; i++ )
clips[clipNum].stop();
clips[clipNum].unqueue();
clips[clipNum].play();
break;
case GridLogic::STATE_PLAY_QUEUED:
for(int i = 0; i < numClips; i++ )
clips[clipNum].unqueue();
clips[clipNum].queue();
printf("clipSelector setState() clip %i = CLIP_QUEUED\n", clipNum);
printf("clipSelector setState() clip %i = STATE_PLAY_QUEUED\n", clipNum);
break;
case GridLogic::STATE_RECORDING:
for(int i = 0; i < numClips; i++ )
clips[clipNum].stopRecord();
clips[clipNum].unqueue();
clips[clipNum].record();
printf("clipSelector setState() clip %i = CLIP_RECORDING\n", clipNum);
printf("clipSelector setState() clip %i = STATE_RECORDING\n", clipNum);
break;
case GridLogic::STATE_RECORD_QUEUED:
for(int i = 0; i < numClips; i++ )
clips[clipNum].unqueue();
clips[clipNum].queue();
printf("clipSelector setState() clip %i = CLIP_QUEUED\n", clipNum);
printf("clipSelector setState() clip %i = STATE_RECORD_QUEUED\n", clipNum);
break;
/*
case GridLogic::STATE_STOPPED:
@ -167,7 +171,10 @@ class ClipSelector : public Fl_Button
break;
*/
case GridLogic::STATE_STOP_QUEUED:
printf("clipSelector setState() clip %i = CLIP_QUEUED\n", clipNum);
printf("clipSelector setState() clip %i = STATE_STOP_QUEUED\n", clipNum);
clips[clipNum].stopRecord();
clips[clipNum].stop();
clips[clipNum].queue();
break;
}

View file

@ -35,7 +35,8 @@ void LupppGUI::fxReverbSend(int t, float r)
void LupppGUI::setSceneState(int t, int clip, GridLogic::State s)
{
EventGridState e( t, clip, s );
writeToGuiRingbuffer( &e );
}
void LupppGUI::mute(int t, bool b)

View file

@ -12,6 +12,7 @@
*/
#include "looper.hxx"
#include "gridlogic.hxx"
namespace Event
{
@ -26,8 +27,8 @@ namespace Event
MASTER_VOL,
RECORD,
// press / release events
GRID_EVENT,
GRID_EVENT, // press / release events
GRID_STATE, // state of one block
TRACK_SEND,
TRACK_SIGNAL_LEVEL,
@ -109,6 +110,20 @@ class EventGridEvent : public EventBase
EventGridEvent(int t, int s, bool p): track(t), scene(s), pressed(p) {}
};
class EventGridState : public EventBase
{
public:
int type() { return int(GRID_STATE); }
uint32_t size() { return sizeof(EventGridState); }
int track;
int scene;
GridLogic::State state;
EventGridState(){};
EventGridState(int t, int s, GridLogic::State st): track(t), scene(s), state(st) {}
};
class EventFxReverb : public EventBase
{
public:

View file

@ -89,6 +89,15 @@ void handleGuiEvents()
else
gui->getTrack(ev.track)->getVolume()->value( ev.vol );
} break; }
case Event::GRID_STATE: {
if ( availableRead >= sizeof(EventGridState) ) {
EventGridState ev;
jack_ringbuffer_read( rbToGui, (char*)&ev, sizeof(EventGridState) );
gui->getTrack(ev.track)->getClipSelector()->setState( ev.scene, ev.state );
} break; }
case Event::TRACK_SEND: {
if ( availableRead >= sizeof(EventTrackSend) ) {
EventTrackSend ev;

View file

@ -15,38 +15,33 @@ void GridLogic::pressed( int track, int scene )
{
printf("before press state = %s\n", StateString[ int(state[track*NTRACKS + scene]) ] );
if ( state[track*NTRACKS + scene] == STATE_EMPTY )
state[track*NTRACKS + scene] = STATE_RECORD_QUEUED;
if ( state[track*NSCENES + scene] == STATE_EMPTY )
state[track*NSCENES + scene] = STATE_RECORD_QUEUED;
if ( state[track*NTRACKS + scene] == STATE_LOADED )
state[track*NTRACKS + scene] = STATE_PLAY_QUEUED;
if ( state[track*NSCENES + scene] == STATE_LOADED )
state[track*NSCENES + scene] = STATE_PLAY_QUEUED;
if ( state[track*NTRACKS + scene] == STATE_PLAYING )
state[track*NTRACKS + scene] = STATE_STOP_QUEUED;
if ( state[track*NSCENES + scene] == STATE_PLAYING )
state[track*NSCENES + scene] = STATE_STOP_QUEUED;
if ( state[track*NTRACKS + scene] == STATE_RECORDING )
state[track*NTRACKS + scene] = STATE_STOP_QUEUED;
if ( state[track*NSCENES + scene] == STATE_RECORDING )
state[track*NSCENES + scene] = STATE_STOP_QUEUED;
printf("after press state = %s\n", StateString[ int(state[track*NTRACKS + scene]) ] );
printf("after press state = %s\n", StateString[ int(state[track*NSCENES + scene]) ] );
jack->getControllerUpdater()->setSceneState(track, scene, state[track*NTRACKS + scene]);
jack->getControllerUpdater()->setSceneState(track, scene, state[track*NSCENES + scene]);
}
void GridLogic::released( int track, int scene )
{
jack->getControllerUpdater()->setSceneState(track, scene, state[track*NTRACKS + scene] );
jack->getControllerUpdater()->setSceneState(track, scene, state[track*NSCENES + scene] );
}
void GridLogic::updateState()
{
}
void GridLogic::updateState( int track, int scene )
{
jack->getControllerUpdater()->setSceneState(track, scene, state[track*NTRACKS + scene] );
printf("GridLogic::updateState() stub" );
}
@ -77,10 +72,10 @@ void GridLogic::bar()
if ( change )
{
int track = i / NTRACKS;
int scene = i - scene;
updateState( track, scene );
printf("GridLogic::bar(), updated %i, %i\n", track, scene );
int track = i / NSCENES;
int scene = i - track * NSCENES;
jack->getControllerUpdater()->setSceneState(track, scene, state[track*NSCENES + scene] );
printf("GridLogic::bar(), i = %i, track %i, scene %i\n", i, track, scene );
}
}

View file

@ -57,10 +57,6 @@ class GridLogic : public TimeObserver
/// resend entire grid state to controllers
void updateState();
/// resend track / scene combo to controllers
void updateState( int track, int scene );
/// time functions, not for use by Controller subclasses
void bar();
void beat();