sound-experiment-01/sequencer.h

107 lines
2.1 KiB
C
Raw Normal View History

2024-06-06 17:05:17 +02:00
#ifndef _SEQUENCER_H_
#define _SEQUENCER_H_
2024-06-11 21:24:54 +02:00
#include <stdint.h>
2024-06-06 17:05:17 +02:00
typedef enum {
SA_WAIT,
SA_CHANGE_SOUND,
SA_MOVE_SOUND,
SA_CHANGE_VOLUME,
SA_MOVE_VOLUME,
SA_REPEAT,
SA_END,
} sequencerActionType_t;
typedef struct {
sequencerActionType_t type;
union {
uint32_t wait;
struct {
uint16_t frequency_a;
uint8_t volume_a;
uint16_t frequency_b;
uint8_t volume_b;
} cs;
struct {
uint16_t frequency_a_0;
uint8_t volume_a_0;
uint16_t frequency_b_0;
uint8_t volume_b_0;
uint16_t frequency_a_1;
uint8_t volume_a_1;
uint16_t frequency_b_1;
uint8_t volume_b_1;
uint32_t move_time;
} ms;
struct {
uint8_t volume_a;
uint8_t volume_b;
} cv;
struct {
uint8_t volume_a_0;
uint8_t volume_b_0;
uint8_t volume_a_1;
uint8_t volume_b_1;
uint32_t move_time;
} mv;
} u;
} sequencerAction_t;
2024-06-11 21:24:54 +02:00
#define W(X0) (sequencerAction_t) { \
.type = SA_WAIT, \
.u.wait = X0 \
}
2024-06-06 17:05:17 +02:00
2024-06-11 21:24:54 +02:00
#define CS(X0, X1, X2, X3) (sequencerAction_t) { \
.type = SA_CHANGE_SOUND, \
.u.cs.frequency_a = X0, \
.u.cs.volume_a = X1, \
.u.cs.frequency_b = X2, \
.u.cs.volume_b = X3 \
}
#define MS(X0, X1, X2, X3, \
X4, X5, X6, X7, X8) (sequencerAction_t) { \
.type = SA_MOVE_SOUND, \
.u.ms.frequency_a_0 = X0, \
.u.ms.volume_a_0 = X1, \
.u.ms.frequency_b_0 = X2, \
.u.ms.volume_b_0 = X3, \
.u.ms.frequency_a_1 = X4, \
.u.ms.volume_a_1 = X5, \
.u.ms.frequency_b_1 = X6, \
.u.ms.volume_b_1 = X7, \
.u.ms.move_time = X8 \
}
#define CV(X0, X1) (sequencerAction_t) { \
.type = SA_CHANGE_VOLUME, \
.u.cv.volume_a = X0, \
.u.cv.volume_b = X1 \
}
#define MV(X0, X1, X2, X3, X4) (sequencerAction_t) { \
.type = SA_MOVE_VOLUME, \
.u.mv.volume_a_0 = X0, \
.u.mv.volume_b_0 = X1, \
.u.mv.volume_a_1 = X2, \
.u.mv.volume_b_1 = X3, \
.u.mv.move_time = X4 \
}
#define R() (sequencerAction_t) { \
.type = SA_REPEAT \
}
#define E() (sequencerAction_t) { \
.type = SA_END \
}
void sequencerStart(const sequencerAction_t *sequence);
2024-06-06 17:05:17 +02:00
void sequencerInit();
#endif // _SEQUENCER_H_