sequencer states
This commit is contained in:
@ -3,6 +3,7 @@
|
||||
#include "psg.h"
|
||||
|
||||
|
||||
|
||||
void sequencerInit() {
|
||||
}
|
||||
|
||||
@ -10,7 +11,7 @@ void sequencerExec(void *handle) {
|
||||
t_melody *melody = (t_melody*) handle;
|
||||
|
||||
switch (melody->state) {
|
||||
case 0:
|
||||
case e_PlayTone:
|
||||
if (melody->tones[melody->idx].length == e_L_EndMark) {
|
||||
melody->idx = 0;
|
||||
}
|
||||
@ -18,20 +19,20 @@ void sequencerExec(void *handle) {
|
||||
psgPlayTone(melody->channel, melody->tones[melody->idx].octave, melody->tones[melody->idx].note);
|
||||
|
||||
melody->lengthCnt = melody->tones[melody->idx].length;
|
||||
melody->state = 1;
|
||||
melody->state = e_HoldTone;
|
||||
break;
|
||||
case 1:
|
||||
case e_HoldTone:
|
||||
melody->lengthCnt -= 1;
|
||||
if (melody->lengthCnt == 0) {
|
||||
melody->state = 2;
|
||||
melody->state = e_SeparateTone;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
case e_SeparateTone:
|
||||
if (! (melody->tones[melody->idx].legato)) {
|
||||
psgPlayTone(melody->channel, e_O_Null, e_Pause);
|
||||
}
|
||||
melody->idx += 1;
|
||||
melody->state = 0;
|
||||
melody->state = e_PlayTone;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -39,7 +40,7 @@ void sequencerExec(void *handle) {
|
||||
uint8_t sequencerPlayMelody(t_melody *melody) {
|
||||
melody->idx = 0;
|
||||
melody->lengthCnt = 0;
|
||||
melody->state = 0;
|
||||
melody->state = e_PlayTone;
|
||||
schAdd(sequencerExec, (void*) melody, 0, 10);
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user