home | help
QMIDIARP(1)		     General Commands Manual		     QMIDIARP(1)

NAME
     qmidiarp - MIDI arpeggiator and LFO

SYNOPSIS
     qmidiarp [OPTION] [file]
     qmidiarp { --help | --version }

DESCRIPTION
     QMidiArp  is  an advanced MIDI arpeggiator, programmable step sequencer and
     LFO.  It runs with either JACK MIDI or ALSA MIDI. It can hold any number of
     arpeggiator or LFO modules running in  parallel.  The  arpeggiator  modules
     produce sequences depending on the notes sent to their input port, which is
     typically	connected to a keyboard or another sequencer. The step sequencer
     modules allow you to create simple linear, monophonic and	globally  trans-
     posable sequences similar to the first analog sequencers. The MIDI LFOs in-
     dependently produce MIDI controller data of adjustable waveform, time reso-
     lution,  amplitude  and  duration. For each module, an input note filter is
     available, and the output port and channel can be set independently.  Since
     the modules use a common sequencer queue, they are  automatically	in  sync
     with  each  other.  QMidiArp  works with an internal tick resolution of 192
     ticks per beat. The queue can be synchronized to an incoming MIDI	realtime
     clock  or as a JACK transport client. Most of the relevant control elements
     are accessible via MIDI controller  through  a  MIDI-learn  infrastructure.
     QMidiArp also has a log tool displaying the history of incoming MIDI events
     in colors depending on their type.  QMidiArp is based on the Qt4 toolkit.

   General Operation
     When  no  commandline  options  are  given,  QMidiArp starts as a JACK MIDI
     client with an input port and two output ports. For starting QMidiArp as an
     ALSA client, use the -a option.  A new arpeggiator or  LFO  module  can  be
     created  by  clicking  one  of  the Add Arp..., Add LFO...  or Add Step Se-
     quencer...  buttons, which will show a new tab with the  chosen  module  in
     the  main area. The modules can be renamed or removed using the correspond-
     ing buttons or menu functions. Modules can be detached from the main window
     to control and view them in parallel. They can be brought back to the  main
     window  again by clicking on the icon on the left side of each module title
     bar. They can also be aligned side-by-side within the same  window  if  the
     main  window is stretched sufficiently before reinserting a module. The en-
     tire setup containing all arps, sequences and LFOs in  the  tab  bar  along
     with  the	parameters  set in the Settings window can be saved to or loaded
     from a QMidiArp XML file (.qmax). The tempo of the  queue	can  be  set  in
     beats  per minute and affects all modules. The queue is started and stopped
     by the blue arrow button.

   MIDI Clock operation (ALSA MIDI only)
     In ALSA mode, QMidiArp runs using its own clock and tempo, but it	can  op-
     tionally  use  incoming  MIDI  clock events as clock and start/stop control
     source.  If the MIDI clock button right of the tempo box  is  pressed,  the
     running ALSA queue is stopped, and QMidiArp will wait for an incoming "MIDI
     Clock Start" event from an external source connected to QMidiArp's MIDI in-
     put.  Once this event is received, the queue is started using MIDI realtime
     clock events as clock source. QMidiArp will best remain in  sync  with  the
     incoming  MIDI  clock if its internal tempo value (see above) approximately
     corresponds to that of the incoming clock. The MIDI clock	tempo  is,  how-
     ever,  measured while the queue is running. Therefore, if the tempos of the
     MIDI clock and that of QMidiArp differ, synchronization should become  sta-
     ble from the second queue start. The queue will stop when a MIDI Clock Stop
     event  is received. During MIDI Clock operation, QMidiArp's own clock start
     and stop functions as well as adding or loading new  setups  are  disabled.
     They are enabled again by unchecking the MIDI clock button.

   JACK Transport Client Operation
     When  the	Jack  Transport  Connect button is pressed, QMidiArp will try to
     connect to a running Jack server and then	function  as  a  Jack  Transport
     client, i.e. set its tempo and remain synchronized to a running Jack Trans-
     port  master.  Note that QMidiArp will restart its queue from zero whenever
     Jack transport is starting regardless of Jack  Transport's  position.  This
     also  applies  in	case  of a looping Jack Transport queue. The Jack button
     will be released automatically if QMidiArp gets disconnected from Jack by a
     possible Jack shutdown or if Jack is not available at connection time.

     Note: MIDI Clock and Jack Transport button states will be	saved  with  the
     QMidiArp  session	file, and get active or inactive when a new session file
     is loaded.

   Arpeggiator Modules
     QMidiArp's arpeggiators can produce complex patterns derived from the notes
     played on a MIDI keyboard. QMidiArp's arpeggiator modules were inspired  by
     the MAP1 hardware arpeggiator by Rudi Linhard.

     Input and Output panels

     Each  arpeggiator has an Input and an Output panel. The Input panel defines
     the note range and the MIDI channel to which the  arp  is	assigned.  Notes
     that  pass  this Input filter are sorted by pitch and added to the internal
     note buffer of the arpeggiator. Incoming notes that do not match any filter
     can either be discarded or forwarded to a selectable MIDI	port  (see  Set-
     tings  ).	The  Output panel holds settings for the MIDI channel and output
     port to which the arpeggiator notes will be sent.

     Arpeggiator Patterns

     Arpeggio patterns can be selected and edited in the Pattern panel.  Pattern
     presets are selectable from a combo box. The currently  active  pattern  is
     displayed	as  a  piano roll type screen showing the base notes as streaks.
     The y-scale of the graphics window corresponds to the index of the notes in
     the pattern. Octave changes (see Editing patterns ) are shown as additional
     horizontal lines.	The notes that are eventually sent depend on  the  input
     notes  received by the arpeggiator. The received notes notes are attributed
     in ascending order to the notes defined in the pattern. For example, a sin-
     gle streak on the bottom of the arp display ("simple" presets)  means  that
     at  the  first  pass  through the pattern, the lowermost note played on the
     keyboard is played.  If a chord is played on the keyboard and only one note
     is present in the pattern, only the lowermost pressed note is output at the
     first pass through the pattern. For the following repetitions of  the  pat-
     tern,  the  chosen  "repeat mode" is used to determine the following notes.
     If the pattern contains stacked note streaks (chord mode), chords played on
     the keyboard are also output as chords with polyphony up to the  number  of
     notes defined in the stack.

     Repeat Mode

     This  setting defines the behavior of the arpeggio over several repetitions
     of the pattern when the number of notes pressed on the keyboard  is  higher
     than the number of notes present in the pattern.  When Repeat Mode is "Up",
     the  next	higher note played on the keyboard is played at each repetition.
     With "Down", the next lower note is played. With a single note  present  in
     the  arp  pattern,  this  creates classical linear arpeggios. This way even
     simple patterns like "01" (or even "0") will generate a complete  arpeggio.
     When  "Static"  is selected, this classical arpeggio mode will be disabled,
     and the output notes remain constant.

     Trigger mode

     QMidiArp's arpeggiators can run in three modes. "No trigger" will cause the
     arp running continuously in synchronization with the internal  or	external
     clock source. Even when new notes are played, they will be output quantized
     to  the running queue. "Kbd restart" will cause a reset of the playhead po-
     sition upon the next note to be output, but the output pattern stays  quan-
     tized to the queue. When "Kbd trigger" is selected, each new note played in
     stakato will trigger the pattern with the timing of the played note.

     Editing Arp patterns

     Arp patterns are defined by a text sequence containing the notes themselves
     as numbers along with control changes for chord, tempo, velocity and octave
     changes.  When the Edit pattern button in the pattern panel is clicked, the
     current pattern preset appears as a text input line. The edited pattern can
     be stored in the preset list by clicking on the Store pattern  button.  The
     currently active pattern can be removed from the preset list by clicking on
     the Remove pattern button. All preset patterns are immediately saved in the
     .qmidiarprc  resource file when a pattern is stored or removed, and the new
     pattern list is made available to the other arps in the  tab  bar.  Pattern
     presets are automatically loaded on each application start.

     The syntax for the pattern text is as follows:

     0..9 : Note indices
	+ : One octave up
	- : One octave down
	= : Reset to standard octave
	> : Double tempo
	< : Half tempo
	. : Reset to standard tempo
      ( ) : Chord, begin..end,
	    e.g. (012) would be a chord of the
	    lowermost three notes in the buffer
	/ : Volume up by 20%
	\ : Volume down by 20%
	d : Double length
	h : Half length
	p : Pause

     Any  token is valid until the end of a pattern is reached. The token > will
     e.g. double the tempo for all following notes of  the  pattern.   When  the
     loop  jumps back to the beginning of the pattern, the tempo is reset to its
     initial value, i.e. a quarter note.

     Random

     The timing, velocity and length of the output notes can be randomized using
     the sliders in the Random panel. These settings can be  used  to  make  the
     arpeggiator  sound  less  mechanical, but if they are set to higher values,
     they add interesting accents to the patterns.

     Envelope

     QMidiArp can modulate the velocity of the arpeggios with an envelope  func-
     tion defined by Attack time and Release time. If an attack time is set, the
     velocities of the output notes are ramped up during the attack time defined
     in  seconds. If a release time is set, notes released from the keyboard are
     continued to be output while their velocity is ramped down linearly and un-
     til the release time has reached its end. The envelope function only  makes
     sense  if	the sound driven by the arp is velocity-sensitive. It works best
     with highly polyphonic patterns such as "Chord Oct 16 A".

     Groove

     The Groove sliders control a linear shift of timing,  length  and	velocity
     within  each  beat  of the output pattern. This can be used to create swing
     timing and accent. The Groove settings are adjusted for all arps simultane-
     ously.

   LFO Modules
     In parallel to the arps, QMidiArp can send MIDI controller data in form  of
     a	low frequency oscillator (LFO) to the assigned output. The LFO data con-
     sist of controller events that are in sync with the arpeggiator queue.  The
     queue  has  to be in running state to enable the LFO. Each LFO module has a
     waveform panel to define the shape of the outgoing data and an output panel
     to define MIDI Channel, ALSA port and controller number to be produced. The
     waveform can currently be set to Sine, Saw Up, Saw Down,  Triangle,  Square
     and Custom. The frequency of the LFO can be set in muliples and divisors of
     the arp tempo, such that frequency of 1 produces one full wave per beat. If
     frequencies  lower  than 1 are selected, the length of the wavetable has to
     be adjusted correspondingly to produce a full wave. The time resolution  of
     the  LFO determines the number of events produced every beat and can be ad-
     justed to up to 192 events per beat.  Amplitude and offset of the	waveform
     can  be adjusted from 0...127. Low resolutions lead to audibly discrete ry-
     thmic controller changes whereas higher resolution values lead to more con-
     tinuous waves.

     Muting individual wave points

     Individual wave points can be muted/unmuted by clicking on the  correspond-
     ing location in the wave display with the right mouse button.  A muted wave
     point is shown in darker color.

     Custom Waveforms

     When Custom is selected, the waveform can be drawn with the left mouse but-
     ton  in the waveform display. A calculated waveform is copied to the custom
     waveform whenever it is being modified by the mouse.  This  will  overwrite
     the  previous custom waveform with the currently displayed waveform. As all
     LFO operations, drawing and muting can be done while the queue is	running,
     and becomes effective immediately.

     Play direction and looping

     The play mode can be switched between:

       ->_> : Forward and Loop
       <_<- : Backward and Loop
       ->_< : Forward and Bounce
       >_<- : Backward and Bounce
       ->_| : Forward Single shot
       |_<- : Backward Single shot

     The direction and loop settings apply immediately when changed on the fly.

     Recording

     The  LFO  records	incoming controller data as selected in the Input panel,
     when the Record button is pressed. Note that the Record button  itself  can
     be  attributed to a MIDI toggle controller so that it provides a convenient
     implementation of a controller motion sampler and looper.

     LFO Input panel

     The input panel contains settings on which MIDI CC is to be  recorded,  how
     the LFO acts to note events received on the input. As the arpeggiators, the
     LFO  can  be  restarted or (re-) triggered by notes played on the keyboard,
     and the wave output can be stopped or not when Note Off events are received
     on the input Channel

     LFO Output panel

     The LFO output panel contains the port, channel and controller number  set-
     tings  of the LFO data produced by each LFO tab. You can also mute each LFO
     wave.

   Step Sequencer Modules
     By clicking Add Step Sequencer...	in the control tool bar, a new Seq  mod-
     ule  can  be  added  to the tab bar. Each of these modules produce a simple
     linear (monophonic) sequence, similar to  the  first  analog  hardware  se-
     quencers. The Seq modules are controllable while running, also in a similar
     way to analog step sequencers.

     Programming a sequence

     As  QMidiArp's LFO modules, the step sequencer can be programmed by adjust-
     ing notes with left mouse clicks on the sequence display. The octave  range
     is  fixed	to 4. The lowest note is C2 if the global transpose is set to 0.
     Notes can be muted with the right mouse click. The sequence length  can  be
     adjusted  between 1 and 8 beats, and the time resolution can be set to val-
     ues between 1 and 16 per beat. A resolution of 4 means  that  4  notes  are
     output  every  beat,  i.e.  sixteenth notes.  The sequence can also be pro-
     grammed using the Record function. When the Record button is pressed, notes
     received on the input port will be recorded step-by-step starting from  the
     last  modified  note.  Programming can be done on the fly also when the se-
     quencer queue is running.

     Controlling the sequence globally

     There are sliders to adjust the global velocity (volume), note  length  and
     transpose of the sequence in semitones.

     Seq Input and Output panels

     The  Seq  Input  panel  determines how to handle incoming notes on the MIDI
     Channel set in the channel box. If Note is checked, the  sequence	will  be
     globally  transposed with the incoming note as transpose value. If Velocity
     is checked in addition, the sequence will output notes with the same veloc-
     ity as that received on its input. The Input panel also determines how  the
     sequence  behaves	when  incoming	notes are received. It can be restarted,
     triggered and stopped with the timing of received notes as the LFO modules.

     The Seq Output panel is equivalent to that of arpeggiator and LFO modules.

     Note that accents within a pattern can be produced by running  LFO  modules
     in  parallel to the Seq module, and by sending to the same channel and port
     as the Seq module.

   Settings
     The Settings window allows one to configure if and to which  port	incoming
     events  that  do  not  match  any module's input filter are forwarded ( un-
     matched events). It also allows one  to  set  whether  incoming  controller
     events are recognized for muting and controlling the modules separately. If
     this option is set, QMidiArp will recognize MIDI control events that can be
     attributed  to  different	parameters  (see MIDI Control ). By checking the
     compact module style all new created modules will show with small GUI  ele-
     ments  to	be  more  economic in space when distributed as separate windows
     over the desktop.

     All settings in this dialog are stored along with the module  data  in  the
     qmax session file.

   MIDI control
     QMidiArp  supports  MIDI control events if the Modules controllable by MIDI
     CC option is checked in the Settings dialog.

     MIDI Learn

     Controllers can be attributed by right-clicking  on  the  sliders	or  mute
     checkbox  in each module and selecting MIDI Learn.  QMidiArp will then wait
     for MIDI  control	events,  and  moving  a  MIDI  controller  connected  to
     QMidiArp's  input will attribute this controller to the control item. It is
     possible to add several MIDI controllers to one item. If MIDI Forget is se-
     lected, all controllers for that item are removed. If Cancel MIDI	learning
     is selected, the learn process is stopped.

     Note  that  by  default,  mute controllers are interpreted as toggles, i.e.
     the mute state is toggled on reception of a value of 127 from  the  attrib-
     uted controller.

     Control Editor

     The Control Editor is accessible from the View menu. Controls can be edited
     by  MIDI  control	number, channel, and the minimum and maximum values that
     are sent to the control item. Mute controllers have a special behaviour. If
     minimum and maximum are equal, the controller acts as toggler  upon  recep-
     tion of the adjusted value.  If minimum is different from maximum, the cor-
     responding  module will be muted upon reception of minimum and unmuted upon
     reception of maximum as values.

     If Remove is pressed, the currently selected line will be removed, pressing
     Revert reloads the current controller settings. Pressing Cancel  quits  the
     control  editor  without  applying  changes, and only if OK is pressed, the
     edited control list becomes active.

   Global Storage
     There is another dock window available for storing and  restoring	most  of
     the  parameters of all modules at once. In this window, each module and its
     storages appear as a column, the first column representing switches for all
     modules globally. When the small Store button on the left is  clicked,  all
     modules will store their parameters in a location given by the current row,
     and the next available storage location appears. Module storages can be re-
     called  by  clicking  on  the buttons of each individual module or globally
     (numbered buttons in the first column). Storage locations	can  be  removed
     again  by clicking on the "arrow" button on the bottom of the list.  When a
     new module is added at a time when  storage  locations  already  exist  for
     other  modules,  the storage locations for the new module will be empty and
     can be filled by using Store again at this location.

     When QMidiArp is running, the switch behavior will depend on the  selection
     made in the comboboxes in the first row of the window.

     End of will cause parameter switches to occur when the module in the second
     combobox  reaches	its  pattern  end. When individual switches are done the
     module in the column of the clicked module determines the switch time.

     After will do parameter switches at the end of the number of beats selected
     in the second combobox after the restore button is clicked.

     The switch can be done by MIDI controller assigned by the MIDI  Learn  con-
     text  menu  of  the top button of each column. Note that it is the the con-
     troller value that corresponds to the storage location, and  that	you  may
     want  to  adjust the range of controllers to your needs using the MIDI Con-
     trol Editor With the Global Storage handler, QMidiArp can act as  a  simple
     but  handy  live sequencer tool.  But the Golbal Storage button in the View
     menu and in the main toolbar toggles visibility of the Global Storage  win-
     dow.

   Event Log
     The  Event Log displays incoming MIDI events. It is displayed in the bottom
     area by default, but can be hidden if not needed or set floating as a  top-
     level  window on the desktop. Logging can also be disabled generally or for
     MIDI Clock events only.

   Example Files
     There are currently three demo arpeggios.	The demo.qma  arpeggio	was  in-
     tended  to be used with the following sound types: Ch 1: Marimba, Ch 2: Ce-
     lesta, Ch 3: Acoustic Bass, but you can get interesting results if you  use
     other instrument settings.

     The  demo_seqlfo.qmax setup shows the use of the new sequencer and LFO mod-
     ules playing in parallel. The sequencer outputs should be routed to percus-
     sive synthesizer sounds. The LFO data is intended to act on filter  cutoff,
     which  has  the standard controller CC#74. ZynAddSubFX by Paul Nasca reacts
     on these filter cutoff controllers. The "Bass 1" and  "Plucked  3"  presets
     from this synthesizer work well with this demo file.

OPTIONS
     --portCount <num>
	    Set  the number of available ALSA output ports to <num>. The default
	    is 2.

     --help
	    Print possible command-line options and exit.

     --version
	    Print version information and exit.

     --alsa
	    Use the ALSA MIDI backend

     --jack
	    Use the JACK MIDI backend (default)

     file   Name of a valid QMidiArp (.qmax) XML file to be loaded on start.

FILES
     *.qmax
	    QMidiArp XML files containing session data in XML text format.

EXAMPLES
     Example QMidiArp files can be found in /usr/share/qmidiarp or  in	/usr/lo-
     cal/share/qmidiarp

NOTES
     Errors and warnings are written to stderr(3).

SUPPORT
     qmidiarp-devel@lists.sourceforge.net

AUTHORS
     Frank Kober, Nedko Arnaudov, Guido Scholz and Matthias Nagorni. This manual
     page was written by Frank Kober <emuse@users.sourceforge.net>.

				   2011-11-07			     QMIDIARP(1)

home | help