Resources for building a sequencer from scratch?

That’s a ton of fun. Can choose different Rythm Generators (while having only one implemented) and different Note Generator (Having currently 2 Different kind of Arps now) combined with Euclidean Patterns that makes nice bass lines. Also have a simple harmony arp running.
Think I will implement a scale system next, that you can feed a scale, a Progression and it will use euclidean to decide when to change chords. All melody based features shall know about scale and Chord and play based on one of them.
Adding a way to decide melody and rythm by hand shouldn’t be an issue either.

Currently I am only playing 32th notes, need a system to handle Notenlength too.

Moving on faster than i thought…

1 Like

I now have a Progression Object that takes Scale and Chord-Progression Informations and provides the Tracks with the correct notes.
Currently using the notes is not that advanced. There is one type, that just takes the root note and plays it in an euclidean pattern and one that takes the chord notes and plays them again in an euclidean pattern.
I can define Arp Size (how many notes to play) and an offset, so it spreads it out over the octaves.
Currently the Arp-Sequencer doesn’t know when the Chord Progression changes, so by defining different pattern lengths for progression and arp, it all sound way less boring than it is :stuck_out_tongue:
Notes can have different length now. Currently in poly 8 mode, just so be sure, I don’t waste too much ram :wink:
Working on pad chords now…

Update:
Sorry, for spamming here…

It seems to go together quite fine!

I tell the code what to play:
That48 is a C4. The 32 is the 1/32 it should wait between chord changes. So its 1 bar.

Progression p( 48, 32);

Then I tell it what intervals (Major scale) and if the interval is played as minor or major chord (faster than checking against notes in scale). Maybe I change that, when I introduce more modes/scales and don’t want to add them all.
I also tell the system, that it should play a progression out of 4 chords, thats in this case I V VI and IV

p.setMode( INTERVALS_MAJOR, CHORDS_MAJOR);
p.setProgression( 4, PROGRESSION_1564);

Than I have 7 tracks to 7 different midi channels. For each track I can define a lot of stuff. The Midi Channel. What Rythm Pattern to play (I feed it a Euclidean all the time with different settings, steps, pulses and offset).
The Devider is used to slow the sequencer down for that track. That way I can play the 32 step arp-patter in 1/8th note instead of 1/32th.
I also can set Notelength and a “Melody”. The Melody defines, what notes are played. SingleNote just takes the Root-Note. Arp takes the Progressions Chord-Notes and plays an uprising sequence over it. Pad just takes the Chord, transposes it, if needed and plays it.
Legato defines if playing the same note, that is already playing stops and restarts it, or just enhances the length of the already playing note. That way I can create strummed chords out of an Arp Pattern.

Now I need a display and some buttons/knobs to play around with it!

MIDI goes into Digitakt for Channel 1-3 as Drums and then sent to Blofeld for some random factory presets :stuck_out_tongue:

tracks[0].setActive( true);
tracks[0].setChannel( 1); // Kick
tracks[0].setRythm( new Euclidean( 1, 1, 0));
tracks[0].setDevider( 8);

tracks[1].setActive( true);
tracks[1].setChannel( 3); // HiHat
tracks[1].setRythm( new Euclidean( 32, 4, 4));

tracks[2].setActive( true);
tracks[2].setChannel( 2); // Snare
tracks[2].setRythm( new Euclidean( 32, 2, 8));

tracks[3].setActive( true);
tracks[3].setChannel( 5); // Bass
tracks[3].setRythm( new Euclidean( 32, 4, 4));
tracks[3].setMelody( new SingleNote());
tracks[3].setVelocity( 120);
tracks[3].setNoteLength( 1);

tracks[4].setActive( true);
tracks[4].setChannel( 4); // Arp
tracks[4].setRythm( new Euclidean( 32, 13, 0));
tracks[4].setDevider( 2);
tracks[4].setVelocity( 120);
tracks[4].setNoteLength( 8);
tracks[4].setLegato( false);
tracks[4].setMelody( new Arp( 8, -12));

tracks[5].setActive( true);
tracks[5].setVelocity( 64);
tracks[5].setChannel( 6); // Pad
tracks[5].setRythm( new Euclidean( 32, 1, 0));
tracks[5].setNoteLength( 32);
tracks[5].setMelody( new Pad( 3, 0));

tracks[6].setActive( true);
tracks[6].setVelocity( 100);
tracks[6].setChannel( 7); // Chords
tracks[6].setRythm( new Euclidean( 32, 6, 4));
tracks[6].setDevider( 2);
tracks[6].setNoteLength( 2);
tracks[6].setMelody( new Pad( 3, 0));
5 Likes

On a completely different note (excuse the pun) here’s part of a simple design I did a while ago. Really need to crack on with it at some point. 16 steps, up/down/up&down, push button control all up and running across a couple of breadboards. Got most of it drawn up including a couple of 7 segment displays and variable gate per step. All done with (at the time) readily available CMOS logic. In fact I think the only discontinued part, in DIP package, is the 4067 mux. Shouldn’t be difficult to use a couple of 4051’s for example.

2 Likes