Brick Groove Machine 0.9.3
Firmware embarqué pour contrôleur/synthé Brick
 
Chargement...
Recherche...
Aucune correspondance
arp_engine.h
Aller à la documentation de ce fichier.
1#ifndef BRICK_CORE_ARP_ARP_ENGINE_H
2#define BRICK_CORE_ARP_ARP_ENGINE_H
3
4// --- ARP: moteur d'arpégiateur configurables ---
5
6#include <stdbool.h>
7#include <stdint.h>
8#include "ch.h"
9
10#ifdef __cplusplus
11extern "C" {
12#endif
13
14// --- ARP: Cadence principale (note rate) ---
26
27// --- ARP: Modes de direction/pattern ---
36
37// --- ARP: Modes d'accentuation ---
45
46// --- ARP: Modes de strum ---
55
56// --- ARP: Mode de synchronisation ---
63
64// --- ARP: Configuration complète ---
65typedef struct {
66 bool enabled;
67 bool hold_enabled; // --- ARP FIX: Hold (On/Off) ---
69 uint8_t octave_range; // 1..4
71 uint8_t gate_percent; // 10..100
72 uint8_t swing_percent; // 0..75
74 uint8_t vel_accent; // --- ARP FIX: intensité accent 0..127 ---
76 uint8_t strum_offset_ms; // --- ARP FIX: 0..60 ms ---
77 int8_t transpose; // ±12
78 uint8_t spread_percent; // 0..100
79 uint8_t direction_behavior;// 0..2 (Normal/PingPong/RandomWalk)
82
83// --- ARP: Callbacks NoteOn/NoteOff ---
84typedef struct {
85 void (*note_on)(uint8_t note, uint8_t velocity, systime_t when); // --- ARP FIX: timestamp pour note on ---
86 void (*note_off)(uint8_t note);
88
89// --- ARP: Moteur runtime ---
90typedef struct {
93
94 uint8_t phys_notes[32];
95 uint8_t phys_velocities[32];
96 uint8_t phys_count;
97
98 uint8_t latched_notes[32];
99 uint8_t latched_velocities[32];
102
103 uint8_t pattern_notes[32];
104 uint8_t pattern_velocities[32];
106
111
112 uint32_t step_index;
113 uint8_t direction; // 0 up,1 down
115 uint8_t strum_phase; // --- ARP FIX: alt/rnd strum mémoire ---
116
117 uint8_t active_notes[64];
118 systime_t active_until[64];
120
121 uint8_t pending_on_notes[64];
122 uint8_t pending_on_vel[64];
123 systime_t pending_on_time[64];
125
126 uint32_t random_seed;
128
129// --- ARP: API principale ---
130void arp_init(arp_engine_t *engine, const arp_config_t *cfg);
131void arp_set_callbacks(arp_engine_t *engine, const arp_callbacks_t *cb);
132void arp_set_config(arp_engine_t *engine, const arp_config_t *cfg);
133void arp_note_input(arp_engine_t *engine, uint8_t note, uint8_t velocity, bool pressed);
134void arp_tick(arp_engine_t *engine, systime_t now);
135void arp_stop_all(arp_engine_t *engine);
136void arp_set_hold(arp_engine_t *engine, bool enabled); // --- ARP FIX: API dédiée Hold ---
137
138#ifdef __cplusplus
139}
140#endif
141
142#endif /* BRICK_CORE_ARP_ARP_ENGINE_H */
arp_pattern_t
Definition arp_engine.h:28
@ ARP_PATTERN_UP
Definition arp_engine.h:29
@ ARP_PATTERN_RANDOM
Definition arp_engine.h:32
@ ARP_PATTERN_COUNT
Definition arp_engine.h:34
@ ARP_PATTERN_DOWN
Definition arp_engine.h:30
@ ARP_PATTERN_CHORD
Definition arp_engine.h:33
@ ARP_PATTERN_UP_DOWN
Definition arp_engine.h:31
arp_rate_t
Definition arp_engine.h:15
@ ARP_RATE_EIGHTH_TRIPLET
Definition arp_engine.h:21
@ ARP_RATE_SIXTEENTH
Definition arp_engine.h:18
@ ARP_RATE_QUARTER_TRIPLET
Definition arp_engine.h:20
@ ARP_RATE_THIRTY_SECOND_TRIPLET
Definition arp_engine.h:23
@ ARP_RATE_COUNT
Definition arp_engine.h:24
@ ARP_RATE_QUARTER
Definition arp_engine.h:16
@ ARP_RATE_SIXTEENTH_TRIPLET
Definition arp_engine.h:22
@ ARP_RATE_EIGHTH
Definition arp_engine.h:17
@ ARP_RATE_THIRTY_SECOND
Definition arp_engine.h:19
void arp_init(arp_engine_t *engine, const arp_config_t *cfg)
Definition arp_engine.c:491
void arp_tick(arp_engine_t *engine, systime_t now)
Definition arp_engine.c:583
void arp_set_callbacks(arp_engine_t *engine, const arp_callbacks_t *cb)
Definition arp_engine.c:522
arp_accent_t
Definition arp_engine.h:38
@ ARP_ACCENT_COUNT
Definition arp_engine.h:43
@ ARP_ACCENT_FIRST
Definition arp_engine.h:40
@ ARP_ACCENT_RANDOM
Definition arp_engine.h:42
@ ARP_ACCENT_ALTERNATE
Definition arp_engine.h:41
@ ARP_ACCENT_OFF
Definition arp_engine.h:39
void arp_set_config(arp_engine_t *engine, const arp_config_t *cfg)
Definition arp_engine.c:531
void arp_note_input(arp_engine_t *engine, uint8_t note, uint8_t velocity, bool pressed)
Definition arp_engine.c:539
arp_sync_mode_t
Definition arp_engine.h:57
@ ARP_SYNC_INTERNAL
Definition arp_engine.h:58
@ ARP_SYNC_COUNT
Definition arp_engine.h:61
@ ARP_SYNC_MIDI_CLOCK
Definition arp_engine.h:59
@ ARP_SYNC_FREERUN
Definition arp_engine.h:60
arp_strum_t
Definition arp_engine.h:47
@ ARP_STRUM_RANDOM
Definition arp_engine.h:52
@ ARP_STRUM_UP
Definition arp_engine.h:49
@ ARP_STRUM_COUNT
Definition arp_engine.h:53
@ ARP_STRUM_OFF
Definition arp_engine.h:48
@ ARP_STRUM_DOWN
Definition arp_engine.h:50
@ ARP_STRUM_ALT
Definition arp_engine.h:51
void arp_stop_all(arp_engine_t *engine)
Definition arp_engine.c:630
void arp_set_hold(arp_engine_t *engine, bool enabled)
Definition arp_engine.c:643
uint32_t systime_t
Definition ch.h:12
Definition arp_engine.h:84
Definition arp_engine.h:65
arp_rate_t rate
Definition arp_engine.h:68
arp_strum_t strum_mode
Definition arp_engine.h:75
uint8_t octave_range
Definition arp_engine.h:69
uint8_t spread_percent
Definition arp_engine.h:78
bool enabled
Definition arp_engine.h:66
int8_t transpose
Definition arp_engine.h:77
uint8_t strum_offset_ms
Definition arp_engine.h:76
uint8_t gate_percent
Definition arp_engine.h:71
uint8_t direction_behavior
Definition arp_engine.h:79
arp_sync_mode_t sync_mode
Definition arp_engine.h:80
uint8_t swing_percent
Definition arp_engine.h:72
arp_accent_t accent
Definition arp_engine.h:73
uint8_t vel_accent
Definition arp_engine.h:74
bool hold_enabled
Definition arp_engine.h:67
arp_pattern_t pattern
Definition arp_engine.h:70
Definition arp_engine.h:90
systime_t strum_offset
Definition arp_engine.h:110
arp_callbacks_t callbacks
Definition arp_engine.h:92
arp_config_t config
Definition arp_engine.h:91
uint32_t step_index
Definition arp_engine.h:112
uint32_t random_seed
Definition arp_engine.h:126
systime_t next_event
Definition arp_engine.h:107
uint8_t direction
Definition arp_engine.h:113
bool latched_active
Definition arp_engine.h:101
uint8_t latched_count
Definition arp_engine.h:100
uint8_t strum_phase
Definition arp_engine.h:115
systime_t swing_period
Definition arp_engine.h:109
systime_t base_period
Definition arp_engine.h:108
uint8_t active_count
Definition arp_engine.h:119
uint8_t pending_on_count
Definition arp_engine.h:124
bool running
Definition arp_engine.h:114
uint8_t pattern_count
Definition arp_engine.h:105
uint8_t phys_count
Definition arp_engine.h:96