| 
							- 
 - ! title		The Non Sequencer
 - ! author	Jonathan Moore Liles #(email,male@tuxfamily.org)
 - 
 - -- Table Of Contents
 - 
 - : Description
 - 
 - < non-new-about.png
 - 
 - :: Guiding Principles
 - 
 - + Flexibility
 - + Efficiency
 - + Purpose
 - + Grace
 - 
 -   Non has many modes and functions. Where flexibility comes at a small
 -   cost, we prefer to be flexible and make up the difference
 -   elsewhere. Where arbitrary limitations are reasonable and necessary,
 -   Non enforces them, but not without being forced into it. Where it is
 -   easier to be inefficient than efficient, but the efficiency matters,
 -   we prefer to put in the (small amount of) work required to be
 -   efficient, often resulting in thousand-fold performance gains; this
 -   may sound like an obvious statement, but, in fact, design for
 -   efficiency is a rare practice in this (Linux Audio/'Modern'
 -   software) arena. Although it is tempting to implement a kitchen sink
 -   in every program, we resist the urge. Non has the purpose of being a
 -   real-time sequencer and anything outside of that scope is a job for
 -   another day. If there is something related to the task at hand that
 -   a computer can do instantly and easily, but which requires labor for
 -   you, Non tries to do it for you so that you can continue making
 -   music without being bothered. Non's user interface is designed to
 -   combine the stark functionality and speed of hardware with the
 -   degrees of freedom of software.
 - 
 - : The Interface
 - 
 -   The interface is quite simple and is based on the excellent FLTK
 -   (1.1.x) toolkit. (Versions \< 1 of Non were based on raw Xlib and a
 -   few Motif widgets.) The author examined many toolkits before
 -   beginning, and has absolutely no interest in pursuing GTK or Qt--Non
 -   simply doesn't require much of a toolkit, and these are incapable of
 -   providing less than total excess.
 - 
 -   Non's GUI is highly optimized. Common operations are designed to be
 -   as fast as possible. Where other sequencers completely monopolize
 -   the CPU when scrolling, etc., Non performs smoothly--even on
 -   antiquated hardware.  It is not technically difficult to achieve
 -   such speed. And, in fact, it is a shame that more developers don't
 -   consider good (or even just reasonable) performance a priority.
 - 
 - :: The Pattern Editor
 - 
 - < non-pattern-editor.png
 - 
 -   Upon invocation, Non enters the pattern editor and loads Pattern
 -   1. The pattern editor presents a grid interface--the heart of a step
 -   sequencer. You can toggle a note on the grid by entering its
 -   coordinates with the keyboard or clicking an intersection with the
 -   mouse. The length of patterns is unlimited and no special action is
 -   required to lengthen them (simply adding notes beyond the "end" is
 -   enough.) Non can present grids in one of two modes, expanded and
 -   compacted.  In the compacted view, only named rows are displayed;
 -   this means that only the notes the current instrument or scale will
 -   consume vertical space--resulting in far more efficient use of
 -   screen real-estate. Any notes that are made invisible by the
 -   compacted view will be silenced.
 - 
 -   You may add, remove, transpose, move, and edit notes, as well as
 -   trigger/mute patterns, while the transport is running.
 - 
 -   The resolution of the pattern display can be adjusted (the default
 -   is one point per 1\/16th note), and, additionally, the canvas can be
 -   zoomed horizontally and vertically as necessary. However, it is
 -   highly recommended that you avoid creating 'vertical' compositions,
 -   that is, one should place each part in a separate pattern and avoid
 -   the need to scroll about looking for notes.
 - 
 -   Tonic patterns have a choice of scale and key, which limits the
 -   display to only valid notes. This /row-compaction/ can be turned
 -   off, if desired, so that all 128 notes are visible. Or simply choose
 -   the /chromatic/ mapping if you are not creating scale based music.
 - 
 -   Percussion, or other sample-based patterns can be assigned an
 -   /instrument/ mapping, which again limits the display to only those
 -   notes for which names and volumes have been provided. The instrument
 -   definition format is a simple ASCII file containing one name, note
 -   and volume percentage per line.
 - 
 -   Individual patterns may be soloed or muted right from the pattern
 -   editor.
 - 
 -   Each pattern has a setting for output MIDI channel and sequencer
 -   port--and these may also be changed while the transport is running.
 - 
 - ::: The Notes
 - 
 -   The type (duration) of note to be inserted can be adjusted in the
 -   pattern editor (control+mouse-wheel). The velocity of individual
 -   notes may be adjusted (mouse-wheel), and the current value is
 -   reflected in the color of the note. Ranges may also be /inserted/
 -   and /deleted/, a commonly required operation during composition, but
 -   one that is, sadly, missing from many sequencers.
 - 
 - < non-cursors.png
 - 
 - ::: Recording
 - 
 -   A pattern can be recorded via MIDI in one of four modes:
 - 
 - = Merge (the most familiar/least useful)
 - 	= In this mode recorded events are merged into the pattern on each pass
 - 	= through the loop. This is how most sequencers work, but it usually just
 - 	= results in a jumble of notes that require much manual cleaning up.
 - = Overwrite (each pass [with input] replaces the previous contents of the pattern)
 - 	= This is like merge mode, except that the pattern is cleared before
 - 	= the recorded events are input. If no notes have been played during
 - 	= a loop, the pattern remains unchanged. This is a great way to just get
 - 	= a part down without having to remove your hands from the instrument.
 - = Layer (each pass [with input] goes into a new pattern)
 - 	= This is just like overwrite mode, except that the pattern actually
 - 	= overwritten is a duplicate. Use this mode to record several loops of
 - 	= the same length without removing your hands from the instrument.
 - = New
 - 	= In this mode, all recorded events are placed into a new pattern (of
 - 	= whatever length) when recording is stopped.
 - 
 - # It is especially useful if you bind Record to a MIDI footswitch.
 - 
 - ::: The Event Editor
 - 
 - < non-event-editor-notes.png
 - 
 -   For situations requiring close inspection, fine-adjustments or
 -   entering of non-note data, the Event Editor allows one to edit the
 -   raw MIDI event list of a pattern. A common use is to insert program
 -   or control change events.
 - 
 -   Like everything else in Non, the Event Editor is real-time--change a
 -   note and you'll see and hear the result as the pattern plays.
 - 
 - :: The Phrase Editor
 - 
 - < non-phrase-editor.png
 - 
 -   Phrases are to patterns as patterns are to notes. Switching to the
 -   Phrase Editor brings up Phrase 1, where each row corresponds to an
 -   existing /pattern/. The grid of the Phrase Editor is fixed at one
 -   column-per-beat. This view is somewhat similar to a timeline view in
 -   other sequencers, but do not be deceived--Phrases may be many in
 -   number and are triggered just like patterns.
 - 
 -   When a node on the Phrase Editor grid is activated, the length of
 -   the cue event inserted will be the same as that of the pattern being
 -   triggered. Adjusting the duration of this event will cause the
 -   pattern be cut short or looped. If the length of a referenced
 -   pattern is changed, this will *not* be reflected in the Phrase
 -   display. You must either re-insert or adjust the length of the
 -   reference.
 - 
 -   It is recommended that, to avoid confusion, you first compose all of
 -   the patterns you need for a phrase, and only then bring up the
 -   phrase editor.
 - 
 -   Editing operations are the same as those for the Pattern Editor.
 - 
 - :: The Sequence Editor
 - 
 -   The Sequence Editor defines the sequence of playback. The interface
 -   is a list of phrases, to be played sequentially, beginning from bar
 -   1. It is not necessary to include all existing phrases in the
 -   playlist. Phrases can be moved up and down the playlist, inserted
 -   and deleted. The editor displays the start bar of each phrase in
 -   addition to its number and name.
 - 
 -   This sequence->phrase->pattern hierarchy allows for logical,
 -   expressive compositions--without the labor intensive
 -   copy/paste/duplicate work-flow imposed by other sequencers.
 - 
 -   For example, suppose you have a song with a 12 bar progression that
 -   repeats 4 times.  This 12 bar sequence is composed of many patterns,
 -   each a few measures in length and roughly corresponding to the
 -   chords in the progression.
 - 
 -   In another sequencer you would be required to use clumsy copy\/paste
 -   operations to destructively extend the 12 bar sequence. Then if you
 -   wanted to change a part of that subsequence later, you would have to
 -   go edit each instance of it on the 'timeline' view. This is absurdly
 -   inefficient for the operator.
 - 
 -   In Non you simply create your patterns, assemble them into logical
 -   phrases, and then assemble these phrases into a sequence that
 -   determines the entire song.  This approach is similar to the
 -   bottom-up approach of factored languages such as Forth.
 - 
 - 
 - :: Pattern Triggers
 - 
 - < non-pattern-triggers.png
 - 
 -   Next to the sequence playlist is an array of pattern triggers. Here
 -   one can monitor the progress of multiple patterns during playback
 -   and cause them to be muted etc.
 - 
 -   The left mouse button toggles muting, the middle button toggles
 -   soloing, and the right button brings up the given pattern in the
 -   pattern editor.
 - 
 -   Playing patterns appear green, the solo pattern appears red, and
 -   muted patterns appear gray,
 - 
 - : MIDI
 - 
 - :: IO
 - 
 -   Non utilizes the Jack MIDI transport. Jack MIDI is an emerging MIDI
 -   transport for Linux. Since Jack already provides similar routing as
 -   the ALSA Sequencer interface, little is lost--besides compatibility
 -   with existing programs. (Jack has an aseq bridge capability, but in
 -   order to benefit from Jack MIDI, both sequencer and synth must use
 -   Jack). The Jack MIDI API is extremely limited in comparison to the
 -   very capable ALSA API, but this is a problem for the programmer, not
 -   the user.
 - 
 -   At the time of writing, Non is one of only two sequencers to use
 -   Jack MIDI natively.
 - 
 - ::: About Jack MIDI Connections
 - 
 -   Since Jack MIDI is new and not all programs support it, many find
 -   themselves confused. This section attempts to explain Jack MIDI
 -   ports.
 - 
 -   The ALSA sequencer interface has long been the standard MIDI routing
 -   subsystem on Linux. But many (all) of the programs we use for
 -   synthesis these days use Jack for their audio IO. It makes more
 -   sense for those MIDI related programs utilizing the Jack Transport
 -   for synchronization to also use Jack ports for MIDI
 -   delivery. Therefore, ALSA MIDI is quickly becoming obsolete.
 - 
 -   Jack MIDI ports are *not* related to ALSA MIDI ports in any
 -   way. Jack MIDI ports are just like Jack audio ports, except that the
 -   data being transmitted in each buffer are raw, timestamped MIDI
 -   events instead of floating point audio samples. Jack MIDI is
 -   sample-accurate. This means that a MIDI Note On event can occur
 -   concurrently with a sound, and the two will never drift apart as
 -   often happens to some extent with ALSA.
 - 
 -   In essence, Jack MIDI is a way of expressing a direct temporal
 -   correlation between audio and MIDI data.
 - 
 - // Note:
 - {  Older versions of QJackCtl and other connection managers do not
 - {  know about Jack MIDI ports. Please make sure you're using an
 - {  up-to-date version.
 - 
 -   When Non is started, it will create `Non:midi_in` and
 -   `Non:control_in` input ports, as well as the 16 output ports with
 -   names after the form `Non:midi_out-X`, where `X` is a number from 1
 -   to 16. These ports will be visible in any connection manager capable
 -   of connecting Jack MIDI ports, as well as via the `jack_lsp` and
 -   `jack_connect` command-line utilities.
 - 
 -   For example, to connect Non to ZynAddSubFX (the CVS version supports
 -   Jack MIDI), type the following into the shell:
 - 
 - > $ jack_connect Non:midi_out-1 ZynAddSubFX:midi_in
 - 
 -   Also, be sure that Zyn's outputs are connected to
 -   system:playback\_\* so that you can hear the sounds it produces.
 - 
 -   It is possible to use Jack MIDI clients and ALSA MIDI clients
 -   together via the bridge built into jackd.  For this to work you must
 -   append the `-X seq` option to the `alsa` driver section of the jackd
 -   command line. Like so:
 - 
 - > $ jackd -d alsa -X seq
 - 
 -   The way such bridged ports are named varies between Jack versions,
 -   but they should be fairly obvious. When used in this way, many of
 -   the advantages of Jack MIDI are lost, so it is recommended that you
 -   find a Jack MIDI capable synth for best results.
 - 
 - // Example of Jack MIDI connections in Patchage
 - < non-patchage.png
 - 
 - :: Non Files
 - 
 -   The format of `.non` files is a variation of SMF-2. In an SMF-2
 -   file, each track chunk represents a pattern. Because Non groups
 -   patterns into /phrases/, this usage of SMF-2 is probably not
 -   compatible with other implementations (although, the author has
 -   never actually seen another program that could play back SMF-2
 -   anyway.)
 - 
 -   Each phrase is stored as a track of MIDI Cue messages, each
 -   referring to a pattern to be triggered. The sequence\/playlist is
 -   stored as the first track, and consists of a list of Cue Point
 -   meta-events referring to phrases.
 - 
 -   Also in the first track is a sequencer specific meta-event (ID
 -   "Non!") containing song data that cannot be readily expressed with
 -   existing meta events, and some versioning info to aid future
 -   compatibility.
 - 
 -   In short, the author has done the utmost to save sequences in a
 -   standard format--within reason; SMF was hardly designed with a
 -   program like Non in mind--instead of some ad-hoc ASCII format (which
 -   would have been *far* easier to implement), or worse, buggy, bulky,
 -   and unmaintainable XML.
 - 
 - :: Exports
 - 
 -   In addition to saving and loading `.non` files, Non can export
 -   individual patterns as flat, SMF-0 MIDI files.
 - 
 - :: Imports
 - 
 -   SMF-0 files can be imported as a new pattern (all channels merged),
 -   or SMF-1 (such as those written by Seq24) and SMF-2 (ever seen one
 -   of these?) can be imported as N new patterns (selected from a track
 -   list.) All imported patterns are set to display the Chromatic scale,
 -   in order that no notes be hidden from view.
 - 
 -   This should make it easy to migrate any existing patterns that you
 -   may have over to Non, or to permit editing of Non patterns in
 -   external programs (for graphic controller tweaking perhaps?)
 - 
 - : Synchronization
 - 
 -   Non's transport is driven by the Jack Transport, so in order to sync
 -   Non with a DAW like Ardour, you must set Ardour to be the Jack
 -   Timebase Master.  Therefore, all tempo mapping and time signature
 -   information should be manipulated in the Timebase Master--Non will
 -   respond to these changes automatically. If there is no Timebase
 -   Master registered when Non starts, it will take over that role
 -   instead. This is useful if you simply plan to use Non as a musical
 -   instrument.
 - 
 - : Control
 - 
 -   Non creates two MIDI input ports, one for /performance/ data and one
 -   for /control/ data. The control port is used to control Non with
 -   hardware MIDI controllers, such as the BCF2000, or other software.
 -   The performance port is used to record musical data into patterns.
 - 
 - : Playback
 - 
 -   The playback mode can be toggled between Pattern, Sequence and
 -   Trigger. In Pattern mode (the default), all patterns are played
 -   simultaneously, from the beginning, and looped forever. Since
 -   patterns may differ widely in length, interesting compositions are
 -   possible. In this mode, Non makes for a very intuitive software
 -   instrument--rivaled only by the excellent program FreeWheeling (a
 -   live audio looper.)
 - 
 -   In Sequence mode, playback strictly follows the sequence list and
 -   the Jack transport, and does not loop. This mode is suitable for
 -   parallel compositions between Non and a Jack Timebase Master capable
 -   DAW.
 - 
 -   Trigger mode is very much like Pattern mode, except that all
 -   patterns begin muted and must be enabled via the trigger view.
 - 
 - : Sister Projects
 - 
 -   Much of the inspiration to move forward with Non was derived from JP
 -   Mercury's highly useful and successful FreeWheeling
 -   looper. Mr. Mercury is a visionary.
 - 
 -   But the closest sister of Non has to be the amazingly capable
 -   ZynAddSubFX soft-synth by Nasca Octavian Paul. ZynAddSubFX, like
 -   Non, utilizes the FLTK GUI toolkit, and has recently begun to
 -   support Jack MIDI (albeit in a limited fashion.) This is, hands
 -   down, the best synth available for Linux, and probably one of the
 -   best period. If all you have is Non and Zyn, you have all that you
 -   require to make great music.
 - 
 -   Of course, this section can hardly go without mention of Rob Buse's
 -   Seq24. It was the author's unending frustration with the abysmal
 -   performance and absurd limitations of Seq24 that, more than any
 -   other single factor, inspired him to write Non.  The most
 -   frustrating aspect was that, prior to Non, Seq24 was, in the
 -   author's opinion, the best sequencer available on Linux. Seq24,
 -   which claims to be light and free of bloat is, without comparison,
 -   the slowest, most poorly optimized sequencer the author has
 -   tried. Even the huge, snarling beast that is RoseGarden out performs
 -   Seq24 in every way but start time.
 - 
 -   Those days are over.
 
 
  |