87 lines
		
	
	
	
		
			5.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
	
		
			5.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# Sequencer
 | 
						|
 | 
						|
Since QMK has experimental support for MIDI, you can now turn your keyboard into a [step sequencer](https://en.wikipedia.org/wiki/Music_sequencer#Step_sequencers)!
 | 
						|
 | 
						|
!> **IMPORTANT:** This feature is highly experimental, it has only been tested on a Planck EZ so far. Also, the scope will be limited to support the drum machine use-case to start with.
 | 
						|
 | 
						|
## Enable the step sequencer
 | 
						|
 | 
						|
Add the following line to your `rules.mk`:
 | 
						|
 | 
						|
```make
 | 
						|
SEQUENCER_ENABLE = yes
 | 
						|
```
 | 
						|
 | 
						|
By default the sequencer has 16 steps, but you can override this setting in your `config.h`:
 | 
						|
 | 
						|
```c
 | 
						|
#define SEQUENCER_STEPS 32
 | 
						|
```
 | 
						|
 | 
						|
## Tracks
 | 
						|
 | 
						|
You can program up to 8 independent tracks with the step sequencer. Select the tracks you want to edit, enable or disable some steps, and start the sequence!
 | 
						|
 | 
						|
## Resolutions
 | 
						|
 | 
						|
While the tempo defines the absolute speed at which the sequencer goes through the steps, the resolution defines the granularity of these steps (from coarser to finer).
 | 
						|
 | 
						|
|Resolution   |Description            |
 | 
						|
|----------   |-----------            |
 | 
						|
|`SQ_RES_2`   |Every other beat       |
 | 
						|
|`SQ_RES_2T`  |Every 1.5 beats        |
 | 
						|
|`SQ_RES_4`   |Every beat             |
 | 
						|
|`SQ_RES_4T`  |Three times per 2 beats|
 | 
						|
|`SQ_RES_8`   |Twice per beat         |
 | 
						|
|`SQ_RES_8T`  |Three times per beat   |
 | 
						|
|`SQ_RES_16`  |Four times per beat    |
 | 
						|
|`SQ_RES_16T` |Six times per beat     |
 | 
						|
|`SQ_RES_32`  |Eight times per beat   |
 | 
						|
 | 
						|
## Keycodes
 | 
						|
 | 
						|
|Keycode  |Description                                        |
 | 
						|
|-------  |-----------                                        |
 | 
						|
|`SQ_ON`  |Start the step sequencer                           |
 | 
						|
|`SQ_OFF` |Stop the step sequencer                            |
 | 
						|
|`SQ_TOG` |Toggle the step sequencer playback                 |
 | 
						|
|`SQ_SALL`|Enable all the steps                               |
 | 
						|
|`SQ_SCLR`|Disable all the steps                              |
 | 
						|
|`SQ_S(n)`|Toggle the step `n`                                |
 | 
						|
|`SQ_TMPD`|Decrease the tempo                                 |
 | 
						|
|`SQ_TMPU`|Increase the tempo                                 |
 | 
						|
|`SQ_R(n)`|Set the resolution to n                            |
 | 
						|
|`SQ_RESD`|Change to the slower resolution                    |
 | 
						|
|`SQ_RESU`|Change to the faster resolution                    |
 | 
						|
|`SQ_T(n)`|Set `n` as the only active track or deactivate all |
 | 
						|
 | 
						|
## Functions
 | 
						|
 | 
						|
|Function                                                             |Description                                            |
 | 
						|
|--------                                                             |-----------                                            |
 | 
						|
|`bool is_sequencer_on(void);`                                        |Return whether the sequencer is playing                |
 | 
						|
|`void sequencer_toggle(void);`                                       |Toggle the step sequencer playback                     |
 | 
						|
|`void sequencer_on(void);`                                           |Start the step sequencer                               |
 | 
						|
|`void sequencer_off(void);`                                          |Stop the step sequencer                                |
 | 
						|
|`bool is_sequencer_step_on(uint8_t step);`                           |Return whether the step is currently enabled           |
 | 
						|
|`void sequencer_set_step(uint8_t step, bool value);`                 |Enable or disable the step                             |
 | 
						|
|`void sequencer_set_step_on();`                                      |Enable the step                                        |
 | 
						|
|`void sequencer_set_step_off();`                                     |Disable the step                                       |
 | 
						|
|`void sequencer_toggle_step(uint8_t step);`                          |Toggle the step                                        |
 | 
						|
|`void sequencer_set_all_steps(bool value);`                          |Enable or disable all the steps                        |
 | 
						|
|`void sequencer_set_all_steps_on();`                                 |Enable all the steps                                   |
 | 
						|
|`void sequencer_set_all_steps_off();`                                |Disable all the steps                                  |
 | 
						|
|`uint8_t sequencer_get_tempo(void);`                                 |Return the current tempo                               |
 | 
						|
|`void sequencer_set_tempo(uint8_t tempo);`                           |Set the tempo to `tempo` (between 1 and 255)           |
 | 
						|
|`void sequencer_increase_tempo(void);`                               |Increase the tempo                                     |
 | 
						|
|`void sequencer_decrease_tempo(void);`                               |Decrease the tempo                                     |
 | 
						|
|`sequencer_resolution_t sequencer_get_resolution(void);`             |Return the current resolution                          |
 | 
						|
|`void sequencer_set_resolution(sequencer_resolution_t resolution);`  |Set the resolution to `resolution`                     |
 | 
						|
|`void sequencer_increase_resolution(void);`                          |Change to the faster resolution                        |
 | 
						|
|`void sequencer_decrease_resolution(void);`                          |Change to the slower resolution                        |
 | 
						|
|`bool is_sequencer_track_active(uint8_t track);`                     |Return whether the track is active                     |
 | 
						|
|`void sequencer_set_track_activation(uint8_t track, bool value);`    |Activate or deactivate the `track`                     |
 | 
						|
|`void sequencer_toggle_track_activation(uint8_t track);`             |Toggle the `track`                                     |
 | 
						|
|`void sequencer_activate_track(uint8_t track);`                      |Activate the `track`                                   |
 | 
						|
|`void sequencer_deactivate_track(uint8_t track);`                    |Deactivate the `track`                                 |
 | 
						|
|`void sequencer_toggle_single_active_track(uint8_t track);`          |Set `track` as the only active track or deactivate all |
 |