# Seqer

by Div Slomin

## Introduction

Seqer is a MIDI sequencer, a program for recording and editing MIDI files. It does not record audio nor host software synthesizers as plugins, but can cooperate with other programs which do. It is not a pattern sequencer optimized for verbatim repetition, but rather a linear sequencer that encourages copying and pasting with musical variation. It is not a step sequencer that restricts events to regular intervals of time, but does make use of time steps to simplify visualization and navigation. Editing is done primarily via the computer keyboard, and the display is focused entirely on the data itself rather than buttons and icons. In short, it is a modern tool strongly influenced by the aesthetics and philosophy of a different era.

## Features

### The sequence editor

The heart of Seqer is the sequence editor, which combines aspects of a spreadsheet-like event list and a graphical piano roll. These are displayed in such a manner that they line up with one another, and are used simultaneously.

Time increases in steps as you scroll down the screen. Steps correspond to a configurable interval of time, in fractions of a musical measure (as influenced by time signature events) or in fractions of a second (as influenced by tempo events). You can zoom in and out to control the step size, or type in an arbitrary number to make it easy to insert tuplets. Changing the step size does not modify the data in the file, only how it is displayed. There is at least one row in the event list for each step, whether or not an event occurs during that step. Each event gets its own row, and if more than one event occurs during the same step, additional rows are inserted in the list and the piano roll is stretched accordingly. Events don't have to line up with the start of each step, although they are inserted that way for convenience; rather they are displayed according to the step that they occur anywhere within.

Different tracks and channels are displayed intermingled, distinguished by properties in the event list. For those occasions where this is overwhelming, the display can be filtered according to these and other properties.

Newly inserted events share their properties (track, channel, etc.) with the most recently edited event. Notes are added by typing the letter of their name. Newly inserted notes share their octave with the most recently edited note, and inherit their accidentals from the key signature (as specified in a key signature event). Their duration will be equal to the step size. All of these can be overridden where necessary by editing the appropriate property after the event is inserted.

Properties can be edited by typing in a value, or can be increased or decreased in small or large amounts, as appropriate for the property in question. The small increment for time is one pixel at the current step zoom, and the large increment is a full step. The small increment for pitch is a chromatic step, and the large increment is an octave. Certain properties can also be quantized, such as rounding time to the nearest step. Overwrite mode lets you re-input the pitches of existing notes the same way as you would insert new notes.

### Recording, playback, and ports (not yet implemented)

Seqer will listen for MIDI input on a configurable port and save it in either realtime or step time to the most recently edited track. Playback will be sent to a configurable default port unless overridden on a per-track basis. Tracks can by directed to a particular output port by inserting a port event that specifies its name. Port names can correspond directly to those provided by the underlying MIDI system of the computer, or can be translated according to a configurable mapping; this allows you to move files between computers without having to edit the port names.

Playback and recording start from the position of the editing cursor. Pressing stop will rewind the cursor to where it started, whereas pressing pause will leave it where it stopped.

### Multiple windows

You can use multiple windows to see different sections of the file simultaneously, each with its own step size if you prefer. Similarly, you can set different filters for each window so as to see different tracks or channels side by side rather than intermingled.

You can also edit different files in different windows. Seqer has no heavyweight notion of a project, and starting a new file is as fast and simple as it is in a text editor.

### Markers

Markers are useful for navigating within the file. They are inserted and edited just like other events, but you can jump to the next or previous marker via keyboard shortcuts, or open a dialog to jump to one with a matching name.

### Text events (not yet implemented)

Text events have no special meaning in the MIDI standard other than leaving notes to yourself, nor do they have any special meaning for Seqer. However, they are useful for adding ad hoc metadata for a particular track and time that can be interpreted by external utilities.

### Macros (not yet implemented)

Macros let you record a series of editing actions and assign them to a keyboard shortcut. You can then play them back repeatedly, which greatly speeds up an editing session.

### External utilities (not yet implemented)

External utilities are a way to add custom functionality to Seqer yourself. Seqer will save the current song to a temporary file, hand it to a program or script of your choice, wait for the program to finish manipulating the file, then load it back in. The selection and caret are saved as special text events in the file, allowing the external utility to both see and modify them. Combined with macros, the external utilities can feel like first-class parts of the editing environment.

## Influences

Seqer has some novel ideas in it such as the core semantics of the sequence editor, meter-aware step zoom, and port mapping, as well as the transplanting of existing ideas to a category of software where they never appeared before. However, it is also inspired by other programs which came before it:

- The general notion of MIDI sequencing, piano rolls, and event lists: from the sequencers of the 1990s including Cakewalk and PowerTracks Pro, before they turned into DAWs.
- The general notion of step-based sequencing: from mod trackers and Roland-style drum machines.
- The musical value of linear sequencing compared to pattern sequencing: from mod trackers and drum machines by counterexample.
- The notion of a textual grid as a primary editing interface rather than a begrudging "under the hood" experience: also from mod trackers, and from spreadsheets like Excel.
- The notion of making all operations controllable from the keyboard, with standard key bindings whereever possible and predictably symmetrical ones everywhere else: from the Common User Access and Human Interface Guidelines.
- The notion of keeping tools small in their scope and providing interfaces by which they can interact with other tools to form a greater system as a whole: from the Unix command line.
- The notion of inserting notes whose octave and accidentals are inferred from context: from notation programs like Sibelius.
- The notion of having both "stop and rewind" and plain "stop": from Sound Forge.
- The notion of having overwrite versus insert modes even in the absence of more exotic editing modes: from word processors like Word.
- The notion of markers as a core navigation interface, and the notion of recordable macros that can be repeated via a held-down key: from Vi.
- The notion of different simultaneous views of the same file: from the split panes in Vim and Word (and the general Model/View/Controller pattern).