diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/sequencer.c | 93 |
1 files changed, 39 insertions, 54 deletions
diff --git a/src/sequencer.c b/src/sequencer.c index 3b77adb..b935bdd 100644 --- a/src/sequencer.c +++ b/src/sequencer.c | |||
@@ -1796,6 +1796,22 @@ handle_channel_selection(void) { | |||
1796 | 1796 | ||
1797 | void | 1797 | void |
1798 | stop_playing(void) { | 1798 | stop_playing(void) { |
1799 | play_status = 0; | ||
1800 | if (step_counter != 0) { | ||
1801 | draw_current_step(COL_BG); | ||
1802 | } | ||
1803 | step_counter = 0; | ||
1804 | TIMER_CTRL_0 = 0; | ||
1805 | SOUND_SQUARE1_CTRL = 0; | ||
1806 | SOUND_SQUARE2_CTRL = 0; | ||
1807 | SOUND_WAVE_CTRL = 0; | ||
1808 | SOUND_NOISE_CTRL = 0; | ||
1809 | draw_current_step(COL_RED); | ||
1810 | draw_play(); | ||
1811 | } | ||
1812 | |||
1813 | void | ||
1814 | toggle_playing(void) { | ||
1799 | play_status ^= 1; | 1815 | play_status ^= 1; |
1800 | if (step_counter != 0) { | 1816 | if (step_counter != 0) { |
1801 | draw_current_step(COL_BG); | 1817 | draw_current_step(COL_BG); |
@@ -1830,6 +1846,23 @@ pause_playing(void) { | |||
1830 | } | 1846 | } |
1831 | 1847 | ||
1832 | void | 1848 | void |
1849 | select_bank(int i) { | ||
1850 | stop_playing(); | ||
1851 | save_bank(current_bank); | ||
1852 | metadata.current_pattern = current_pattern; | ||
1853 | metadata.current_bank = i; | ||
1854 | sram_write(&metadata, 0, sizeof(Metadata)); | ||
1855 | if (current_bank != i) { | ||
1856 | load_bank(i); | ||
1857 | } | ||
1858 | current_bank = i; | ||
1859 | draw_pattern_buttons(); | ||
1860 | draw_triggers(); | ||
1861 | draw_channels(); | ||
1862 | draw_bank_buttons(); | ||
1863 | } | ||
1864 | |||
1865 | void | ||
1833 | handle_right_col_selection(void) { | 1866 | handle_right_col_selection(void) { |
1834 | if (key_tap(KEY_LEFT)) { | 1867 | if (key_tap(KEY_LEFT)) { |
1835 | input_handler = handle_trigger_selection; | 1868 | input_handler = handle_trigger_selection; |
@@ -1888,70 +1921,22 @@ handle_right_col_selection(void) { | |||
1888 | } else if (key_tap(KEY_B)) { | 1921 | } else if (key_tap(KEY_B)) { |
1889 | switch (right_col_selection_loc) { | 1922 | switch (right_col_selection_loc) { |
1890 | case R_COL_STOP: { | 1923 | case R_COL_STOP: { |
1891 | stop_playing(); | 1924 | toggle_playing(); |
1892 | } break; | 1925 | } break; |
1893 | case R_COL_PLAY: { | 1926 | case R_COL_PLAY: { |
1894 | pause_playing(); | 1927 | pause_playing(); |
1895 | } break; | 1928 | } break; |
1896 | case R_COL_BANK_A: { | 1929 | case R_COL_BANK_A: { |
1897 | stop_playing(); | 1930 | select_bank(0); |
1898 | save_bank(current_bank); | ||
1899 | metadata.current_pattern = current_pattern; | ||
1900 | metadata.current_bank = 0; | ||
1901 | sram_write(&metadata, 0, sizeof(Metadata)); | ||
1902 | if (current_bank != 0) { | ||
1903 | load_bank(0); | ||
1904 | } | ||
1905 | current_bank = 0; | ||
1906 | draw_pattern_buttons(); | ||
1907 | draw_triggers(); | ||
1908 | draw_channels(); | ||
1909 | draw_bank_buttons(); | ||
1910 | } break; | 1931 | } break; |
1911 | case R_COL_BANK_B: { | 1932 | case R_COL_BANK_B: { |
1912 | stop_playing(); | 1933 | select_bank(1); |
1913 | save_bank(current_bank); | ||
1914 | metadata.current_pattern = current_pattern; | ||
1915 | metadata.current_bank = 1; | ||
1916 | sram_write(&metadata, 0, sizeof(Metadata)); | ||
1917 | if (current_bank != 1) { | ||
1918 | load_bank(1); | ||
1919 | } | ||
1920 | current_bank = 1; | ||
1921 | draw_pattern_buttons(); | ||
1922 | draw_triggers(); | ||
1923 | draw_channels(); | ||
1924 | draw_bank_buttons(); | ||
1925 | } break; | 1934 | } break; |
1926 | case R_COL_BANK_C: { | 1935 | case R_COL_BANK_C: { |
1927 | stop_playing(); | 1936 | select_bank(2); |
1928 | save_bank(current_bank); | ||
1929 | metadata.current_pattern = current_pattern; | ||
1930 | metadata.current_bank = 2; | ||
1931 | sram_write(&metadata, 0, sizeof(Metadata)); | ||
1932 | if (current_bank != 2) { | ||
1933 | load_bank(2); | ||
1934 | } | ||
1935 | current_bank = 2; | ||
1936 | draw_pattern_buttons(); | ||
1937 | draw_triggers(); | ||
1938 | draw_channels(); | ||
1939 | draw_bank_buttons(); | ||
1940 | } break; | 1937 | } break; |
1941 | case R_COL_BANK_D: { | 1938 | case R_COL_BANK_D: { |
1942 | stop_playing(); | 1939 | select_bank(3); |
1943 | save_bank(current_bank); | ||
1944 | metadata.current_pattern = current_pattern; | ||
1945 | metadata.current_bank = 3; | ||
1946 | sram_write(&metadata, 0, sizeof(Metadata)); | ||
1947 | if (current_bank != 3) { | ||
1948 | load_bank(3); | ||
1949 | } | ||
1950 | current_bank = 3; | ||
1951 | draw_pattern_buttons(); | ||
1952 | draw_triggers(); | ||
1953 | draw_channels(); | ||
1954 | draw_bank_buttons(); | ||
1955 | } break; | 1940 | } break; |
1956 | } | 1941 | } |
1957 | } | 1942 | } |
@@ -2587,7 +2572,7 @@ handle_sequencer_input(void) { | |||
2587 | 2572 | ||
2588 | if (key_tap(KEY_START)) { | 2573 | if (key_tap(KEY_START)) { |
2589 | // Stop the sequencer or start playing from the beginning. | 2574 | // Stop the sequencer or start playing from the beginning. |
2590 | stop_playing(); | 2575 | toggle_playing(); |
2591 | } else if (key_tap(KEY_SELECT)) { | 2576 | } else if (key_tap(KEY_SELECT)) { |
2592 | // Play/pause. | 2577 | // Play/pause. |
2593 | pause_playing(); | 2578 | pause_playing(); |