Non Sequitur is an experimental audio/MIDI sequencer with decoupled track timing, that is, every track has its own assignable clock. The clocks are modeled as a small network of oscillators.

Here you find a description of all the controls from top down, left to right. There is an FAQ section further down.


The top part of the interface you see is a standard step sequencer. There are eight tracks, stacked vertically. Consider just the top row:

-> The first value to choose is the clock that defines the timing with an index from 0 to 7.

-> The second value is the starting step of the sequence from 1 to 32.

-> Next up are the steps, click on them to activate or deactivate them. Below each step you see its associated MIDI note number. Type a number between 0 and 127, 60 corresponds to middle c.

-> On the right of the steps is the sequence length in steps, set it to a value from 1 to 32.

-> And the last value is the index of the sample to be played. Set a value from 0 to 15 and listen to the sample by clicking on the oval at the very right.


In the middle part you find the global controls. From left to right they are:

-> Set all clocks to the same index.

-> Set the global absolute tempo in beats per minute.

-> Start playing.

-> Stop playing.

-> Recompute the simulation of the oscillator network, this is necessary if you have changed some value of the lower part.

-> Set a lot of random values.

-> Start MIDI output in MIDI-enabled browsers. The tracks will send MIDI notes with stepwise settable MIDI note number.

-> Show this info page.

-> Choose and load a preset.

-> And finally, set all sequence lengths to the same value.


The lower part contains controls for all the parameters of the oscillator network. Below it you can see eight curves in light blue that represent each oscillator's behavior over time. The darker blue dots mark the peak times. These times are used to clock the sequencer steps in the respective tracks. The red dot in the end marks the loop point, that is the sequence of peak times is looped at that point.

Consider again the first row of oscillator controls, the controls of oscillator 0:

-> The first value is the oscillator's relative tempo. Without influence from other oscillators, it will peak at frequency of relative tempo times absolute tempo. The absolute tempo is set in the global controls. For instance an absolute tempo of 100 bpm and a relative tempo of 1.25 give an oscillator with 125 peaks per minute.

-> The second value is the initial offset of the oscillator. 0 means it just peaked. 1 means it's peaking right now. 0.5 it's halfway between two peaks.

-> The next eight values define the coupling of the oscillators in the network. For instance for the third number; whenever oscillator 0 peaks it will add the given coupling value to the third oscillator (index 2).

-> The third to last value defines the length of the oscillator loop with a value from 1 to 32 peaks.

-> The next value gives the possibility to lock the loop length of two or more oscillators. If you have a jittery oscillator that sounds nice but never quite loops with another oscillator, you can set this value as the index of the other (0 to 7). The peaks of the jittery oscillator will get stretched or squeezed to have the same loop length as the other. You will see that the red dots in the graph align, the blue dots mark the new positions. However, the light blue graph doesn't change, it still shows the original simulation. You can see this as a more flexible polyrhythm generation tool than the the relative tempo (the first value in the row). It allows you to set microtiming polyrhythms that still loop together. Moreover, the oscillator loop length is independent of the sequencer loop length.

-> The rightmost value defines the combined behavior of the two loops, the sequencer track and the oscillator. Let's take a sequence of 12 steps and an assigned oscillator with 8 peaks. Steps 9 through 12 will get their respective timing from oscillator peaks 1 thorugh 4. What happens when the sequencer loop starts over? If this last value is set to 0, the oscillator loop will start over too, so step 1 is timed by peak 1 and so on. If the last value is set to 1, the timing follows the the peak position, so step 1 is timed by peak 4 and so on.

Whenever you change the oscillator network setting, be sure to recompute the simulation (triangle button in the global controls) for them to take effect.


This is too much information, HOW DO I JUST TRY IT QUICKLY?

To see a little bit of what Non Sequitur is capable of, load a preset, play it and change it. The most important buttons are play, stop and recompute (the one with the triangle). The random button is also fun for quick and irreversible experimentation!

What's up with the cube visuals?

The visualization is not linked to the music at all. It's created with the amazing cables library. You can turn it off and on by clicking on the button in the lower left corner.

The site keeps on crashing!

Non Sequitur runs completely in your browser, it depends on your computers power. Be gentle with the setting and the changes during playtime. Recommended browsers are Firefox, Chrome, and Opera. If you experience juddery visuals, turn them off by clicking on the button in the lower right corner.

I like the sequence but I hate the sounds. Can I download it?

You cannot download it directly, but in Chrome and Opera you can activate MIDI by clicking the MIDI button. Look for the browser MIDI device in your computers MIDI settings. You can then record the outgoing MIDI notes in the DAW of your choice.

Can I release music I made with this?

Sure. We appreciate a link so we can listen to it.

I have a problem, critique, or praise!

You can contact us here. If you experienced a specific problem, it would help us if you'd include a screenshot of the web console.

It doesn't work on mobile!

It's not intended to. Please use a suitably big screen for your enjoyment.


This project has received funding from the European Research Council (ERC) under the European Union's Horizon 2020 research and innovation programme (grant agreement No. 670035). This work was presented as a demo at the 16th Sound and Music Computing Conference (SMC) 2019.