second chip works, stop mark introduces

This commit is contained in:
2024-04-09 18:37:53 +02:00
parent 8f777c9ac4
commit 3769b3eb05
5 changed files with 76 additions and 73 deletions

View File

@ -43,11 +43,13 @@ void sequencerExec(void *handle) {
}
melodies->sync -= 1;
melody->state = e_Sync;
} else if (melody->tones[melody->idx].length == e_L_StopMark) {
melody->state = e_Terminate;
} else {
if (melody->tones[melody->idx].length == e_L_EndMark) {
melody->idx = 0;
}
psgPlayTone(channel, melody->amplitude, melody->tones[melody->idx].octave, melody->tones[melody->idx].note);
psgPlayTone(melody->chip, channel, melody->amplitude, melody->tones[melody->idx].octave, melody->tones[melody->idx].note);
melody->lengthCnt = (melody->tones[melody->idx].staccato) ? (lengths[melody->tones[melody->idx].length] / 2) : lengths[melody->tones[melody->idx].length];
melody->state = e_HoldTone;
}
@ -64,7 +66,7 @@ void sequencerExec(void *handle) {
}
break;
case e_StaccatoBreak:
psgPlayTone(channel, 0, e_O_Null, e_Pause);
psgPlayTone(melody->chip, channel, 0, e_O_Null, e_Pause);
melody->lengthCnt = lengths[melody->tones[melody->idx].length] / 2;
melody->state = e_HoldStaccatoBreak;
break;
@ -76,11 +78,14 @@ void sequencerExec(void *handle) {
break;
case e_SeparateTone:
if (! (melody->tones[melody->idx].legato)) {
psgPlayTone(channel, 0, e_O_Null, e_Pause);
psgPlayTone(melody->chip, channel, 0, e_O_Null, e_Pause);
}
melody->idx += 1;
melody->state = e_PlayTone;
break;
case e_Terminate:
schDel(melodies->taskId);
break;
}
}
}
@ -94,6 +99,8 @@ uint16_t sequencerPlayMelodies(t_melodies *melodies) {
melodies->sync = 0;
melodies->firstRun = true;
return schAdd(sequencerExec, (void*) melodies, 0, SEQUENCER_PERIOD);
melodies->taskId = schAdd(sequencerExec, (void*) melodies, 0, SEQUENCER_PERIOD);
return melodies->taskId;
}