La version de votre navigateur est obsolète. Nous vous recommandons vivement d'actualiser votre navigateur vers la dernière version.

User's Guide

Connect MIDI-keyboards

Midi-keyboards must have MIDI connectivity.

Plug the keyboard on your computer. Start Expresseur. The Mid-keyboard will be automatically recognized.

In the menu "shortcut", link the sections of the keyboard with the LUA-actions ( eg play the core, ... ). The use of the shortcuts is described later.. 

Connect MIDI-Audio-Expander devices

Midi-audio-expander devices translates MIDI to audio sounds. 

Advantage : no latency, no CPU flooding, no noise, no complex computer tuning. It's perfect for users who do not want to manage computer tuning, or with "small-CPU" computer. It suppresses all risks about latency (delay between the press of a touch and the sound-rendering). 

Example of cheap and efficient Midi-audio-expander : the X3MB from Serdashop (ask for the high-quality piano if you need only one - but nice -piano from this expander )

Plug the Midi-audio-expander on your computer, using MIDI cable or USB. The Midi-audio-expander will be automatically recognized by Expresseur on start-up.

In the menu mixer of the Expresseur, link tracks to the Midi-audio-expander. The mixer will propose the list of instruments available for this Midi-audio-expander.

The list of instruments available in the Midi-audio-expander is in the directory "ExpresseurV3/instruments". The syntax of this file is described later.

Load a Midi-Virtual-Instrument

A Virtual Instrument ( VI  ) is a file to render an instrument sound from MIDI-out events.

Expresseur can load two kind of VI :

  • SF2 soundfont ( .sf2 extension )
  • VSTi software ( .dll extension, limited to 64bits, without Graphic-User-Interface rendering ) 

Risk  : latency tuning is critical (delay between the press of a touch and the sound-rendering). As CPU and card-sound are not dedicated to this usage, latency must be decreased, keeping quality of sound. Bad tuning can generate random noise, latency, CPU flooding, ... It often needs "high-CPU" capacity. A MIDI-audio-expander device is easier to use (cf. previous chapter).

Example of nice VI : pianoteq for fantastic piano rendering (and harpsichord, ... )

The VI files, and its list of instruments ( .txt extension ) are in the directory "ExpresseurV3/instruments".

In the menu mixer of the Expresseur, link tracks to the VI you want.

The list of instruments available in the VI is in the directory "ExpresseurV3/instruments". The syntax of this file is described later.

The VI is plugged in the default audio output, selected in the menu Setting/Audio.

The VI can be plugged in another audio-output, adding "@x" at the end of the file name. For example : "guitar@SD-50.sf2" plugs this sound-font on audio-output SD-50. The list of audio-outputs are visible in the menu Setting/Audio.

A lot of VI are available on Internet. The Expresseur package contains these SF2 sound-fonts :

Connect a Midi-Software-instrument

A software instrument is a standalone software which can receive midi events, and render audio-output. It is normally used to connect a MIDI-keyboard on its input to play music like a "piano".

Risk : latency tuning is critical (delay between the press of a touch and the sound-rendering). As CPU and card-sound are not dedicated to this usage, latency must be decreased, keeping quality of sound. Bad tuning can generate random noise, latency, CPU flooding, ... It often needs "high-CPU" capacity. A MIDI-audio-expander device is easier to use (cf. previous chapter).

Example of nice VSTi : pianoteq for fantastic piano rendering (and harpsichord, ... )

To connect a software instrument on Expresseur :

  • Install a virtual MIDI-cable ( eg loopbe for PC users , delivered in the Expresseur package, or IAC for MAC-users )
  • Select this virtual cable in the mixer of Expresseur
  • Select this virtual cable (and only this one ) as input on the software instrument

Connect Midi-Electronic-Piano

An electronic MIDI piano contains three components in an "all-in-one" box :

  • a Midi-keyboard
  • a Midi-audio-expander to convert Midi to audio
  • an audio-amplifier with loud-speakers

Advantage : no latency, no CPU flooding, no noise, no complex computer tuning. It's perfect for users who do not want to manage computer tuning, or with "small-CPU" computer. It suppresses all risks about latency (delay between the press of a touch and the sound-rendering). 

Connecting a Midi piano to Expresseur ( via Midi interface, or USB ), will connect the Midi-keyboard as input, and the Midi-audio-expander as output. Refer to the previous sections for more information.

Expresseur sends a "local-off" command to the piano. This command disconnects the keyboard and the Midi-audio-expander. .

Modify the instruments

Expresseur has his own syntax to describe quickly a MIDI-instrument : its a free-text name, followed by MIDI-commands between parentheses.

Example :

  • piano on MIDI program 0 :  piano(P0)
  • a guitar on program 5, on right-pan ( control 10 ), with Midi-volume 80 ( control 7 ) : guitar_right(P5,C10/1,C7/80)
  • a program 5 on a bank MSB 1 : mysound(P1/5)
  • a program 5 on bank MSB 1 ,and bank LSB 4 : myothersound(P1/4/5)

The syntax does not accept white-spaces.

This syntax is used in :

  • The list of instruments available in the directory "ExpresseurV3/instruments". When Expresseur detects a new Virtual-Instrument (SF2, VSTi) in this directory, Expresseur extracts the list of instruments form the file (SF2 MIDI-programs, VSTi MIDI-programs or VSTi-Programs). The list is written in a text file, in the same directory, one instrument per line, with txt extension, and same name than the VI. This list can be modified (without useless instruments, or with your own instruments, adding controls, ..)
  • When a USB-Midi-Audio-Expander is connected, it is possible to create a list of instruments available for this device, making a text file with the same name than the device, extension txt, in the directory "ExpresseurV3/instruments", with one instrument per line.
  • The default list is the General-Midi ( "gm.txt" ), available in the directory "ExpresseurV3/instruments". This list is used for non USB MIDI-audio-expander. Add your own settings to adapt to your device.
  • The tuning of instrument "on the fly" within a score, with the ornament "instrument" ( cf section above for more detail ).

The SF2-expander embedded in Expresseur understands this MIDI-messages :

  • note-on / note-off
  • pitch-bend
  • program
  • channel-pressure
  • Control
    • 0 : bank selector
    • 1 : modulation
    • 5 : portamento time
    • 7 : volume
    • 10 : pan
    • 11 : expression
    • 64 : sustain
    • 65 : portamento
    • 71 : resonance level (0-127, 0=-64, 64=normal, 127=+63)
    • 72 : release time (0-127, 0=-64, 64=normal, 127=+63)
    • 73 : attack time (0-127, 0=-64, 64=normal, 127=+63)
    • 74  : cutoff level (0-127, 0=-64, 64=normal, 127=+63)
    • 84 : Set the portamento start key. the next note starts at this key (MIDI controller 84)
    • 91 : reverberation
    • 93 : chorus
    • 120 : sound-off
    • 121 : reset controllers
    • 123 : note-off
    • 126 : Set poly/mono mode
    • 100 : rpn msb
    • 101 : rpn lsb
    • 6 : rpn-msb = 0 : rpn-lsb :
      • 0 : Set pitch wheel range in semitones
      • 1 : finetune in cents (0-16383, 0=-100, 8192=normal, 16383=+100)
      • 2 : coarse tune in semitones (0-127, 0=-64, 64=normal, 127=+63)

Configure the shortcuts

The menu "setting/shortcuts" open a dialog box to edit all the shortcuts.

The shortcuts from the PC-keyboard are interpreted only when the Expresseur-window has the focus, and the text-zone is not in Edit-mode. A trace of such shortcut is diplayed in the status-bar.

The Midi-event are the best option to trigger action. Any device ( pedal, keyboard, tablet-midi, ad-hoc device ) can be used for this purpose.

The shortcuts can be sorted. When a trigger is detected in the list ( top to bottom ) , the detection process can be stopped or can be continued ( to have more than one action for one shortcut ).

When editing a shortcut, the valid midi-in devices are opened. Any key-in on these devices are displayed in the window. Double-click on a MIDI-event loads the tuning in the shortcut. The eMIDI-events which can be used are :

  • noteon & off : both events trigger the shortcut.
  • noteon : only noteon triggers the event
  • control : any value of the control trigger the event
  • program

A parameter can be passed to the LUA function, associated to the trigger.

The list of actions which can be attached to the shortcut is described in the LUA-script ( menu setting/LUA files), in the directory "LUA" of the software, in the table "actions". ( cf. description of this LUA-table "actions" in the default script "expresseur.lua") :

  • name  : displayed in the list of actions ( and menu if there is a shortcut)
  • help : displayed in the menu (and toolbar , if there is an icone)
  • icone : to display he action in the toolbar. The icone, format bmp 16x16, is stored in the directory "lua"
  • shortcut ( HOME END, CTRL+A, .. ) : to add the actions in the menu "actions" of the GUI
  • callFunction : the LUA function to call when the shortcut is trigerred.  ( "CallScore" and "CallChord" are called in priority if exists, according to the mode used in the GUI ) . These LUA functions have these parameters :
    • time : float
    • uid : unique id of the shortcut ( composed of the shortcut number, the device, the channel, and the pitch )
    • channel MIDI[1..16]
    • pitch MIDI [1..127] ; pitch of the note , or control-number, or program number
    • velocity [0..127] :  velocity of the note-on ( 0==note-off ) , or control-value
    • parameter  : as set in the menu edit/shortcut
    • indexKey[1..n] : index of the picth within the range of the selector. 1 means the minimum of the range
    • medianeKey[-n/2..0..n/2] : index of the pitch within the the range of the selector. 0 means the middle of the range
    • whiteIndex : idem indexKey, but taking in account only "white keys"
    • whiteMediane : idem medianeKey, but taking in account only "white keys"
    • black[0,1] : 0 means white key. 1 means black key.

Thanks to the scripting logic, you can build your own action ( change volume of the tracks, .. ), writing your own LUA-function, added to the LUA-table "actions", which will be visible in the list of actions of the shortcuts ( and the menu, toolbar, if any ).

The list of shortcuts can be saved(loaded) in(from) a file, using the menu "setting/save(load)" 

Additional parameters between the GUI and LUA


  • the LUA-table "values" can be changed/displayed in the menu "setting/LUA values", and the LUA script.
  • the LUA-table "tracks" is built by the LUA, and completed by  GUI ( according to current score ). The GUI completes the column the table tracks[trackname]
  • info.text : text to be dispayed in the GUI, set in the LUA script
  • : increment to change the file in the list of the GUI
  • function onStart(parameter) : started when the script ends its loading ( parameetr is set in menu settings/lua file)
  • function onStop() : started before to stop the script
  • table midiinOpen : to open specific midi-ni devices
  • The mixer in the GUI follows changes of the track-volume made by the LUA script itself
  • table actions ( cf. configure the shortcuts )


Parameters to tune a MusicXML score

To start with a new score, open the MusicXML file. Information about the score ( ornaments, structure, ...)  is pushed in a text file, the "parameters-file", visible in the left part of the screen. 

The parameters-file has the same name as the MusicXml file, but with a "txt" extension.

It is possible to have different parameters-files, which use one musicXML file, to be able to have different interpretations.

For regular use, reopen the text parameters-file ( not the musicXML file ). It will load the attached musicXML file.

If the structure of the musicXML file has too many changes ( parts, .. ), re-open the musicXML file itself as the first time. 

The parameters-file contains these sections :

  • "MUSICXML : file name" : the musicXML score to load
  • "TITLE : title of the score" : set the title of the score
  • "SET MARKS": to plug milestones in the score. 
    • one line per mark
    • the measure number, ":", the name of the mark. eg "18:Coda" means a label Coda on measure 18
  • "PLAY MARKS" : to reorganize the score, using the marks.
    • one line per mark. The "mark" must be defined in the previous section "Marks"
  • "PARTS" : to describe the parts 
    • mandatory, constant  "part_name:" as described in the MusicXML file.
    • mandatory "visible" or "not visible" : to set this track as visible or not, in the Expresseur score.
    •  mandatory "/played" or "/not played" : to set this track as played or not, in the Expresseur score.
    • optional ",alias=long_name/short_name" : to change the name of the track in the Expresseur score. The long name is displayed on first staff. Short name is displayed on next staves. The long name is used in the mixer : this is a convenient way to reuse settings ( instruments, MIID-device in the mixer )
  • "ORNAMENTS": to add ornaments ( mordents, dynamics, instruments, .. )
    • One line per ornament
    • position ":" ornament. eg : "2.1:mordent" means a mordant on second measure, first beat.
    • Syntax of the position :
      • optional  "!"  : at the beginning, it means an absolute measure-nr. : the measure_nr displayed on the Expresseur score, taking care of the repetitions described in "played marks" section.
      • mandatory  "measure_nr.beat_nr" : measure_nr and beat_nr, starting at 1. eg : "3.2" means third measure, second beat. The measure number is the original measure_nr, as defined in the original MusicXML score, without the compilation of repetitions defined in the section "play marks". To use the measure_nr visible in the Expresseur score , use prefix "!".
      • optional ".quarter_division" : number of quarter_divisions in the beat.  The quarter division is always defined as an ornament. eg : if quarter_division=2 ( a half-quarter ), "3.2.2" means third measure, second beat, plus 2 half-quarters.
      • optional ".chord_order" : to reach one note in a chord ( starting on one, the lowest pitch of the staff(s) )
      • optional "*repetition" : restrict the ornament on the repetition, according to the section "played marks". By default, the ornament is applied on all repetitions. eg : "3.2*2" means third measure, second beat, second time only. Note : not compliant with prefix "!" for absolute measure nr.
      • optional "<" : puts the ornament before the position. eg "3.2<:mordent" puts the mordent grace notes before the second beat. By default the ornament is placed on the beat.
      • option "@track_name" : restrict the ornament to a specific track (as listed in section "parts" ). By default, the ornament is applied to all tracks. It is possible to use only the first part of the track name. eg "@P1" is enough to tag the track "P1_myslongpianoname". To restrict to a staff in a track add ".#staff" (eg 1st staff os a piano track :@P1.1 )
    • Syntax of the ornament :
      • mandatory "ornament_name"
      • optional "=value"
    • List of ornament_names :
      • divisions_per_quarter=number : mandatory value as integer. Mandatory ni the musicXml file structure. It is used to set a precise position of an ornament in a beat.
      • random_delay=milliseconds : make rando delay on the notes
      • dynamic=1..127 : dynamic of the velocity input. 127 = full dynamic. 1 : no dynamic
      • pedal_bar=1..127 : automatic pedal on each bar ( midi-control 64 )
      • pedal=0..127 : activate the pedal ( or zero to stop the pedal )
      • lua=command parameters : activate lua function n the sript luascore.lua. Commands set by default :
        • chord chordname : set a chord to use in the improvisation mode. eg "lua=chord G7"
        • instrument setting: to set aninstrument, using the Expresseur syntax. eg "lua=instrument pianoleft(P0,C10/1)"
        • tune frequency : to tune the midi-out. eg "lua=tune 415"
        • bendrange 1..12 : to set the bendrange in half-tone. eg "lua=bendrange 2"
        • gm 0..2 : set GM mode on MIDI expander. eg "lua=gm 2"
        • scale equal|arabian|just pitch : set the scale. eg. "lua=scale just G"
      • text=value : add a comment in the Expresseur score
      • pianissimo: set the nuance pp
      • piano : set the nuance p
      • mesopiano : set the nuance mp
      • mesoforte : set the nuance mf
      • forte : set the nuance f
      • fortissimo : set the nuance ff
      • crescendo|diminuendo : apply a crescendo|diminuendo between two nuances
      • tenuto : force the legato with next note
      • staccato : reduce the duration of the note. by default half of the duration. An optional value can set 1/3 or 2/3 reduction. eg. "staccato=1/3"
      • accent=-50..50 : apply an accent on the note. Can be negative or positive. eg "accent=20"
      • grace : add a grace note. By default diatonic upper. options :
        • =inverted : diatonic lower. eg "grace=inverted"
        • =pitches : list of pitches to add. eg "grace=C4/E4,G4" adds chord C4/E4 and G4
      • mordent : add a mordent. Option "=inverted". eg "mordent=inverted"
      • turn : add a turn. Option "=inverted".
      • trill : add four trills. Option "=nb_trills". Note : the trill is applied as grace notes. For complex trill, please expand it in the musicxml score, as normal notes ( too complex and not standard definitions ). eg "trill=8"
      • btrill : baroque trill, same as trill, but starting on the upper diatonic pitch.
      • arpeggiate : arpeggiate a chord. by default from lower to upper. Option "value=down". eg "arpeggiate=down"
      • transpose=-24..24 : transpose in half-tone. eg "transpose=-12" transpose one octave lower
      • delay=milliseconds : delay the note. eg "delay=500" delays the note half a second 
      • before : set the note before the others.
      • after : set the note after the others

List of ornaments recognized from the musicXML file :

  • staccato
  • tenuto
  • accent
  • grace
  • nuances
  • mordent
  • trill
  • arpegiatte
  • Rehearsal marks
  • lyrics
  • silent notes ( cross-head )


Improvisation with chords

Load a text file, which contains a list of chords.

To follow the chords on a score, load a PNG image file containing the score,  with the same name than the text file.

Free text line can be added between the chords, with a dash at the beginning of the line, to avoid compilation of such free-text.

Recognized chords and keywords are in blue.

"Parts" can be declared. A part has these parameters :

  1. mandatory name : reused in the chain
  2. optional tone : useful for improvisation in pentatonic scales.

The "parts" are used in "Chains"  to reorganize quickly the score. A chain has two parameters :

  1. name
  2. optional loop : it loops inifnitely on this chain.


Exampel to play in tone C, looping on parts AAB, with a coda which can be smoothly trigerred ( by a key , .. )


- free text







A  A B



Syntax of the chords :

  • Three Notations of pitches are accepted.  eg G == Sol == V ( on tone C )
    • Latin : do re mi fa sol la si do
    • German :  C D E F G A B 
    • numeric :  I II III IV V VI VII
  •   Modifications accepted are listed here after. The exact definitions is in script "texttochord.lua". Eg G7, G-, Gsus4, F#dim, Ab.b5..
    • sus2
    • sus  == sus4 
    • m == -
    • 7 == m7
    • M7 == maj7
    • b5
    • #5
    • 5
    • 64
    • 46
    • 6
    • 9
    • #9
    • b9
    • 11
    • #11
    • b11
    • 13
    • #13
    • b13
    • ad+9
    • ad+#9
    • ad+b9
    • ad+11
    • ad+#11
    • ad+b11
    • ad+13
    • ad+#13
    • ad+b13
    • o == mb56
    • 0 (zero ) == mb57
    • /bass  eg C/G
    • (x) : without this degree x in the scale
    • #x : scale modifier
    • bx 
    • "[scale/root]". "/root" is optional ( by default the tone ). Scale can be :
      • ionien == modei
      • dorien == modeii
      • phrygien == modeiii
      • lydien == modeiv
      • mixolydien == modev
      • eolien == modevi
      • locrien == modevii
      • minor melodic == modemi == mineur melodique
      • dorien b9 == modemii
      • lydien augmented == modemiii == lydien augmente
      • lydien b7 == modemiv ==  bartok == vaschaspati
      • mixolydien b13  == modemv
      • locrien #9 == modemvi == eolien b5
      • altered == modemvii == altere == super locrien
      • minor harmonic = modehi == mineur harmonique
      • locrien natural == modehii == locrien naturel
      • ionien augmented == modehiii = ionien augmente
      • dorien #11 == modehiv
      • phrygien #3 == modehv
      • lydien #9 = modehvi
      • diminished diatonic == modehvii == diminue diatonique
      • balkan
      • andalou
      • tzigane
      • oriental
      • diminished == diminue == tondemiton == tonehaltone == bertha
      • halftonetone == demitonton
      • tone == ton
    •  =tone : set the tone . eg "G=C" , set the tone to C
    • NC : no chord
    • % : repeat chord
    • @pitch : center the scale around this pitch. eg "G7@G5"
    • prefix "!" : chord does not influence the mode. But mode can influence the 3rd and 5h chord if not specified
    • prefix ":" chord influences the mode ( by default )
    • mode prefix "_" : mode for this chord and the next ones ( by default )
    • mode prefix "." : mode for this chord only

 The "luachord.lua" precalculates these scales. Each pitch ( except the bass ) is decorated with the next pitches of the chord. In addition, the list of alteration ( the "black keys" ) is calculated.

  • bass : a walking bass , taking in account the next chord. First pitch is the bass itself ( or the 5th if chord is repeated ).
  • chord : the pitches of the chord. 
  • pentatonic : the pitches of the pentatonic scale. 
  • diatonic : the pitches of the scale itself. 

 Scripting music logic using LUA

LUA language can be used to script any music logic within Expresseur. 

A specific page described this feature.

The scripts are stored in the directory "lua".

The active script is stored in the menu "setting/LUA script". Parameter can be set ( passed to the LUA function onStart )

To develop your own music-logic, without the Graphic-User-Interface, you can use two solutions :

  • A command-line tool  to start and drive LUA-Midi : expresscmd.exe  (cf. detail in next section ).
  • Call the API-dll (luabass basslua), to build your own solution, using Python, C++, LUA, ...