diff options
author | Bad Diode <bd@badd10de.dev> | 2023-04-24 14:58:59 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2023-04-24 14:59:19 +0200 |
commit | ac038887279d43f0a8c346b4392619dfe2e6084a (patch) | |
tree | bd1c2fa6ae28893846bb4305cdb2213ebb887246 | |
parent | 7399fd06ad3e9682a619550c6de50a565ccc3a25 (diff) | |
download | stepper-ac038887279d43f0a8c346b4392619dfe2e6084a.tar.gz stepper-ac038887279d43f0a8c346b4392619dfe2e6084a.zip |
Add per-channel parameter adjustment control
-rw-r--r-- | src/sequencer.c | 64 |
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 | ||
471 | void | 471 | bool |
472 | set_param_selection_sq1(size_t i, InputHandler return_handler) { | 472 | set_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 | ||
561 | void | 567 | bool |
562 | set_param_selection_sq2(size_t i, InputHandler return_handler) { | 568 | set_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 | ||
611 | void | 621 | bool |
612 | set_param_selection_wave(size_t i, InputHandler return_handler) { | 622 | set_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 | ||
785 | void | 801 | bool |
786 | set_param_selection_noise(size_t i, InputHandler return_handler) { | 802 | set_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 | ||
835 | void | 855 | void |
836 | handle_param_selection_ch1() { | 856 | handle_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 | ||
840 | void | 865 | void |
841 | handle_param_selection_ch2() { | 866 | handle_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 | ||
845 | void | 875 | void |
846 | handle_param_selection_ch3() { | 876 | handle_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 | ||
850 | void | 885 | void |
851 | handle_param_selection_ch4() { | 886 | handle_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 | ||
855 | void | 895 | void |