Skip to content
Snippets Groups Projects
user avatar
wammy19 authored
58f9f0ad

Sequencer For MaximilianV1.

Video demo.

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