mirror of
https://github.com/vale981/openAV-Luppp
synced 2025-03-05 09:01:39 -05:00
-Fixed GridLogic, now sends proper feedback to APC / GUI.
This commit is contained in:
parent
0012d3655d
commit
90edacad60
5 changed files with 62 additions and 86 deletions
|
@ -371,87 +371,9 @@ class ClipSelector : public Fl_Button
|
|||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
// decide action to take based on current state of clip
|
||||
if ( clips[clipNum].queued() )
|
||||
{
|
||||
|
||||
}
|
||||
else if ( clips[clipNum].playing() )
|
||||
{
|
||||
EventLooperState e = EventLooperState( ID, clipNum, Looper::STATE_STOP_QUEUED);
|
||||
writeToDspRingbuffer( &e );
|
||||
clips[clipNum].stop();
|
||||
//clips[clipNum].stopQueue();
|
||||
printf("stopping clip now: playingClip == %i", clipNum );
|
||||
}
|
||||
else if ( clips[clipNum].recording() )
|
||||
{
|
||||
EventLooperState e = EventLooperState( ID, clipNum, Looper::STATE_STOP_QUEUED);
|
||||
writeToDspRingbuffer( &e );
|
||||
clips[clipNum].record();
|
||||
}
|
||||
|
||||
else if ( clipNum == stopQueuedClip )
|
||||
{
|
||||
playingClip = -1;
|
||||
}
|
||||
|
||||
else if ( clips[clipNum].loaded() )
|
||||
{
|
||||
EventLooperState e = EventLooperState( ID, clipNum, Looper::STATE_PLAY_QUEUED);
|
||||
writeToDspRingbuffer( &e );
|
||||
//queuedClip = clipNum;
|
||||
}
|
||||
else if ( !clips[clipNum].loaded() )
|
||||
{
|
||||
EventLooperState e = EventLooperState( ID, clipNum, Looper::STATE_RECORD_QUEUED);
|
||||
writeToDspRingbuffer( &e );
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("avtk clipSelector handle click: no state triggered");
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
switch( clips[clipNum].state )
|
||||
{
|
||||
case ClipState::CLIP_EMPTY:
|
||||
clips[clipNum].state = ClipState::CLIP_RECORDING;
|
||||
{
|
||||
}
|
||||
break;
|
||||
case ClipState::CLIP_LOADED:
|
||||
{
|
||||
EventLooperState e = EventLooperState( ID, clipNum, Looper::STATE_PLAY_QUEUED);
|
||||
writeToDspRingbuffer( &e );
|
||||
clips[clipNum].state = ClipState::CLIP_QUEUED;
|
||||
}
|
||||
break;
|
||||
case ClipState::CLIP_QUEUED:
|
||||
clips[clipNum].state = ClipState::CLIP_QUEUED;
|
||||
break;
|
||||
case ClipState::CLIP_PLAYING:
|
||||
{
|
||||
EventLooperState e = EventLooperState( ID, clipNum, Looper::STATE_STOP_QUEUED);
|
||||
writeToDspRingbuffer( &e );
|
||||
clips[clipNum].state = ClipState::CLIP_QUEUED;
|
||||
}
|
||||
break;
|
||||
case ClipState::CLIP_RECORDING: {
|
||||
clips[clipNum].state = ClipState::CLIP_QUEUED;
|
||||
EventLooperState e = EventLooperState( ID, clipNum, Looper::STATE_STOP_QUEUED);
|
||||
writeToDspRingbuffer( &e ); }
|
||||
break;
|
||||
case ClipState::CLIP_STOPPING:
|
||||
clips[clipNum].state = ClipState::CLIP_QUEUED;
|
||||
break;
|
||||
default:
|
||||
printf("Avtk::ClipSelector, warning: unknown clip type\n");
|
||||
|
||||
}
|
||||
*/
|
||||
// write "pressed" event for this track,scene
|
||||
EventGridEvent e( ID, clipNum, true );
|
||||
writeToDspRingbuffer( &e );
|
||||
}
|
||||
}
|
||||
redraw();
|
||||
|
|
|
@ -26,6 +26,9 @@ namespace Event
|
|||
MASTER_VOL,
|
||||
RECORD,
|
||||
|
||||
// press / release events
|
||||
GRID_EVENT,
|
||||
|
||||
TRACK_SEND,
|
||||
TRACK_SIGNAL_LEVEL,
|
||||
TRACK_VOLUME,
|
||||
|
@ -92,6 +95,20 @@ class EventTrackVol : public EventBase
|
|||
}
|
||||
};
|
||||
|
||||
class EventGridEvent : public EventBase
|
||||
{
|
||||
public:
|
||||
int type() { return int(GRID_EVENT); }
|
||||
uint32_t size() { return sizeof(EventGridEvent); }
|
||||
|
||||
int track;
|
||||
int scene;
|
||||
bool pressed;
|
||||
|
||||
EventGridEvent(){};
|
||||
EventGridEvent(int t, int s, bool p): track(t), scene(s), pressed(p) {}
|
||||
};
|
||||
|
||||
class EventFxReverb : public EventBase
|
||||
{
|
||||
public:
|
||||
|
|
|
@ -40,6 +40,18 @@ void handleDspEvents()
|
|||
jack_ringbuffer_read( rbToDsp, (char*)&ev, sizeof(EventMasterVol) );
|
||||
//jack->masterVolume = ev.vol;
|
||||
} break; }
|
||||
|
||||
// ========= GRID =====
|
||||
case Event::GRID_EVENT: {
|
||||
if ( availableRead >= sizeof(EventGridEvent) ) {
|
||||
EventGridEvent ev;
|
||||
jack_ringbuffer_read( rbToDsp, (char*)&ev, sizeof(EventGridEvent) );
|
||||
if ( ev.pressed )
|
||||
jack->getGridLogic()->pressed( ev.track, ev.scene );
|
||||
else
|
||||
jack->getGridLogic()->released( ev.track, ev.scene );
|
||||
} break; }
|
||||
|
||||
case Event::LOOPER_LOAD: {
|
||||
if ( availableRead >= sizeof(EventLooperLoad) ) {
|
||||
EventLooperLoad ev;
|
||||
|
|
|
@ -13,8 +13,23 @@ GridLogic::GridLogic()
|
|||
|
||||
void GridLogic::pressed( int track, int scene )
|
||||
{
|
||||
state[track*NTRACKS + scene] = STATE_PLAYING;
|
||||
jack->getControllerUpdater()->setSceneState(track, scene, STATE_PLAY_QUEUED);
|
||||
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*NTRACKS + scene] == STATE_LOADED )
|
||||
state[track*NTRACKS + scene] = STATE_PLAY_QUEUED;
|
||||
|
||||
if ( state[track*NTRACKS + scene] == STATE_PLAYING )
|
||||
state[track*NTRACKS + scene] = STATE_STOP_QUEUED;
|
||||
|
||||
if ( state[track*NTRACKS + scene] == STATE_RECORDING )
|
||||
state[track*NTRACKS + scene] = STATE_STOP_QUEUED;
|
||||
|
||||
printf("after press state = %s\n", StateString[ int(state[track*NTRACKS + scene]) ] );
|
||||
|
||||
jack->getControllerUpdater()->setSceneState(track, scene, state[track*NTRACKS + scene]);
|
||||
}
|
||||
|
||||
|
||||
|
@ -26,7 +41,6 @@ void GridLogic::released( int track, int scene )
|
|||
|
||||
void GridLogic::updateState()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -40,6 +54,7 @@ void GridLogic::bar()
|
|||
{
|
||||
printf("GridLogic::bar()\n" );
|
||||
|
||||
/// iterate over all clips, if they're set to QUEUED, set to the next state
|
||||
for( int i = 0; i < NTRACKS*NSCENES; i++ )
|
||||
{
|
||||
bool change = false;
|
||||
|
@ -62,8 +77,8 @@ void GridLogic::bar()
|
|||
|
||||
if ( change )
|
||||
{
|
||||
int scene = i % NTRACKS;
|
||||
int track = i - scene;
|
||||
int track = i / NTRACKS;
|
||||
int scene = i - scene;
|
||||
updateState( track, scene );
|
||||
printf("GridLogic::bar(), updated %i, %i\n", track, scene );
|
||||
}
|
||||
|
|
|
@ -36,6 +36,16 @@ class GridLogic : public TimeObserver
|
|||
STATE_RECORD_QUEUED,
|
||||
};
|
||||
|
||||
const char* StateString[8] = {
|
||||
"empty",
|
||||
"playing",
|
||||
"play queued",
|
||||
"loaded",
|
||||
"stop queued",
|
||||
"recording",
|
||||
"record queued"
|
||||
};
|
||||
|
||||
GridLogic();
|
||||
|
||||
/// button press / click event
|
||||
|
|
Loading…
Add table
Reference in a new issue