seq192
- live MIDI sequencer
seq192
[OPTION...]
seq192 is a MIDI sequencer for live situations that is meant to be controlled with OSC messages and sync with other applications using jack transport.
-h, --help
-f, --file
file
-c, --config
file
-p, --osc-port
port
-j, --jack-transport
-n, --no-gui
-v, --version
Seq192 allows writing and playing MIDI sequences and organizing them in screensets.
Main window
The main window consist in a toolbar and a sequence grid.
The toolbar contains the following controls
Panic button: disable all sequences
Stop button: stop transport
Play button: start or restart transport
Bpm entry: set beats per minute
Screenset name entry: set name of current screenset
Screenset number entry: select current screenset
The sequence grid is empty by default. Right-clicking in the grid allows creating a new sequence or editing an existing one. Sequences can be rearranged in the grid by dragging them. Left-clicking on a sequence toggles its playing state. Middle-clicking on a sequence opens its edit window. Shift+click defines the sequence as the synchronization reference for queued sequences. Ctrl+click toggles the sequence's queued state. The keyboard's arrow keys can be used to navigate accross sequences.
Edit window
The edit window consist in a menu, a toolbar, a pianoroll and an event editor.
The toolbar contains the following controls
Sequence name entry: set name of sequence
Sequence length entries: set number of beats per measure, beat unit and number of measures in sequence
Snap button: toggle grid snapping. Holding alt
allows disabling snapping temporarily
Snap dropdown: set snapping grid size
Note dropdown: set note size
Output dropdown: set sequence's MIDI port and channel
The pianoroll responds to the following interactions
Left click (piano area): send note to sequence's output
Left click: select note(s)
Left click drag: create a lasso selection or move selection
Middle click (or ctrl + left click) drag: change note(s) duration
Right click + left click: draw new notes
The event editor allows editing the velocity of notes and adding MIDI events like pitch wheel and control changes to the sequences The button on the left allows selecting which event should be shown on the timeline. The timeline works like in the piano roll, except events dont have a length. The bottom part is for editing the events' values: handles can be dragged individually, or one can draw a line with a drag-and-drop motion to create a linear automation. Scrolling with the mousewheel on the event editor increments the values of all selected events.
Important note
Each window has its own undo/redo history:
- main window: screnset name and sequences (position and content)
- edit window: MIDI events, sequence name, number of measures and time signature
When --jack-transport
is set, seq192 will
- follow start / stop commands from other clients
- send start / stop commands to other clients
- use the transport master's bpm
- set its position to 0 whenever the transport stops or restarts
- **not** attempt to reposition within sequences
The configration file is located in $XDG_CONFIG_HOME/seq192/config.json
(~/.config/seq192/config.json
by default), but can be loaded from any location using --config
. It allows customizing the following aspects of seq192:
- MIDI bus names
- MIDI channel names per bus
- Sequence colors as css color strings (per bus or per channel )
- Note names in the piano roll (per bus or per channel)
- Control names in the event dropdown (per bus or per channel )
Example
{ "buses": { "0": { "name": "Sampler", "channels": { "0": { "name": "Drums", "color": "orange", "notes": { "64": "Kick", "65": "Snare", "66": "Hihat" }, "controls": { "1": "Custom cc name ", "2": "Etc" } } } }, "1": { "name": "Bass synth", "channels":{ "0": {"name": "Trap bass"}, "1": {"name": "Wobble"} } } } }
/play
/stop
/bpm
<float_or_int: bpm>/swing
<float_or_int: position>/swing/reference
<float_or_int: position>/cursor
<float_or_int: position>/screenset
<int: screen>/panic
/sequence
<string: mode> <int: column> <int: row>/sequence
<string: mode> <string: name>/sequence/queue
<string: mode> <int: column> <int: row>/sequence/trig
<string: mode> <int: column> <int: row>/status
<string: address>/status/extended
<string: address>{ "screenset": int, "screensetName": "string", "playing": int, "bpm": int, "tick": int, "sequences": [ { "col": int, "row": int, "name": "string", "time": "string", "bars": int, "ticks": int, "queued": int, "playing": int, "timesPlayed": int, "recording": int }, ... ] }
Sequencer status
screenset: current screenset
screensetName: current screenset's name
playing: playback state
bpm: current bpm
tick: playback tick (192 ticks = 1 quarter note)
Sequences statuses (1 per active sequence in current screenset)
col: column position
row: row position
name: sequence name
time: sequence time signature (eg "4/4")
bars: number of bars in sequence
ticks: sequence length
queued: sequence's queued state
playing: sequence's playing state
timesPlayed: number of times the sequence played since last enabled
recording: sequence's recording state
seq192 is written by Jean-Emmanuel Doucet and based on
Copyright © 2021-2023 Jean-Emmanuel Doucet jean-emmanuel@ammd.net
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.
Sources: https://github.com/jean-emmanuel/seq192