project name: | dreamsequence |
project url: | https://github.com/dstroud/dreamsequence |
author: | modularbeat |
description: | chord-based sequencer, arpeggiator, and harmonizer for norns + grid |
discussion url: | https://llllllll.co/t/dreamsequence |
documentation url: | https://github.com/dstroud/dreamsequence/blob/main/README.md |
tags: | generative sequencer grid crow midi |
Chord-based sequencer, arpeggiator, and harmonizer for Monome Norns+Grid
Required: Monome Norns (v2.7.6 or later) and Grid
Optional: Crow, Just Friends, Disting EX, MIDI sequencers/controllers
Dreamsequence demo and basics on YouTube
Dreamsequence is a chord-based sequencer, arpeggiator, harmonizer, and arranger for Monome Norns+Grid.
Depending on your need, it can be your primary live performance tool, a compositional assistant, a generative sequencing playground, or just some thing you poke at that happens to make nice-sounding beeps.
The joy of using Dreamsequence is in its intuitive, theory-informed interactivity that allows us to explore various ways of reinterpreting simple musical patterns. Dreamsequence does not aim to be a fully-featured sequencer that can do anything and everything. In fact, sequences are limited to just 8 steps at the moment. But I think you will be delighted by what can be done with these simple inputs.
While fun all by itself, Dreamsequence really opens up when you add friends (anything that can send CV or MIDI notes), in which case it becomes a Voltronesque band leader capable of processing external musical data streams through its harmonizers. Sequences and harmonies can be intelligently merged with natural sounding results.
For those looking to make experimental music that goes beyond randomization and LFOs (not that there’s anything wrong with that), Dreamsequence features an Arranger and Event scheduling system that lets you create your own procedural layer for controlling (or ceding to chaos) every aspect of your creation over the course of time. If you’ve ever enjoyed the feeling of creating a monster modular synth patch that may or may not have become sentient at some point along the way, you’ll be rewarded by spending some time with Events.
I hope you have as much fun using Dreamsequence as I have had creating it, and I’d love to hear about how you’re using it at https://llllllll.co/t/dreamsequence
Cheers, Dan
This Overview will explain how the components that make up Dreamsequence operate. It’s a bit dry and technical, so if you are more of the skim-the-manual type, feel free to skip ahead to the Grid interface guide and keep the Norns interface guide handy for reference.
NOTE: Dreamsequence suppports saving/loading of your song through the system PARAMETERS»PSET menu but you should expect these saves to break when doing updates. I’ll do my best to notify of breaking changes in patch notes, but things will be missed and I recommend you wrap up any work before updating.
Grid-based chord pattern sequencer.
Grid-based monophonic pattern sequencer (formerly ARP)
Note reprocessor for chords, sequences, arpeggios, whatever
Magical sample and hold + quantizer + chord/mode remapping (requires Crow)
Like a DAW but [worse/better]
Sequences playback of chord patterns (A, B, C, D) and is the entry point to the Event Editor.
Events set, increment, randomize, or incite parameters to “wander” throughout your arrangement, with clamping or wrapping value ranges and probability control. Events can be used like rudimentary DAWesque automation lanes or they can be used more sparingly to reconfigure your patch at certain key points in your arrangement.
The Chord view is used to program chord patterns A-D. Since the Seq and harmonizers can create notes based on the active chord, this is typically where you’ll begin composing.
Sequence plays from top to bottom and sequence length is set using column 15.
Chords are selected using columns 1-14 which represent chord degrees I-VII across two octaves. Pressing and holding a key will display the corresponding chord on the Norns screen Pattern Dashboard (upper right). A setting is available via K1»PARAMETERS»EDIT»PREFERENCES to change that readout to show chord names or Roman numeral chord degrees.
The Seq view is used to program the notes in the monophonic sequence/arpeggio/strum pattern.
Seq plays from top to bottom and sequence length is set using column 15. After completing the sequence, the playhead will reset to the beginning and wait to start playback again based on the Seq “Start on” setting.
The Arranger view is used to sequence chord patterns and enter the Events view.
Rows 1-4 correspond to chord patterns A-D and columns 1-16 represent “segments” of the Arranger sequence. The Arranger length automatically resizes to the rightmost set pattern and any gaps in the sequence are filled in lighter colors to indicate that the previous chord pattern will be sustained. If the first segment isn’t filled it will default to pattern A or it will grab the last populated pattern (since the Arranger loops).
Grid keys on the bottom left enable or disable the Arranger and Arranger Loop mode, respectively.
Page keys 1-4 extend the arranger beyond 16 steps. Note that the arranger view does not currently follow the playhead off-screen so it’s up to you to chase it down.
The Events view is used to manage the scheduling of parameter changes and functions at certain points in the Arrangement.
Events view is entered by holding down a segment on the Arranger Timeline (row 5) then pressing K3. Think of it as zooming in on that segment- and thus the chord pattern (A-D).
Grid displays a view of events in the Arranger segment, where events fire left-to-right then top-to-bottom (like reading in English).
TIP: To make it easier to keep track of your events, consider dedicating one lane/column to a certain type of event, such as having chord velocity changes in lane 1, pattern manipulations in lane 2, etc.. or just embrace chaos.
Tapping on an unpopulated/dim event position will open the event settings and display “(New)” in the header. Settings will default to the last touched event so you can just tap a key, change a value, save, and repeat x times to build a sequence of related events.
Tapping on a populated/bright event will open the event settings for that event and display “(Saved)” in the header. Making any changes to the settings will display “(Edited)” in the header.
While viewing an event’s settings, use E2 and E3 to select menus and make changes. K3 saves and closes the event settings screen, and K2 deletes the event. If you don’t want to delete or save changes to an event just tap the illuminated event slot on Grid and it will revert to the saved state so you can exit with K3.
Holding one event and tapping on one or more slots will copy and paste the settings from the held event- this can also be used to paste an empty event over a populated one, effectively deleting it.
If no event is selected immediately after launching the Events view or after deleting/saving an event, K3 will take you back to the Arranger and holding K2 until the countdown completes will delete all events in the segment.
Key 1 (K1): System menus
Most of your work on Norns will be done through 5 main menus that look like the example above. Scrolling to the top menu (GLOBAL in the example above) with E2 will allow you to browse using E3. Before taking a closer look at the contents of these menus, let’s take a look at the mini dashboards on the right side of the screen.
TIP: Active chord reflects the CHORD»“Chord type” menu option (Triad or 7th) but each sequencer/harmonizer can override this with the similiar “Notes” menu.
The left portion of the Norns screen displays one of the following “pages” and associated menu items:
To navigate between pages, use E2 to scroll to the top of the list of menu items until the page name is highlighted, then use E3 to change the page. To change a menu item, simply scroll down the list using E2 and change its value using E3. < and > symbols will appear when you are at the end of the range of possible values. Descriptions of each page and menu options follow.
Mode: 9 modes: Major, Natural Minor, Harmonic Minor, Melodic Minor, Dorian, Phrygian, Lydian, Mixolydian, Locrian.
Key: Global transposition of +/- 12 semitones.
Tempo: sets Norns system clock tempo in BPM.
TIP: It’s possible to finagle a sort of count-in when syncing to MIDI by sending an external start, stopping on Dreamsequence (K2 2x), then scheduling a clean punch-in on the next beat using K3. This avoids the age-old issue of timing being a little off on the first beat when MIDI devices sync.
Link works but using K3 to start transport is disabled due to a bug with clock.link.start() clobbering running clocks. Code wizards: please contact me if you’d like to poke around in the Norns code to help troubleshoot.
Crow clock source is not supported at this time.
Crow clock: Frequency of the pulses from Crow out port 3. Defaults to note-style divisions but Pulses Per Quarter Note (PPQN) are also available by scrolling left. Note that higher PPQN settings are likely to result in instability. At launch, Dreamsequence sets the Norns system clock “crow out” parameter to “off” since Dreamsequence generates its own clock pulses for Crow that only runs when the script’s transport is playing. It will revert changes upon quitting the script.
Dedupe <: This enables and sets the threshold for detecting and de-duplicating repeat notes at each output. This can be particularly helpful when merging sequences from different sources (say combining harmonizer with chords). Rather than trying to send the same note twice (potentially resulting in truncated notes or phase cancellation issues), this will let the initial note pass and filter out the second note if it arrives within the specified period of time.
Chord preload: This setting enables the sequencer to fetch upcoming chord changes slightly early for processing the harmonizer inputs. This compensates for situations where the incoming note may arrive slightly before the chord change it’s intended to harmonize with, such as when playing on a keyboard and hitting a note just before the chord change. This does not affect the timing of Chord and Seq playback.
C-gen: Which algorithm is used for generating Chord patterns. The default value picks an algorithm randomly.
Chord type: Selects between triads and 7th chords and displays the chord readout as such. Note that each sequence source can set this independently so it’s possible for the Chord sequencer to output triads while the other sources output 7ths (and vice versa).
Octave: Shifts output from -2 to +4 octaves.
Spread: Raises the highest note in the chord by this many octaves while keeping the lowest note at the original octave and redistributing the remaining note(s) between. Ex: Octave 1 and Spread 3 will result in a Cmaj voiced as C1, E2, G3.
Inversion: Incrementally shifts the lowest note up an octave so that 1 = first inversion, 2 = second inversion, etc… Multiples of 3 (for triads) or 4 (for 7ths) will effectively transpose the sequence up an octave which might be desired when incrementing this parameter with an event automation.
Step length: The length of each step/row in the chord pattern, relative to 1 measure. Values ending in T are tuplets.
Duration (Engine, MIDI Disting): Chord note duration relative to 1 measure. Values ending in T are tuplets.
Amp: (Engine, Just Friends): Either Norns sound engine amplitude in percent or Just Friends amplitude in volts (0-5v).
Cutoff (Engine): Norns sound engine filter frequency offset.
Fltr tracking (Engine): Amount of “Keyboard tracking” applied to the Norns sound engine filter. Higher values will result in a higher filter cutoff for higher pitched notes. Final filter frequency = note frequency * filter tracking + cutoff. (y = mx + b slope-intercept).
Gain (Engine): Norns sound engine gain setting.
Pulse width (Engine): Norns sound engine square-wave based pulse width.
Port (MIDI): Port for MIDI output.
Channel (MIDI): Channel for MIDI output.
Velocity (MIDI, Disting): Note velocity.
NOTE: “Start” events/PMAP triggers (K1»PARAMETERS»EDIT»SEQ»Start) can be combined with any of the above configurations for additional control.
NOTE: “Stop” events/PMAP triggers (K1»PARAMETERS»EDIT»SEQ»Stop) can be combined with any of the above configurations for additional control.
The following examples show how the same 6-note sequence can be reinterpreted by changing “Start on” and “Reset on” settings (chords shown below sequence).
For the sake of simplicity, these examples have one chord repeated 3 times. In practice, chord changes will also be influencing the sequence notes, which can produce mesmerizing results. Also, remember that it’s possible to use events to switch between the above settings and/or directly trigger starts and resets, allowing for significantly more complex sequences than are shown here.
Octave: Shifts output from -2 to +4 octaves.
Step length: The length of each step/row in the Seq pattern, relative to 1 measure. Values ending in T are tuplets.
Duration (Engine, Crow, MIDI, Disting): Seq note duration relative to 1 measure. Values ending in T are tuplets.
Amp: (Engine, Just Friends): Either Norns sound engine amplitude in percent or Just Friends amplitude in volts (0-5v).
Cutoff (Engine): Norns sound engine filter frequency offset.
Fltr tracking (Engine): Amount of “Keyboard tracking” applied to the Norns sound engine filter. Higher values will result in a higher filter cutoff for higher pitched notes. Final filter frequency = note frequency * filter tracking + cutoff. (y = mx + b slope-intercept).
Gain (Engine): Norns sound engine gain setting.
Pulse width (Engine): Norns sound engine square-wave based pulse width.
Port (MIDI): Port for MIDI output.
Channel (MIDI): Channel for MIDI output.
Velocity (MIDI, Disting): Note velocity.
Mod wheel: (MIDI): Send MIDI control change 1 value out to the configured MIDI port and channel.
Output (Crow): Select between trigger or Attack Decay (AD) envelope to be sent from Crow out 2.
Octave: Shifts output from -2 to +4 octaves.
Duration (Engine, Crow, MIDI): Note duration relative to 1 measure. Values ending in T are tuplets. Currently, Dreamsequence always uses this value regardless of how long the source note is sustained.
Amp: (Engine, Just Friends): Either Norns sound engine amplitude in percent or Just Friends amplitude in volts (0-5v).
Cutoff (Engine): Norns sound engine filter frequency offset.
Fltr tracking (Engine): Amount of “Keyboard tracking” applied to the Norns sound engine filter. Higher values will result in a higher filter cutoff for higher pitched notes. Final filter frequency = note frequency * filter tracking + cutoff. (y = mx + b slope-intercept).
Gain (Engine): Norns sound engine gain setting.
Pulse width (Engine): Norns sound engine square-wave based pulse width.
Port in (_MIDI): MIDI port used for the MIDI Harmonizer (accepts all channels).
Port out (MIDI): Port for MIDI output.
Channel (MIDI): Channel for MIDI output.
Pass velocity (MIDI): Option to use the incoming MIDI velocity for the outgoing note.
Velocity (MIDI, Disting): Note velocity (only available for MIDI output when pass velocity = false).
Mod wheel: (MIDI): Send MIDI control change 1 value out to the configured MIDI port and channel.
Output (Crow): Select between trigger or Attack Decay (AD) envelope to be sent from Crow out 2.
Auto-rest: When true, this option will suppress the same note when it is repeated consecutively within one chord step, resulting in a rest. This can be a useful way of adding rest functionality into analog sequencers that don’t support such a feature.
Octave: shifts output from -2 to +4 octaves.
Duration (Engine, Crow, MIDI): Note duration relative to 1 measure. Values ending in T are tuplets.
Amp: (Engine, Just Friends): Either Norns sound engine amplitude in percent or Just Friends amplitude in volts (0-5v).
Cutoff (Engine): Norns sound engine filter frequency offset.
Fltr tracking (Engine): Amount of “Keyboard tracking” applied to the Norns sound engine filter. Higher values will result in a higher filter cutoff for higher pitched notes. Final filter frequency = note frequency * filter tracking + cutoff. (y = mx + b slope-intercept).
Gain (Engine): Norns sound engine gain setting.
Pulse width (Engine): Norns sound engine square-wave based pulse width.
Port (MIDI): Port for MIDI output.
Channel (MIDI): Channel for MIDI output.
Velocity (MIDI, Disting): Note velocity.
Mod wheel: (MIDI): Send MIDI control change 1 value out to the configured MIDI port and channel.
Output (Crow): Select between trigger or Attack Decay (AD) envelope to be sent from Crow out 2.
Dreamsequence supports using Crow to send and recieve CV and triggers: