mirror of
https://github.com/vale981/openAV-Luppp
synced 2025-03-05 09:01:39 -05:00
-APC / GUI feedback using GridState now implemented.
This commit is contained in:
parent
90edacad60
commit
a5071a3bbb
6 changed files with 56 additions and 33 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Add table
Reference in a new issue