Sequencer For MaximilianV1.
Build on Mac with cmake:
cmake . -B cmake-build-sequencer && cd cmake-build-sequencer && make -j3
Once in the cmake-build-sequencer
directory, run app:
./aavp-mini-project
If compiling using Visual Studio on Windows, The files that need to be added to the project are located at:
./my-lib
./patterns.h
Description
A sequencer that sequences samples, and allows certain parameters to be set per step in the sequence.
Patterns can be created using the SequencePatterns
struct located at ./my-lib/headers/helpers.h
.
This struct requires 6 patterns which include:
- Trigger pattern. Pattern for triggering a sample.
- Micro beat pattern. Allows for samples to trigger earlier or later than the beat.
- Amp pattern. Controls the amplitude of the sample.
- Sample speed. Controls the playback speed of the sample.
- Probability pattern. Controls the probability of the sample triggering.
- Filter Cutoff pattern. Each sequence has its own lo-pass filter, this pattern will control its cutoff.
The Sequence
class takes the SequencePatterns
struct as an argument, as well as a path to a sample.
This class handles applying all the patterns defined in the struct to the sample. There are some methods for different
forms of expression. These include:
- setRandomSpeed() - If this is set to
true
the sample speed sequence pattern will be ignored, and will be determined randomly each time. - setFilterFixed() - If this is set to
true
the filter cutoff pattern will be ignored, and will be determined by a set value instead. - setMainAmp() - This can be used to set the over all volume of the sequence. This does NOT ignore the amp pattern from the
SequencePatterns
.
Each SequencePatterns
struct can be any number of steps, this allows for poly rhythms.
The Sequencer
class handles each of the Sequence
classes that are created. This class is responsible for updating the
timeline position in a class as well as summing together all the sequences appropriately. Additional post-processing can
be applied to the entire output of the sequencer. These post-processing effects include a lo-pass filter, a compressor,
and distortion. These can be set or bypassed with the following methods:
- setFilterCutoff() - Sets the cutoff of the filter. Range (0 - 1).
- SetCompressor() - Settings for the maxiDyn.
- setCompressorBypass() - Sets if the compressor should be bypassed or not.
- setDistortionShape() - Sets the distortion amount.
- setDistortionBypass() - Sets if the distortion should be bypassed or not.
These classes were designed to be very modular and simple to use.
Further exploration that is of interest is using algorithms to generate the patterns in the SequencePatterns
struct.
The sequencer could also be extended to have multiple "scenes", which in turn can be sequenced.
The functionality of this sequencer is heavily inspired by the Analog Rytm II by Elektron