Glitch Sequencer

Cellular automaton based MIDI sequencer
SocialTwist Tell-a-Friend

Installation

Installing Glitch Sequencer is simple but differs slightly from Mac to PC. Here are instructions for both:

  • PC
    1. Download glitch-sequencer-windows.zip file from the download page.
    2. Unzip glitch-sequencer-windows.zip file anywhere.
    3. Go into the glitch-sequencer folder and run glitchSequencer.exe
  • Mac
    1. Download glitch-sequencer-mac.zip file from the download page.
    2. Unzip glitch-sequencer-mac.zip file anywhere.
    3. You must set the glitchSequencer application to "executable". Using the Terminal on Mac OS X, navigate into the directory where you unzipped the Glitch Sequencer files and type the following: chmod +x glitchSequencer.app/Contents/MacOS/JavaApplicationStub
    4. If you are using an older version of Java for the Mac, you may have to download and install mmj (Mac OS X universal binary java Midi subsystem) from http://www.humatic.de/htools/mmj.htm. Only install this as a last resort.
    5. If you are using a MIDI loopback device (such as MIDI Patchbay), you may need to turn on the IAC Driver in OSX's Audio/Midi preferences
Installation Help

  • If you receive the message "Could not find the main class. Program will exit.", Try uninstalling your older version of JRE (java runtime environment) and then reinstalling the latest version of the JRE
  • For Linux, make sure that you are running Sun Java or openJDK 1.6. You can see which Java you are running by typing "java -version". If you are running gcj (gnu compiler for java), switch to Sun Java by typing "sudo update-alternatives --config java", and select: /usr/lib/jvm/java-1.5.0-sun/jre/bin/java. Make sure that you run glitch-sequencer as root. Finally, check the log file if you continue to have problems.

Getting Started

Glitch Sequencer is a MIDI or OSC sequencer. To use it properly, you'll need

  • A MIDI interface attached to a MIDI capable instrument or...
  • Install a MIDI loopback device to trigger a MIDI soft-synth or similar software or...
  • Use Glitch Sequencer to send OSC messages to a soft synth

No matter your setup, the core functionality is the same. To create your first sequence, follow these steps:

  1. Draw a seed on the seed sequencer grid.
  2. Click the [Run] button (important!)
  3. Switch to the triggers page.
  4. Draw some "trigger points" on the trigger sequencer grid.
  5. Still on the trigger page, select a MIDI output device.
  6. Adjust the note sequencer

Here's a video illustrating the steps listed above:



At this point, note information should be being sent to your MIDI device. If you aren't seeing any MIDI activity, check to ensure that you have selected the correct MIDI device on the triggers page. If you are certain that your MIDI device is selected properly, check and see that a few of the trigger points that you placed on the trigger sequencer grid are being highlighted as your seed pattern evolves. Continue adjusting the seed pattern until it doesn't "stall out" after a few mutations.

"What's going on here?"

Glitch Sequencer is based on Conway's Game of Life, which is covered in detail at wikipedia. In practice, you don't need to know much about the details. Start by drawing a "seed" pattern on the seed sequencer grid. For each step of the sequencer, the pattern evolves following a simple set of rules. Once the pattern has reached a certain length, the evolution resets to the beginning state.

MIDI events are generated when specific cells of the pattern change from black to white. You tell Glitch Sequencer which cells should generate which events on the Triggers screen. Drawing on the trigger grid determines when an event should be sent. The Value Sequencers (which look like a bar graphs on the Triggers screen) determine what note should be sent.


Basic Navigation

Glitch Sequencer is split up into three pages: Seeds, Triggers, and Mixer. Click on the labeled tabs on the bottom left of the application to switch between the three pages.

You can also use the [tab] key to jump to the next page, or SHIFT+[tab] to jump to the previous page. You can also switch pages by holding down the right mouse button while dragging left or right.



The Seed and Playback sequencers

The two large grids on the first screen of Glitch Sequencer are called the Seed and Playback sequencers.

Draw on the Seed sequencer to set the starting pattern. The playback sequencer shows you the evolution of your pattern while the sequencer is running.

To delete the entire seed pattern, mouse over the seed grid and press [delete] or [backspace]. To shift the seed pattern to the left, right, up, or down, hold [shift] and drag any cell in the grid.



Running and Stopping playback

The [Run] and [Stop] buttons control playback of Glitch Sequencer. The sequencer will also respond to MIDI song-start and song-stop commands when slaved to incoming MIDI clock messages. (See: Setting Clk Sync)

Pressing the [space] key will toggle playback of the sequencer.



Saving and Loading

The [Save] and [Load] buttons are used to save all parameters of Glitch Sequencer. Some information, such as the exact playback location within the Playback Sequencer and the playback position within the Value sequencers is not saved. For best results, stop playback of the sequencer before saving your work. Similarly, stopping playback before loading is a good practice. Saving and loading temporarily stops execution of the sequencer.

There are 10 quick-save files available for quickly saving or loading your song without stopping playback of the sequencers. To save a quick-save file, hold the [shift] key while pressing number key [0] through [9]. To load a quick-save file, press number key [0] through [9] without holding down [shift].



Changing pattern length

The pattern length grid sets the number of evolutions of the playback sequencer before it resets back to the seed. The multiplier buttons underneath the pattern length grid multiplies the selected pattern by either 1x, 2x, or 4x. The maximum pattern length is 256. Grey boxes within the pattern sequencer denote commonly used pattern lengths of 2, 4, 8, 16, 32, and 64. The grey boxes are for reference only and don't have any special effect besides making it easy for you to switch between common pattern lengths.

When the pattern length grid has focus, you can change pattern length by using the arrow keys. Holding [shift] while pressing the down or right arrow key will increment the pattern length to the next highest multiple of two. For example, if the pattern is set to 8, pressing [shift] + right will set the pattern length to 16. Similarly, pressing [shift] + up or left will decrement the pattern length to the next lowest multiple of 2.



Snapshots

Snapshots let you store and retrieve almost all settings of Glitch Sequencer at the touch of a button. They give you a fast way of switching between parts of a song. Any change you make to Glitch Sequencer is automatically made to the currently selected snapshot. To copy the currently selected snapshot to a different snapshot, hold [shift] while clicking on the new snapshot's cell. Clicking on a snapshot's cell without holding shift will switch you to that snapshot and load its settings.

When the snapshot grid has focus, you can use the arrow keys to switch between adjacent snapshots. Holding [shift] while pressing an arrow key will copy the current snapshot to the new snapshot.



Setting BPM

BPM (beats per minute) of the internal clock can be set using the BPM control. To select a new BPM, click and drag the BPM selection control up or down with the mouse. Or, when the BPM control has focus, use the mouse scroll wheel to select a new BPM or press the up or down arrow keys. The BPM control will be disabled if Glitch Sequencer is slaved to incoming MIDI clock messages.

When the BPM control has focus, pressing the [up] or [down] arrow keys will increment or decrement the BPM.



Clock Division

The internal clock of Glitch Sequencer runs at 96 beats per measure. This is the same rate as the MIDI Clock. The clock division control divides either the internal or incoming MIDI clock messages by 1, 3, 6, 12, 24, or 48. Setting this value to 1 will results in very fast pattern playback. Setting it to 48 will result in very slow pattern playback.

* See Appendix A for instructions on using selection controls.



Clock Sync

Clock Sync sets the clock source for Glitch Sequencer. The possible values are:


  1. None - Uses the internal clock. Does not send or receive MIDI clock messages.

  2. Recv - Disengages the internal clock and instead slaves to incoming MIDI clock messages. Does not send MIDI clock messages. Glitch Sequencer listens on all MIDI devices for clock messages, so it is important that you only send clock messages from one MIDI device otherwise Glitch Sequencer will probably freak out. When in Recv mode, the BPM control is disabled.

  3. Send - Uses the internal clock and BPM settings. Sends MIDI clock messages on all possible output devices.

  4. Both - Slaves to external MIDI clock messages and sends MIDI clock messages to all output devices. The internal clock is disengaged and the BPM settings are disabled.

* See Appendix A for instructions on using selection controls.



Lenses

A lense defines points on the playback sequencer that trigger outgoing or internal OSC messages. Most commonly, a lense will send internal messages such as "clkdiv" to change the internal clock division or "snap" to change snapshots while the sequencer is running.

Lenses are defined in the /data/lenses.xml file. lenses.xml contains few examples in there to get you started.

A lense is defined as

 <lense name="[lense name"]>
  .. any number of cells...
 </lense>

A cell is defined as

 <cell column="[col]" row="[row]" address="[address]" args="[args]" />

where..

 [col]

  An integer between 0 and 15

 [row]

  An integer between 0 and 15

 [address]

An OSC address. If the OSC address starts with "/glitch-sequencer/", then the message is sent internally and never actually uses the OSC protocol. Tools such as OSCMonitor will not show lense messages sent internally. If the OSC address does not start with "/glitch-sequencer/", then the OSC message will be sent out using the port and ip address specified in the osc_config settings defined in config.xml. Outgoing OSC message will only be sent if the osc_config status is set to "on" in the config.xml file. Hopefully that's not too confusing. :-)

Internal supported OSC commands are:

Change Snapshot
OSC: /glitch-sequencer/snap [snapshot: 0-63]
Example: <cell column="12" row="12" address="/glitch-sequencer/snap" args="3" />

Set a volume slider:
OSC /glitch-sequencer/vol [slider number: 0-7] [value: 0-127]
Example: <cell column="6" row="8" address="/glitch-sequencer/vol" args="3|110" />

Toggle mute:
OSC: /glitch-sequencer/mute [slider number: 0-7]
Example: <cell column="6" row="7" address="/glitch-sequencer/mute" args="3" />

Change pattern length:
OSC: /glitch-sequencer/patlen [length: 1-63]
Example: <cell column="5" row="5" address="/glitch-sequencer/patlen" args="32" />

Change BPM
OSC: /glitch-sequencer/bpm [bpm: 1-300]
Example: <cell column="4" row="5" address="/glitch-sequencer/bpm" args="120" />

Set a seed cell:
Osc: /glitch-sequencer/cell [cell number: 0-255]
Example: <cell column="4" row="5" address="/glitch-sequencer/cell" args="44" />

Set clock division:
Osc: /glitch-sequencer/clkdiv [division: 1,3,6,12,24,48]
Example: <cell column="6" row="8" address="/glitch-sequencer/clkdiv" args="3" />

Shift trigger cells:
Osc: /glitch-sequencer/trigshift [direction: 1(up), 2(right), 3(down), 4(left)]
Example: <cell column="6" row="8" address="/glitch-sequencer/trigshift" args="2" />

Shift seed cells:
/glitch-sequencer/seedshift [direction: 1(up), 2(right), 3(down), 4(left)]
Example: <cell column="6" row="8" address="/glitch-sequencer/seedshift" args="3" />

[args]

Each argument is delimited with a pipe (|) symbol. For example,

<cell column="3" row="2" address="/some-address/action" args="3|44" />
<cell column="3" row="2" address="/some-address/action" args="3|some string|9" />


When a song is saved in glitch-sequencer, the lense setting is saved along with it. It is important to note that only the index of the lense is saved, which is based on the ordering of the lense definitions in this file. For example, if the second lense is named "frenetic", the index "2" is saved along with the song. Therefore, be careful when removing or reording this lense file as it might break your previously saved songs.

* See Appendix A for instructions on using selection controls.



Placing Triggers

Triggers tell Glitch Sequencer which cells of the playback sequencer will trigger MIDI events. When a playback sequencer's cell transitions from black to white and a trigger point has been placed on that cell, a MIDI event (usually a note) will be sent to a midi device. To set trigger points, first select a "swatch" by clicking on it, then draw on the trigger grid. Click on an existing trigger point to remove it. For reference, the playback sequencer is shown on the triggers grid using dark-gray blocks.

The contents of the trigger grid can be shifted in any direction by holding the [shift] key while dragging the pattern with the mouse.

When the trigger grid has focus, use the arrow keys to shift the contents of the trigger grid up, down, left, or right. A shortcut exists for selecting swatches on this page: Hold down the right mouse button while dragging up or down to select the previous or next swatch.



Value Sequencers

Each swatch has its own value sequencer. Generally you'll use value sequencers for sequencing the pitch of outgoing MIDI notes. They may also be used as sources for MIDI control message or MIDI program changes. Drag the value sequencer's bars to change their value. Bars with a value of 0 will not send any MIDI notes or messages.

When a cell in the Playback Sequencer transitions from black to white, if there is a corresponding cell in the Trigger Sequencer with a swatch color on it, a MIDI event will be generated. The type of MIDI event is configured on the Trigger screen. Most of the time this will be a MIDI Note event whose pitch is determined by the value sequencer. Here's another diagram to illustrate:

When a value sequencer has focus, holding [shift] while adjusting the height of a bar will shift all bars in the sequencer up or down. Pressing [delete] will set all bars to 60. When the mouse is over a bar, pressing the [up] or [down] key will nudge the bar up or down one notch. Holding [shift] while pressing the [up] or [down] arrow keys will nudge the entire sequence up or down one notch. Pressing the [left] or [right] arrow keys will shift the entire sequence to the left or right.



Gate Percentage

Gate percentage lets you add some randomness to your pattern playback. It changes the probability that a trigger will generate a MIDI event. Each swatch has its own percentage settings.

* See Appendix A for instructions on using selection controls.



Clock Division

Clock division specifies how many evolutions of the seed pattern must pass before a value sequencer is stepped. Each value sequencer has its own clock division setting. This setting is unrelated to the Clock Division control found on the Seeds page.

* See Appendix A for instructions on using selection controls.



Loop Length

Loop Length is the number of steps the value sequencer will take before restarting from the beginning. The default value of "pat" means that the value sequencer's loop length is the same as the pattern length, which is set using the pattern length grid on the Seeds Page. However, the loop length can be decoupled from the global pattern length and set to any value between 1 and 32.

* See Appendix A for instructions on using selection controls.



Quantization

Quantization ensures that all values in the value sequencer conform to a selected scale. Current scale options are None, Ionian and Phrygian.

* See Appendix A for instructions on using selection controls.



Device Settings

Each of the 8 swatches can send MIDI information to different MIDI devices. MIDI devices are set up using the device setting controls: Device, Msg Type, Channel, Data #1 and Data #2. The default setup is tailored to sending out MIDI note information. Here's a summary of each control:

  1. Device - Outgoing MIDI messages will be sent to this MIDI device

  2. Msg Type - The type of MIDI message to send. Options are Note, Prog Change (program change), or Ctrl (controller message)

  3. Channel - Channel for sending outgoing MIDI messages

  4. Data #1 and Data #2 - These values correspond to the 2nd and 3rd data bytes of a standard MIDI message. The meaning of these bytes change depending on your selection of Msg Type:
    Msg TypeData #1 is used for..Data #2 is used for..
    NoteNote NumberVelocity
    Prog ChangeProgram Number-unused-
    CtrlController NumberController Value
    The $mixer and $value variables can be selected for Data #1 or Data #1. The $mixer variable pulls its information from the mixer on the Mixers page which corresponds to the selected swatch. The $value variable pulls its information from the value sequencer.

* See Appendix A for instructions on using selection controls.



Mixers

Most commonly, the mixers allow you to change the volume of each swatch. They can also be mapped to control other MIDI information by specifying $mixer in the Data #1 and Data #2 controls on the Triggers page. Mixer positions and mute button settings are not stored in the snapshot data.

You can adjust trigger information on the Mixers page.





Creating Custom Cellular Automata Rules

Custom Cellular Automata rules can be defined in /data/rules.bsh. Open rules.bsh in a text editor and look the examples provided to get started.




Config File Options

Many features of glitch-sequencer are available and configurable by editing the /data/config.xml file. The config.xml file is read when glich-sequencer starts and results are logged to logfile.xml.


  1. World Settings - There are two separate world setting that can be set: "World Wrap" and "Sticky Center". Supported values for both attributes are "on", or "off", with "off" being the default. Here's an example entry in the config file with World Wrap turned on:

    <world wrap="on" sticky_center="off" />

    • World Wrap: Allows automata to grow across the edges of the world and wrap around the other side. This can be useful when playing around with gliders which would normally die out when reaching the edge of the playback sequencer.

    • Sticky Center: The central 8x8 squares of glitch-sequencer evolve at 1/2 pace.
  2. MIDI config - The midi_config tag is used to turn on or off MIDI entirely and to toggle the global status of MIDI automation.

    <midi_config status="on" automation="off" />

    • status: Turns MIDI on or off. The only reason you'd want to turn off MIDI completely is if you're using OSC instead of MIDI for outputting note information. When MIDI is turned off, none of the MIDI controls will show up in the glitch-sequencer interface. The value is either "on" or "off"

    • automation: Turns on or off MIDI automation. When set to "on", MIDI automation instructs glitch-sequencer to listen for MIDI values for controlling things such as snapshot, volume, or mute. Set this to "off" when not using MIDI automation.
  3. Midi Automation - The midi_automation tag tells glitch-sequencer to listen for a particular series of MIDI values and to use them to control some aspect of the program. For example, you can configure glitch-sequencer to switch snapshots based on a MIDI controller message or MIDI program change message. Please note that glitch-sequencer will listen on ALL possible MIDI inputs for these automation messages.
  4. <midi_automation control="snapshot" status_byte="192" data1="$value" data2="" />

    • control: This is the thing to control. Possible values are: snapshot, volume_fader1 through volume_fader8, and mute1 through mute8, seed_cell_toggle, seed_cell_set, seed_cell_clear

    • status_byte: The status byte of the MIDI message.

    • data1: The first data byte (the high byte) of the MIDI message.

    • data1: The second data byte (the low byte) of the MIDI message.
  5. OSC Configuration - Glitch-Sequencer supports sending out OSC messages and using incoming OSC messages for automation. It is important to set the listen_on_port and send_on_port to different values. If you are using a Monome, it is also important to set the osc_config ports to different values than the monome.
  6. <osc_config status="off" ip_address="127.0.0.1" listen_on_port="9000" send_on_port="9001" />

    The osc_config tag controls global OSC behavior. Attributes are:

    • status: Turns on or off OSC output and automation. Values are: on, off

    • ip_address: Any IP address. Usually 127.0.0.1

    • listen_on_port: the OSC port to listen for incoming automation messages.

    • send_on_port: The OSC port for sending outgoing messages.

    Glitch-Sequencer accepts and sends the following incoming OSC messages for remote control:

    /glitch-sequencer/snap I (snapshot: 1-64)
    /glitch-sequencer/vol I (channel: 1-9, val: 1-127)
    /glitch-sequencer/mute (channel: 1-9)
    /glitch-sequencer/cell I I (id: 0-255, val: 1/0)
    /glitch-sequencer/patlen I
    /glitch-sequencer/bpm I



Monome Control

Glitch Sequencer's snapshots can be controlled using a Monome 128. The Monome will show a portion of the playback sequencer as well. This feature is activated by setting the "status" attribute of the monome tag in the config file like so:

<monome status="on" ip_address="127.0.0.1" listen_on_port="8000" send_on_port="8080" series="128" />

Currently only the monome 128 has been tested with a cable orientation of 'up'. Here's a video of it in action:

For Monome 128 communication to work, you must use MonomeSerial with the following parameters:

  • I/O Protocol: OpenSoundControl
  • Host Address: 127.0.0.1
  • Host Port: 8000
  • Host Port: 8080
  • Cable Orientation: up



Appendix A: Selection Control Usage

Selection controls are used abundantly in Glitch Sequencer. There are three ways to operate a selection control. First, using the mouse, click-and-hold on the value that you wish to change, then move the mouse up or down. Secondly, when the selection control has focus, use the mouse scroll wheel to select a new BPM. Finally, when the selection control has focus, press the [up] or [down] arrow keys.

Holding down [shift] while choosing from a selection control copies your selection across all snapshots. This can be useful for reassigning instruments or MIDI devices after a song has been created.



Appendix B: Shortcuts video




Image annotations created using picbite.com