aboutsummaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
authorspl3g <spleefer6@yandex.ru>2025-11-07 15:20:41 +0300
committerspl3g <spleefer6@yandex.ru>2025-11-07 15:20:41 +0300
commit11e5f50717af85f775491a5d2a2867a7e0f9c45f (patch)
tree1e58061d7bcd7499018f53357243ebd13daeffc4 /src/main.c
parent5d74f4437de84f784e0d972be03da03505154eb7 (diff)
Improve the wave screen
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c35
1 files changed, 22 insertions, 13 deletions
diff --git a/src/main.c b/src/main.c
index f254074..1b398d1 100644
--- a/src/main.c
+++ b/src/main.c
@@ -223,7 +223,7 @@ int init_ui(app_state *state) {
return 0;
}
-KeyState keys[12] = {
+static KeyState keys[] = {
{'Z', SDL_SCANCODE_Z, 0, 0}, {'S', SDL_SCANCODE_S, 0, 0},
{'X', SDL_SCANCODE_X, 0, 0}, {'D', SDL_SCANCODE_D, 0, 0},
{'C', SDL_SCANCODE_C, 0, 0},
@@ -231,6 +231,14 @@ KeyState keys[12] = {
{'B', SDL_SCANCODE_B, 0, 0}, {'H', SDL_SCANCODE_H, 0, 0},
{'N', SDL_SCANCODE_N, 0, 0}, {'J', SDL_SCANCODE_J, 0, 0},
{'M', SDL_SCANCODE_M, 0, 0},
+
+ {'Q', SDL_SCANCODE_Q, 0, 0}, {'2', SDL_SCANCODE_2, 0, 0},
+ {'W', SDL_SCANCODE_W, 0, 0}, {'3', SDL_SCANCODE_3, 0, 0},
+ {'E', SDL_SCANCODE_E, 0, 0},
+ {'R', SDL_SCANCODE_R, 0, 0}, {'6', SDL_SCANCODE_5, 0, 0},
+ {'T', SDL_SCANCODE_T, 0, 0}, {'7', SDL_SCANCODE_6, 0, 0},
+ {'Y', SDL_SCANCODE_Y, 0, 0}, {'8', SDL_SCANCODE_7, 0, 0},
+ {'U', SDL_SCANCODE_U, 0, 0},
};
SDL_AppResult SDL_AppInit(void **appstate, int argc, char **argv) {
@@ -241,7 +249,7 @@ SDL_AppResult SDL_AppInit(void **appstate, int argc, char **argv) {
memset(state, 0, sizeof(app_state));
*appstate = state;
state->keys = keys;
- state->keys_amount = 12;
+ state->keys_amount = sizeof(keys)/sizeof(keys[0]);
if (init_ui(state) != 0) {
printf("Couldn't initialize UI: %s", SDL_GetError());
@@ -255,6 +263,8 @@ SDL_AppResult SDL_AppInit(void **appstate, int argc, char **argv) {
return SDL_APP_CONTINUE;
}
+float old_wave_buffer[DISPLAY_SAMPLES];
+
SDL_AppResult SDL_AppIterate(void *appstate) {
app_state *state = appstate;
Arena *arena = &state->frame_arena;
@@ -279,18 +289,17 @@ SDL_AppResult SDL_AppIterate(void *appstate) {
}
}
- // clamp cycle length if it goes past the end
- size_t cycle_len = SAMPLE_RATE / state->wave_data.freq;
- size_t display_len = cycle_len;
- if (buffer_start + cycle_len > DISPLAY_SAMPLES) {
- display_len = DISPLAY_SAMPLES - buffer_start;
+ if (buffer_start < 100) {
+ ui_data->wave_buffer = &wave_buffer[buffer_start];
+ ui_data->wave_buffer_size = DISPLAY_SAMPLES - 100;
+ memcpy(old_wave_buffer, &wave_buffer[buffer_start], (DISPLAY_SAMPLES - 100) * sizeof(float));
+ } else {
+ ui_data->wave_buffer = old_wave_buffer;
+ ui_data->wave_buffer_size = DISPLAY_SAMPLES - 100;
}
-
- ui_data->wave_buffer = &wave_buffer[buffer_start];
- ui_data->wave_buffer_size = display_len;
ui_data->keys = state->keys;
- ui_data->keys_amount = 12;
+ ui_data->keys_amount = state->keys_amount;
ui_data->knob_settings = &state->knob_settings;
ui_data->scale = dimensions.width / DEFAULT_DIMENSIONS_WIDTH;
@@ -332,7 +341,7 @@ SDL_AppResult SDL_AppEvent(void *appstate, SDL_Event *event) {
return SDL_APP_SUCCESS;
}
case SDL_EVENT_KEY_DOWN: {
- for (int i = 0; i < 12; i++) {
+ for (size_t i = 0; i < state->keys_amount; i++) {
if (event->key.scancode == state->keys[i].keycode) {
if (state->keys[i].keyboard_pressed) {
break;
@@ -349,7 +358,7 @@ SDL_AppResult SDL_AppEvent(void *appstate, SDL_Event *event) {
}
case SDL_EVENT_KEY_UP: {
- for (int i = 0; i < 12; i++) {
+ for (size_t i = 0; i < state->keys_amount; i++) {
if (event->key.scancode == state->keys[i].keycode) {
if (!state->keys[i].keyboard_pressed) {
break;