aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2023-04-24 14:58:59 +0200
committerBad Diode <bd@badd10de.dev>2023-04-24 14:59:19 +0200
commitac038887279d43f0a8c346b4392619dfe2e6084a (patch)
treebd1c2fa6ae28893846bb4305cdb2213ebb887246
parent7399fd06ad3e9682a619550c6de50a565ccc3a25 (diff)
downloadstepper-ac038887279d43f0a8c346b4392619dfe2e6084a.tar.gz
stepper-ac038887279d43f0a8c346b4392619dfe2e6084a.zip
Add per-channel parameter adjustment control
-rw-r--r--src/sequencer.c64
1 files changed, 52 insertions, 12 deletions
diff --git a/src/sequencer.c b/src/sequencer.c
index 1280f5f..b5339fa 100644
--- a/src/sequencer.c
+++ b/src/sequencer.c
@@ -468,13 +468,13 @@ handle_pattern_selection(void) {
468 } 468 }
469} 469}
470 470
471void 471bool
472set_param_selection_sq1(size_t i, InputHandler return_handler) { 472set_param_selection_sq1(size_t i, InputHandler return_handler) {
473 // Go back to trigger selection. 473 // Go back to trigger selection.
474 if (key_released(KEY_A)) { 474 if (key_released(KEY_A)) {
475 input_handler = return_handler; 475 input_handler = return_handler;
476 redraw_params = true; 476 redraw_params = true;
477 return; 477 return false;
478 } 478 }
479 479
480 // Cursor movement. 480 // Cursor movement.
@@ -496,7 +496,9 @@ set_param_selection_sq1(size_t i, InputHandler return_handler) {
496 } 496 }
497 param_selection_loc = CLAMP(loc + inc, 0, 6); 497 param_selection_loc = CLAMP(loc + inc, 0, 6);
498 redraw_params = true; 498 redraw_params = true;
499 return false;
499 } 500 }
501
500 if (key_tap(KEY_UP) || key_tap(KEY_DOWN)) { 502 if (key_tap(KEY_UP) || key_tap(KEY_DOWN)) {
501 int inc = 0; 503 int inc = 0;
502 int loc = param_selection_loc; 504 int loc = param_selection_loc;
@@ -519,6 +521,7 @@ set_param_selection_sq1(size_t i, InputHandler return_handler) {
519 } 521 }
520 param_selection_loc = CLAMP(loc + inc, 0, 6); 522 param_selection_loc = CLAMP(loc + inc, 0, 6);
521 redraw_params = true; 523 redraw_params = true;
524 return false;
522 } 525 }
523 526
524 // Adjust parameter. 527 // Adjust parameter.
@@ -555,16 +558,19 @@ set_param_selection_sq1(size_t i, InputHandler return_handler) {
555 } break; 558 } break;
556 } 559 }
557 redraw_params = true; 560 redraw_params = true;
561 return true;
558 } 562 }
563
564 return false;
559} 565}
560 566
561void 567bool
562set_param_selection_sq2(size_t i, InputHandler return_handler) { 568set_param_selection_sq2(size_t i, InputHandler return_handler) {
563 // Go back to trigger selection. 569 // Go back to trigger selection.
564 if (key_released(KEY_A)) { 570 if (key_released(KEY_A)) {
565 input_handler = return_handler; 571 input_handler = return_handler;
566 redraw_params = true; 572 redraw_params = true;
567 return; 573 return false;
568 } 574 }
569 575
570 // Cursor movement. 576 // Cursor movement.
@@ -578,6 +584,7 @@ set_param_selection_sq2(size_t i, InputHandler return_handler) {
578 } 584 }
579 param_selection_loc = CLAMP(loc + inc, 0, 3); 585 param_selection_loc = CLAMP(loc + inc, 0, 3);
580 redraw_params = true; 586 redraw_params = true;
587 return false;
581 } 588 }
582 589
583 // Adjust parameter. 590 // Adjust parameter.
@@ -605,10 +612,13 @@ set_param_selection_sq2(size_t i, InputHandler return_handler) {
605 } break; 612 } break;
606 } 613 }
607 redraw_params = true; 614 redraw_params = true;
615 return true;
608 } 616 }
617
618 return false;
609} 619}
610 620
611void 621bool
612set_param_selection_wave(size_t i, InputHandler return_handler) { 622set_param_selection_wave(size_t i, InputHandler return_handler) {
613 Pattern *pat = &patterns[pattern_selection_loc]; 623 Pattern *pat = &patterns[pattern_selection_loc];
614 624
@@ -616,7 +626,7 @@ set_param_selection_wave(size_t i, InputHandler return_handler) {
616 if (key_released(KEY_A)) { 626 if (key_released(KEY_A)) {
617 input_handler = return_handler; 627 input_handler = return_handler;
618 redraw_params = true; 628 redraw_params = true;
619 return; 629 return false;
620 } 630 }
621 631
622 // Cursor movement. 632 // Cursor movement.
@@ -644,7 +654,9 @@ set_param_selection_wave(size_t i, InputHandler return_handler) {
644 } 654 }
645 param_selection_loc = CLAMP(loc + inc, 0, 73); 655 param_selection_loc = CLAMP(loc + inc, 0, 73);
646 redraw_params = true; 656 redraw_params = true;
657 return false;
647 } 658 }
659
648 if (key_tap(KEY_UP) || key_tap(KEY_DOWN)) { 660 if (key_tap(KEY_UP) || key_tap(KEY_DOWN)) {
649 int inc = 0; 661 int inc = 0;
650 int loc = param_selection_loc; 662 int loc = param_selection_loc;
@@ -699,6 +711,7 @@ set_param_selection_wave(size_t i, InputHandler return_handler) {
699 } 711 }
700 param_selection_loc = CLAMP(loc + inc, 0, 73); 712 param_selection_loc = CLAMP(loc + inc, 0, 73);
701 redraw_params = true; 713 redraw_params = true;
714 return false;
702 } 715 }
703 716
704 // Adjust parameter. 717 // Adjust parameter.
@@ -779,16 +792,19 @@ set_param_selection_wave(size_t i, InputHandler return_handler) {
779 *wave_volume = CLAMP(*wave_volume + inc, 0, 4); 792 *wave_volume = CLAMP(*wave_volume + inc, 0, 4);
780 } 793 }
781 redraw_params = true; 794 redraw_params = true;
795 return true;
782 } 796 }
797
798 return false;
783} 799}
784 800
785void 801bool
786set_param_selection_noise(size_t i, InputHandler return_handler) { 802set_param_selection_noise(size_t i, InputHandler return_handler) {
787 // Go back to trigger selection. 803 // Go back to trigger selection.
788 if (key_released(KEY_A)) { 804 if (key_released(KEY_A)) {
789 input_handler = return_handler; 805 input_handler = return_handler;
790 redraw_params = true; 806 redraw_params = true;
791 return; 807 return false;
792 } 808 }
793 809
794 // Cursor movement. 810 // Cursor movement.
@@ -802,6 +818,7 @@ set_param_selection_noise(size_t i, InputHandler return_handler) {
802 } 818 }
803 param_selection_loc = CLAMP(loc + inc, 0, 3); 819 param_selection_loc = CLAMP(loc + inc, 0, 3);
804 redraw_params = true; 820 redraw_params = true;
821 return false;
805 } 822 }
806 823
807 // Adjust parameter. 824 // Adjust parameter.
@@ -829,27 +846,50 @@ set_param_selection_noise(size_t i, InputHandler return_handler) {
829 } break; 846 } break;
830 } 847 }
831 redraw_params = true; 848 redraw_params = true;
849 return true;
832 } 850 }
851
852 return false;
833} 853}
834 854
835void 855void
836handle_param_selection_ch1() { 856handle_param_selection_ch1() {
837 set_param_selection_sq1(16, handle_channel_selection); 857 Pattern *pat = &patterns[pattern_selection_loc];
858 if (set_param_selection_sq1(16, handle_channel_selection)) {
859 for (size_t i = 0; i < 16; i++) {
860 pat->ch1.params[i] = pat->ch1.params[16];
861 }
862 }
838} 863}
839 864
840void 865void
841handle_param_selection_ch2() { 866handle_param_selection_ch2() {
842 set_param_selection_sq2(16, handle_channel_selection); 867 Pattern *pat = &patterns[pattern_selection_loc];
868 if (set_param_selection_sq2(16, handle_channel_selection)) {
869 for (size_t i = 0; i < 16; i++) {
870 pat->ch2.params[i] = pat->ch2.params[16];
871 }
872 }
843} 873}
844 874
845void 875void
846handle_param_selection_ch3() { 876handle_param_selection_ch3() {
847 set_param_selection_wave(16, handle_channel_selection); 877 Pattern *pat = &patterns[pattern_selection_loc];
878 if (set_param_selection_wave(16, handle_channel_selection)) {
879 for (size_t i = 0; i < 16; i++) {
880 pat->ch3.params[i] = pat->ch3.params[16];
881 }
882 }
848} 883}
849 884
850void 885void
851handle_param_selection_ch4() { 886handle_param_selection_ch4() {
852 set_param_selection_noise(16, handle_channel_selection); 887 Pattern *pat = &patterns[pattern_selection_loc];
888 if (set_param_selection_noise(16, handle_channel_selection)) {
889 for (size_t i = 0; i < 16; i++) {
890 pat->ch4.params[i] = pat->ch4.params[16];
891 }
892 }
853} 893}
854 894
855void 895void