sounds good
This commit is contained in:
@ -4,88 +4,83 @@
|
|||||||
|
|
||||||
|
|
||||||
const t_tone notes[] = {
|
const t_tone notes[] = {
|
||||||
{ .octave = e_O_3, .note = e_G, .length = e_L_1_4, .legato = false },
|
{ .octave = e_O_3, .note = e_G, .length = e_L_1_4, .legato = false, .staccato = false },
|
||||||
{ .octave = e_O_3, .note = e_D, .length = e_L_1_8, .legato = false },
|
{ .octave = e_O_3, .note = e_D, .length = e_L_1_8, .legato = false, .staccato = false },
|
||||||
{ .octave = e_O_3, .note = e_Es, .length = e_L_1_8, .legato = false },
|
{ .octave = e_O_3, .note = e_Es, .length = e_L_1_8, .legato = false, .staccato = false },
|
||||||
|
|
||||||
{ .octave = e_O_3, .note = e_F, .length = e_L_1_4, .legato = false },
|
{ .octave = e_O_3, .note = e_F, .length = e_L_1_4, .legato = false, .staccato = false },
|
||||||
{ .octave = e_O_3, .note = e_Es, .length = e_L_1_8, .legato = false },
|
// Triller
|
||||||
{ .octave = e_O_3, .note = e_D, .length = e_L_1_8, .legato = false },
|
{ .octave = e_O_3, .note = e_Es, .length = e_L_1_32, .legato = false, .staccato = false },
|
||||||
|
{ .octave = e_O_3, .note = e_F, .length = e_L_1_32, .legato = false, .staccato = false },
|
||||||
|
{ .octave = e_O_3, .note = e_Es, .length = e_L_1_32, .legato = false, .staccato = false },
|
||||||
|
{ .octave = e_O_3, .note = e_F, .length = e_L_1_32, .legato = false, .staccato = false },
|
||||||
|
{ .octave = e_O_3, .note = e_D, .length = e_L_1_8, .legato = false, .staccato = false },
|
||||||
|
|
||||||
{ .octave = e_O_3, .note = e_C, .length = e_L_1_4, .legato = false },
|
{ .octave = e_O_3, .note = e_C, .length = e_L_1_4, .legato = false, .staccato = false },
|
||||||
{ .octave = e_O_3, .note = e_C, .length = e_L_1_8, .legato = false },
|
{ .octave = e_O_3, .note = e_C, .length = e_L_1_8, .legato = false, .staccato = false },
|
||||||
{ .octave = e_O_3, .note = e_Es, .length = e_L_1_8, .legato = false },
|
{ .octave = e_O_3, .note = e_Es, .length = e_L_1_8, .legato = false, .staccato = false },
|
||||||
|
|
||||||
{ .octave = e_O_3, .note = e_G, .length = e_L_1_4, .legato = false },
|
{ .octave = e_O_3, .note = e_G, .length = e_L_1_4, .legato = false, .staccato = false },
|
||||||
{ .octave = e_O_3, .note = e_F, .length = e_L_1_8, .legato = false },
|
{ .octave = e_O_3, .note = e_F, .length = e_L_1_8, .legato = false, .staccato = false },
|
||||||
{ .octave = e_O_3, .note = e_Es, .length = e_L_1_8, .legato = false },
|
{ .octave = e_O_3, .note = e_Es, .length = e_L_1_8, .legato = false, .staccato = false },
|
||||||
|
|
||||||
{ .octave = e_O_3, .note = e_D, .length = e_L_1_4, .legato = true },
|
{ .octave = e_O_3, .note = e_D, .length = e_L_1_4, .legato = true , .staccato = false },
|
||||||
{ .octave = e_O_3, .note = e_D, .length = e_L_1_8, .legato = false },
|
{ .octave = e_O_3, .note = e_D, .length = e_L_1_8, .legato = false, .staccato = false },
|
||||||
{ .octave = e_O_3, .note = e_Es, .length = e_L_1_8, .legato = false },
|
{ .octave = e_O_3, .note = e_Es, .length = e_L_1_8, .legato = false, .staccato = false },
|
||||||
|
|
||||||
{ .octave = e_O_3, .note = e_F, .length = e_L_1_4, .legato = false },
|
{ .octave = e_O_3, .note = e_F, .length = e_L_1_4, .legato = false, .staccato = false },
|
||||||
{ .octave = e_O_3, .note = e_G, .length = e_L_1_4, .legato = false },
|
{ .octave = e_O_3, .note = e_G, .length = e_L_1_4, .legato = false, .staccato = false },
|
||||||
|
|
||||||
// Staccato
|
{ .octave = e_O_3, .note = e_Es, .length = e_L_1_4, .legato = false, .staccato = true },
|
||||||
{ .octave = e_O_3, .note = e_Es, .length = e_L_1_8, .legato = true },
|
{ .octave = e_O_3, .note = e_C, .length = e_L_1_4, .legato = false, .staccato = true },
|
||||||
{ .octave = e_O_3, .note = e_Es, .length = e_L_1_16, .legato = false },
|
|
||||||
{ .octave = e_O_Null, .note = e_Pause, .length = e_L_1_16, .legato = false },
|
|
||||||
{ .octave = e_O_3, .note = e_C, .length = e_L_1_8, .legato = true },
|
|
||||||
{ .octave = e_O_3, .note = e_C, .length = e_L_1_16, .legato = false },
|
|
||||||
{ .octave = e_O_Null, .note = e_Pause, .length = e_L_1_16, .legato = false },
|
|
||||||
|
|
||||||
{ .octave = e_O_3, .note = e_C, .length = e_L_1_4, .legato = false },
|
{ .octave = e_O_3, .note = e_C, .length = e_L_1_4, .legato = false, .staccato = false },
|
||||||
{ .octave = e_O_Null, .note = e_Pause, .length = e_L_1_4, .legato = false },
|
{ .octave = e_O_Null, .note = e_Pause, .length = e_L_1_4, .legato = false, .staccato = false },
|
||||||
|
|
||||||
|
|
||||||
{ .octave = e_O_Null, .note = e_Pause, .length = e_L_1_8, .legato = false },
|
{ .octave = e_O_Null, .note = e_Pause, .length = e_L_1_8, .legato = false, .staccato = false },
|
||||||
{ .octave = e_O_3, .note = e_F, .length = e_L_1_8, .legato = true },
|
{ .octave = e_O_3, .note = e_F, .length = e_L_1_8, .legato = true , .staccato = false },
|
||||||
{ .octave = e_O_3, .note = e_F, .length = e_L_1_8, .legato = false },
|
{ .octave = e_O_3, .note = e_F, .length = e_L_1_8, .legato = false, .staccato = false },
|
||||||
{ .octave = e_O_3, .note = e_As, .length = e_L_1_8, .legato = false },
|
{ .octave = e_O_3, .note = e_As, .length = e_L_1_8, .legato = false, .staccato = false },
|
||||||
|
|
||||||
{ .octave = e_O_4, .note = e_C, .length = e_L_1_4, .legato = false },
|
{ .octave = e_O_4, .note = e_C, .length = e_L_1_4, .legato = false, .staccato = false },
|
||||||
{ .octave = e_O_3, .note = e_B, .length = e_L_1_8, .legato = false },
|
{ .octave = e_O_3, .note = e_B, .length = e_L_1_8, .legato = false, .staccato = false },
|
||||||
{ .octave = e_O_3, .note = e_As, .length = e_L_1_8, .legato = false },
|
{ .octave = e_O_3, .note = e_As, .length = e_L_1_8, .legato = false, .staccato = false },
|
||||||
|
|
||||||
{ .octave = e_O_3, .note = e_G, .length = e_L_1_4, .legato = true },
|
{ .octave = e_O_3, .note = e_G, .length = e_L_1_4, .legato = true , .staccato = false },
|
||||||
{ .octave = e_O_3, .note = e_G, .length = e_L_1_8, .legato = false },
|
{ .octave = e_O_3, .note = e_G, .length = e_L_1_8, .legato = false, .staccato = false },
|
||||||
{ .octave = e_O_3, .note = e_Es, .length = e_L_1_8, .legato = false },
|
{ .octave = e_O_3, .note = e_Es, .length = e_L_1_8, .legato = false, .staccato = false },
|
||||||
|
|
||||||
{ .octave = e_O_3, .note = e_G, .length = e_L_1_4, .legato = false },
|
{ .octave = e_O_3, .note = e_G, .length = e_L_1_4, .legato = false, .staccato = false },
|
||||||
{ .octave = e_O_3, .note = e_F, .length = e_L_1_8, .legato = false },
|
{ .octave = e_O_3, .note = e_F, .length = e_L_1_8, .legato = false, .staccato = false },
|
||||||
{ .octave = e_O_3, .note = e_Es, .length = e_L_1_8, .legato = false },
|
{ .octave = e_O_3, .note = e_Es, .length = e_L_1_8, .legato = false, .staccato = false },
|
||||||
|
|
||||||
{ .octave = e_O_3, .note = e_D, .length = e_L_1_4, .legato = false },
|
{ .octave = e_O_3, .note = e_D, .length = e_L_1_4, .legato = false, .staccato = false },
|
||||||
{ .octave = e_O_3, .note = e_D, .length = e_L_1_8, .legato = false },
|
{ .octave = e_O_3, .note = e_D, .length = e_L_1_8, .legato = false, .staccato = false },
|
||||||
{ .octave = e_O_3, .note = e_Es, .length = e_L_1_8, .legato = false },
|
{ .octave = e_O_3, .note = e_Es, .length = e_L_1_8, .legato = false, .staccato = false },
|
||||||
|
|
||||||
{ .octave = e_O_3, .note = e_F, .length = e_L_1_4, .legato = false },
|
{ .octave = e_O_3, .note = e_F, .length = e_L_1_4, .legato = false, .staccato = false },
|
||||||
{ .octave = e_O_3, .note = e_G, .length = e_L_1_4, .legato = false },
|
{ .octave = e_O_3, .note = e_G, .length = e_L_1_4, .legato = false, .staccato = false },
|
||||||
|
|
||||||
// Staccato
|
{ .octave = e_O_3, .note = e_Es, .length = e_L_1_4, .legato = false, .staccato = true },
|
||||||
{ .octave = e_O_3, .note = e_Es, .length = e_L_1_8, .legato = true },
|
{ .octave = e_O_3, .note = e_C, .length = e_L_1_4, .legato = false, .staccato = true },
|
||||||
{ .octave = e_O_3, .note = e_Es, .length = e_L_1_16, .legato = false },
|
|
||||||
{ .octave = e_O_Null, .note = e_Pause, .length = e_L_1_16, .legato = false },
|
|
||||||
{ .octave = e_O_3, .note = e_C, .length = e_L_1_8, .legato = true },
|
|
||||||
{ .octave = e_O_3, .note = e_C, .length = e_L_1_16, .legato = false },
|
|
||||||
{ .octave = e_O_Null, .note = e_Pause, .length = e_L_1_16, .legato = false },
|
|
||||||
|
|
||||||
{ .octave = e_O_3, .note = e_C, .length = e_L_1_4, .legato = false },
|
{ .octave = e_O_3, .note = e_C, .length = e_L_1_4, .legato = false, .staccato = false },
|
||||||
{ .octave = e_O_Null, .note = e_Pause, .length = e_L_1_4, .legato = false },
|
{ .octave = e_O_Null, .note = e_Pause, .length = e_L_1_4, .legato = false, .staccato = false },
|
||||||
|
|
||||||
{ .octave = e_O_Null, .note = e_Null, .length = e_L_EndMark, .legato = false },
|
{ .octave = e_O_Null, .note = e_Null, .length = e_L_EndMark, .legato = false, .staccato = false },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
t_melody melody= {
|
t_melody melody = {
|
||||||
|
.pace = 4,
|
||||||
|
.amplitude = 3,
|
||||||
.channel = 0,
|
.channel = 0,
|
||||||
.tones = notes
|
.tones = notes
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
void melodyInit() {
|
void melodyInit() {
|
||||||
psgAmplitude(melody.channel, 3);
|
|
||||||
sequencerPlayMelody(&melody);
|
sequencerPlayMelody(&melody);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,7 +34,8 @@ void __attribute__ ((interrupt (TIMER0_A0_VECTOR))) schUpdate() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void schAdd(void (*exec)(void *), void *handle, uint32_t delay, uint32_t period) {
|
uint16_t schAdd(void (*exec)(void *), void *handle, uint32_t delay, uint32_t period) {
|
||||||
|
uint16_t taskId = 0xffff;
|
||||||
for (uint16_t i = 0; i < MAX_NUM_OF_TASKS; i++) {
|
for (uint16_t i = 0; i < MAX_NUM_OF_TASKS; i++) {
|
||||||
if (tasks[i].exec == NULL) {
|
if (tasks[i].exec == NULL) {
|
||||||
tasks[i].delay = delay;
|
tasks[i].delay = delay;
|
||||||
@ -46,9 +47,11 @@ void schAdd(void (*exec)(void *), void *handle, uint32_t delay, uint32_t period)
|
|||||||
}
|
}
|
||||||
tasks[i].exec = exec;
|
tasks[i].exec = exec;
|
||||||
tasks[i].handle = handle;
|
tasks[i].handle = handle;
|
||||||
|
taskId = i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return taskId;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -61,6 +64,9 @@ void schDel(void (*exec)(void *), void *handle) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
void schDel(uint16_t taskId) {
|
||||||
|
tasks[taskId].exec = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void schExec() {
|
void schExec() {
|
||||||
for (uint16_t i = 0; i < MAX_NUM_OF_TASKS; i++) {
|
for (uint16_t i = 0; i < MAX_NUM_OF_TASKS; i++) {
|
||||||
|
@ -19,11 +19,10 @@ typedef struct {
|
|||||||
|
|
||||||
|
|
||||||
void schInit();
|
void schInit();
|
||||||
void schAdd(void (*exec)(void *), void *handle, uint32_t delay, uint32_t period);
|
uint16_t schAdd(void (*exec)(void *), void *handle, uint32_t delay, uint32_t period);
|
||||||
void schDel(void (*exec)(void *), void *handle);
|
// void schDel(void (*exec)(void *), void *handle);
|
||||||
|
void schDel(uint16_t taskId);
|
||||||
void schExec();
|
void schExec();
|
||||||
void schUpdate();
|
|
||||||
uint8_t schTaskCnt();
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* PONTCOOPSCHEDULER_H_ */
|
#endif /* PONTCOOPSCHEDULER_H_ */
|
||||||
|
@ -15,13 +15,22 @@ void sequencerExec(void *handle) {
|
|||||||
if (melody->tones[melody->idx].length == e_L_EndMark) {
|
if (melody->tones[melody->idx].length == e_L_EndMark) {
|
||||||
melody->idx = 0;
|
melody->idx = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
psgPlayTone(melody->channel, melody->tones[melody->idx].octave, melody->tones[melody->idx].note);
|
psgPlayTone(melody->channel, melody->tones[melody->idx].octave, melody->tones[melody->idx].note);
|
||||||
|
melody->lengthCnt = (melody->tones[melody->idx].staccato) ? (melody->tones[melody->idx].length / 2) : melody->tones[melody->idx].length;
|
||||||
melody->lengthCnt = melody->tones[melody->idx].length;
|
|
||||||
melody->state = e_HoldTone;
|
melody->state = e_HoldTone;
|
||||||
break;
|
break;
|
||||||
case e_HoldTone:
|
case e_HoldTone:
|
||||||
|
melody->lengthCnt -= 1;
|
||||||
|
if (melody->lengthCnt == 0) {
|
||||||
|
melody->state = (melody->tones[melody->idx].staccato) ? e_StaccatoBreak : e_SeparateTone;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case e_StaccatoBreak:
|
||||||
|
psgPlayTone(melody->channel, e_O_Null, e_Pause);
|
||||||
|
melody->lengthCnt = melody->tones[melody->idx].length / 2;
|
||||||
|
melody->state = e_HoldStaccatoBreak;
|
||||||
|
break;
|
||||||
|
case e_HoldStaccatoBreak:
|
||||||
melody->lengthCnt -= 1;
|
melody->lengthCnt -= 1;
|
||||||
if (melody->lengthCnt == 0) {
|
if (melody->lengthCnt == 0) {
|
||||||
melody->state = e_SeparateTone;
|
melody->state = e_SeparateTone;
|
||||||
@ -37,11 +46,12 @@ void sequencerExec(void *handle) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t sequencerPlayMelody(t_melody *melody) {
|
uint16_t sequencerPlayMelody(t_melody *melody) {
|
||||||
melody->idx = 0;
|
melody->idx = 0;
|
||||||
melody->lengthCnt = 0;
|
melody->lengthCnt = 0;
|
||||||
melody->state = e_PlayTone;
|
melody->state = e_PlayTone;
|
||||||
schAdd(sequencerExec, (void*) melody, 0, 10);
|
|
||||||
return 0;
|
psgAmplitude(melody->channel, melody->amplitude);
|
||||||
|
return schAdd(sequencerExec, (void*) melody, 0, melody->pace);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,11 +8,12 @@
|
|||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
e_L_EndMark = 0,
|
e_L_EndMark = 0,
|
||||||
e_L_1 = 80,
|
e_L_1 = 320,
|
||||||
e_L_1_2 = 40,
|
e_L_1_2 = 160,
|
||||||
e_L_1_4 = 20,
|
e_L_1_4 = 80,
|
||||||
e_L_1_8 = 10,
|
e_L_1_8 = 40,
|
||||||
e_L_1_16 = 5
|
e_L_1_16 = 20,
|
||||||
|
e_L_1_32 = 10,
|
||||||
} t_noteLength;
|
} t_noteLength;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@ -20,11 +21,14 @@ typedef struct {
|
|||||||
t_note note;
|
t_note note;
|
||||||
t_noteLength length;
|
t_noteLength length;
|
||||||
bool legato;
|
bool legato;
|
||||||
|
bool staccato;
|
||||||
} t_tone;
|
} t_tone;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
e_PlayTone,
|
e_PlayTone,
|
||||||
e_HoldTone,
|
e_HoldTone,
|
||||||
|
e_StaccatoBreak,
|
||||||
|
e_HoldStaccatoBreak,
|
||||||
e_SeparateTone
|
e_SeparateTone
|
||||||
} t_sequencerState;
|
} t_sequencerState;
|
||||||
|
|
||||||
@ -32,12 +36,14 @@ typedef struct {
|
|||||||
uint16_t idx;
|
uint16_t idx;
|
||||||
uint8_t lengthCnt;
|
uint8_t lengthCnt;
|
||||||
t_sequencerState state;
|
t_sequencerState state;
|
||||||
|
uint8_t pace;
|
||||||
|
uint8_t amplitude;
|
||||||
uint8_t channel;
|
uint8_t channel;
|
||||||
const t_tone *tones;
|
const t_tone *tones;
|
||||||
} t_melody;
|
} t_melody;
|
||||||
|
|
||||||
void sequencerInit();
|
void sequencerInit();
|
||||||
uint8_t sequencerPlayMelody(t_melody *melody);
|
uint16_t sequencerPlayMelody(t_melody *melody);
|
||||||
|
|
||||||
|
|
||||||
#endif // _SEQUENCER_H_
|
#endif // _SEQUENCER_H_
|
||||||
|
Reference in New Issue
Block a user