2024-03-26 15:58:45 +01:00
|
|
|
#include "sequencer.h"
|
|
|
|
#include "scheduler.h"
|
|
|
|
#include "psg.h"
|
|
|
|
|
|
|
|
|
|
|
|
void sequencerInit() {
|
|
|
|
}
|
|
|
|
|
|
|
|
void sequencerExec(void *handle) {
|
|
|
|
t_melody *melody = (t_melody*) handle;
|
|
|
|
|
|
|
|
if (melody->lengthCnt == 0) {
|
2024-03-26 16:47:42 +01:00
|
|
|
if (melody->tones[melody->idx].length == e_L_EndMark) {
|
2024-03-26 15:58:45 +01:00
|
|
|
melody->idx = 0;
|
|
|
|
}
|
|
|
|
|
2024-03-26 16:47:42 +01:00
|
|
|
psgPlayTone(melody->channel, melody->tones[melody->idx].octave, melody->tones[melody->idx].note);
|
2024-03-26 15:58:45 +01:00
|
|
|
|
|
|
|
melody->lengthCnt = melody->tones[melody->idx].length;
|
2024-03-26 16:47:42 +01:00
|
|
|
melody->idx += 1;
|
2024-03-26 15:58:45 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
melody->lengthCnt -= 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t sequencerPlayMelody(t_melody *melody) {
|
|
|
|
melody->idx = 0;
|
|
|
|
melody->lengthCnt = 0;
|
|
|
|
schAdd(sequencerExec, (void*) melody, 0, 25);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|