uMIDI
The swiss army knife for quick and easy developement of MIDI applications.
|
Sequencer module API. More...
#include <stdbool.h>
#include <stdint.h>
#include "gpio.h"
#include "math.h"
#include "midi.h"
#include "wave.h"
Go to the source code of this file.
Data Structures | |
struct | sequencer_step |
A sequencer step. More... | |
struct | sequencer_pattern |
A sequencer pattern. More... | |
struct | sequencer_channel |
State and configuration of a sequencer channel. More... | |
Macros | |
#define | SEQUENCER_STEPS_PER_PATTERN 16 |
Number of steps in a sequencer pattern. More... | |
Enumerations | |
enum | sequencer_pattern_number { SEQUENCER_PATTERN_01, SEQUENCER_PATTERN_02, SEQUENCER_PATTERN_03, SEQUENCER_PATTERN_04, SEQUENCER_PATTERN_05, SEQUENCER_PATTERN_06, SEQUENCER_PATTERN_07, SEQUENCER_PATTERN_08, SEQUENCER_PATTERN_09, SEQUENCER_PATTERN_10, SEQUENCER_PATTERN_11, SEQUENCER_PATTERN_12, SEQUENCER_PATTERN_13, SEQUENCER_PATTERN_14, SEQUENCER_PATTERN_15, SEQUENCER_PATTERN_16, SEQUENCER_PATTERN_17, SEQUENCER_PATTERN_18, SEQUENCER_PATTERN_19, SEQUENCER_PATTERN_20, SEQUENCER_PATTERNS } |
Enumeration of available sequencer patterns. More... | |
enum | sequencer_channel_number { SEQUENCER_CHANNEL_1, SEQUENCER_CHANNEL_2, SEQUENCER_CHANNEL_3, SEQUENCER_CHANNEL_4, SEQUENCER_CHANNELS } |
Enumeration of available sequencer channels. More... | |
enum | sequencer_channel_mode { SEQUENCER_CHANNEL_MODE_ONE_SHOT, SEQUENCER_CHANNEL_MODE_CONTINUOUS } |
Type. More... | |
Functions | |
enum sequencer_pattern_number | adjust_sequencer_pattern (struct sequencer_channel *channel, int8_t difference) |
Increments or decrements a sequencer channel's pattern index. More... | |
midi_value_t | adjust_sequencer_speed (struct sequencer_channel *channel, int8_t difference) |
Increments or decrements a sequencer channel's speed. More... | |
void | configure_sequencer_channel (enum sequencer_channel_number number, struct sequencer_channel *channel) |
Configures a sequencer channel. More... | |
void | copy_pattern (enum sequencer_pattern_number source, enum sequencer_pattern_number destination) |
Copies a sequencer pattern. More... | |
char * | export_pattern (enum sequencer_pattern_number number) |
Dumps a sequencer pattern. More... | |
uint8_t | get_pattern_length (enum sequencer_pattern_number pattern) |
Reads a sequencer pattern's length. More... | |
struct sequencer_step | get_pattern_step (enum sequencer_pattern_number pattern, uint8_t index) |
Reads step from a sequencer pattern. More... | |
void | import_pattern (enum sequencer_pattern_number number, const char *data) |
Stores a pattern given as a hex-string at the specified location. More... | |
void | init_sequencer_patterns (const struct sequencer_pattern *factory_patterns, uint8_t number_of_patterns) |
Initializes / Restores "factory-default" patterns. More... | |
void | overwrite_pattern (enum sequencer_pattern_number number, const struct sequencer_pattern *pattern) |
Stores a given pattern at the specified location. More... | |
void | set_pattern_length (enum sequencer_pattern_number pattern, uint8_t length) |
Sets a sequencer pattern's length. More... | |
void | set_pattern_step (enum sequencer_pattern_number pattern, uint8_t index, const struct sequencer_step *step) |
Modifies a single step in a sequencer pattern. More... | |
void | set_sequencer_pattern (struct sequencer_channel *channel, enum sequencer_pattern_number pattern) |
Selects a sequencer channel's pattern. More... | |
void | set_sequencer_speed (struct sequencer_channel *channel, midi_value_t speed) |
Sets a sequencer channel's speed. More... | |
void | start_sequencer (struct sequencer_channel *channel) |
Starts a sequencer channel. More... | |
void | stop_sequencer (struct sequencer_channel *channel) |
Stops a sequencer channel. More... | |
bool | toggle_sequencer (struct sequencer_channel *channel) |
Starts or stops a sequencer channel. More... | |
void | update_sequencer (void) |
Main background task for the sequencer module. More... | |
void | wipe_pattern (enum sequencer_pattern_number number) |
Wipes a sequencer pattern. More... | |
Sequencer module API.
#define SEQUENCER_STEPS_PER_PATTERN 16 |
Number of steps in a sequencer pattern.
Enumeration of available sequencer patterns.
enum sequencer_pattern_number adjust_sequencer_pattern | ( | struct sequencer_channel * | channel, |
int8_t | difference | ||
) |
Increments or decrements a sequencer channel's pattern index.
Rotates the pattern index, for example: If the resulting pattern index is greater than the number of patterns, counting restarts at the first pattern.
channel | the sequencer channel to adjust |
difference | an offset from the currently stored pattern |
midi_value_t adjust_sequencer_speed | ( | struct sequencer_channel * | channel, |
int8_t | difference | ||
) |
Increments or decrements a sequencer channel's speed.
Cyclically rotates the speed in the range of a MIDI value [0 .. 127].
channel | the sequencer channel to adjust |
difference | an offset from the current speed |
void configure_sequencer_channel | ( | enum sequencer_channel_number | number, |
struct sequencer_channel * | channel | ||
) |
Configures a sequencer channel.
This function also registers the channel's wave with the tap tempo function.
number | the sequencer channel slot to use |
channel | the sequencer channel |
void copy_pattern | ( | enum sequencer_pattern_number | source, |
enum sequencer_pattern_number | destination | ||
) |
Copies a sequencer pattern.
Duplicates the pattern at the source index and overwrites the pattern at the destination index with it.
source | number of the pattern to copy |
destination | number of the pattern to overwrite |
char* export_pattern | ( | enum sequencer_pattern_number | number | ) |
Dumps a sequencer pattern.
Reads the data from EEPROM and converts it to a string of hexadecimal digits.
number | number of the pattern to export |
uint8_t get_pattern_length | ( | enum sequencer_pattern_number | pattern | ) |
Reads a sequencer pattern's length.
pattern | number of the pattern |
struct sequencer_step get_pattern_step | ( | enum sequencer_pattern_number | pattern, |
uint8_t | index | ||
) |
Reads step from a sequencer pattern.
pattern | number of the sequencer pattern containing the step to read |
index | the index of the step within the pattern |
void import_pattern | ( | enum sequencer_pattern_number | number, |
const char * | data | ||
) |
Stores a pattern given as a hex-string at the specified location.
Overwrites stored data!
number | number of the pattern to overwrite |
data | the new pattern to store as a string of hexadecimal digits |
void init_sequencer_patterns | ( | const struct sequencer_pattern * | factory_patterns, |
uint8_t | number_of_patterns | ||
) |
Initializes / Restores "factory-default" patterns.
Copies a list of patterns to the start of the EEPROM pattern storage.
factory_patterns | a pointer to a list of "factory"-default patterns |
number_of_patterns | number of "factory" patterns |
void overwrite_pattern | ( | enum sequencer_pattern_number | number, |
const struct sequencer_pattern * | pattern | ||
) |
Stores a given pattern at the specified location.
Overwrites stored data! Checks if the data actually changed before writing to save EEPROM write cycles.
number | number of the pattern to overwrite |
pattern | the new pattern to store |
void set_pattern_length | ( | enum sequencer_pattern_number | pattern, |
uint8_t | length | ||
) |
Sets a sequencer pattern's length.
Overwrites stored data!
pattern | number of the sequencer pattern to modify |
length | the new pattern length |
void set_pattern_step | ( | enum sequencer_pattern_number | pattern, |
uint8_t | index, | ||
const struct sequencer_step * | step | ||
) |
Modifies a single step in a sequencer pattern.
Overwrites stored data!
pattern | number of the sequencer pattern containing the step to modify |
index | the index of the step in the pattern to update |
step | the new sequencer step |
void set_sequencer_pattern | ( | struct sequencer_channel * | channel, |
enum sequencer_pattern_number | pattern | ||
) |
Selects a sequencer channel's pattern.
channel | the sequencer channel to adjust |
pattern | the index of the new sequencer pattern |
void set_sequencer_speed | ( | struct sequencer_channel * | channel, |
midi_value_t | speed | ||
) |
Sets a sequencer channel's speed.
channel | the sequencer channel to adjust |
speed | the new speed |
void start_sequencer | ( | struct sequencer_channel * | channel | ) |
Starts a sequencer channel.
If the channel is already running, it is restarted.
channel | the sequencer channel to (re-)start |
void stop_sequencer | ( | struct sequencer_channel * | channel | ) |
Stops a sequencer channel.
channel | the sequencer channel to stop |
bool toggle_sequencer | ( | struct sequencer_channel * | channel | ) |
Starts or stops a sequencer channel.
channel | the sequencer channel to toggle |
true
if the channel was activated; false
if it was deactivated void update_sequencer | ( | void | ) |
Main background task for the sequencer module.
This task plays active (-> started) sequencer channels. It uses the wave module as an internal clock source, so it must be registered as a fast background task.
void wipe_pattern | ( | enum sequencer_pattern_number | number | ) |
Wipes a sequencer pattern.
Zeroes out memory at the given sequencer pattern index.
number | number of the pattern to wipe |