VMCI Plus Manual

(version 2.03)

General

Introduction to VMCI Plus and Hyper Vectorial Synthesis

Installation

The Activation Bar

7-bit Slider Panels

14-bit Slider Panels

7-bit Joystick Panels

14-bit Joystick Panels

The Virtual Keyboard panel

Panel Configuration Dialog-Boxes

Hyper Vectorial Synthesis control (HVS panels)

Using VMCI Converter

Getting started step by step

Copyright and Magic Code

Differences between VMCI Plus and previous versions

Acknowledgments


General

VMCI (Virtual Midi Control Interface) Plus is a GUI program which allows to send most MIDI data to a MIDI device by means of gestural actions on the computer keyboard and mouse. VMCI Plus is fully configurable and provides a total control of MIDI messages, even without any MIDI interface card and without any external MIDI keyboard or controller. This program is primarily designed to control real-time versions of Csound (DirectCsound in particular),  however it can also be used with any internal or external MIDI device or computer programs such as sequencers. It provides several panels with virtual sliders, virtual joysticks and virtual piano-keyboard. The newer version of the program (VMCI Plus 2) allows to change more than one parameter at the same time by means of the new Hyper-Vectorial Synthesis control. VMCI supports 7-bit data as well as the higher resolution 14-bit data that can be handled by the newer versions of Csound.

VMCI Plus requirements:

VMCI Plus features:

  1. An arbitrary number of completely configurable 7-bit slider panels. Each panel can handle up to 2048 controllers (16 MIDI channel X 128 controllers = 2048). The user can modify each controller by means of a slider.  When moving a slider, a stream of MIDI control change messages are sent to the MIDI out port, according to slider position. Most sliders are hidden from current view, because a maximum of 64 sliders can be visualized at the same time in each panel (assuming that screen resolution is big enough). The number of visualized sliders can be adjusted by the user for each single panel.
  2. An arbitrary number of completely configurable 14-bit slider panels. Each panel can handle up to 1024 parameter. Similar to 7-bit slider panels, but offering a double data resolution. Each parameter is handled by means of two controllers, the first handling the most significant data byte, the second the less significant one. Up to 32 sliders can be visualized at the same time in each panel (assuming that screen resolution is big enough). The number of visualized sliders can be adjusted by the user for each panel.
  3. An arbitrary number of 7-bit virtual joystick (mouse-sensitive areas) panels. It is possible to modify two parameter at the same time by dragging the mouse pointer inside a mouse-sensitive area. These areas are somewhat similar to the 'xyin' opcode of Csound. Each panel can handle up to 2048 controllers. Up to 10 joystick areas can be visualized at the same time in each panel, handling 20 controllers. The number of visualized joystick areas can be adjusted by the user, for each panel.
  4. An arbitrary number of 14-bit virtual joystick (mouse-sensitive areas) panels.  Each panel can handle up to 1024 parameters. Similar to 7-bit joystick panels, but offers a double data resolution. Each panel can visualize up to 2 areas a time, handling 4 parameters.
  5. Each slider panel can be instantly converted into a virtual joystick panel and vice-versa, preserving all current parameter values and positions.
  6. Each slider (or joystick) of a panel can be moved not only by the mouse, but also by incoming MIDI control-change messages. This allows remote control of sliders (joysticks). The assignments of each remote MIDI message can be freely configured by the user.
  7. Snapshots. All the slider (joystick) positions of each panel can be stored into a 'snapshot'. Up to 128 snapshots can be created in each panel. Each one of these snapshots can be instantly recalled by pushing a button.  When a snapshot is recalled, all slider positions are updated according to the corresponding snapshot content, and all MIDI control-change messages, corresponding to the new slider positions, are sent to the MIDI OUT port. Each snapshot can be also associated to an incoming MIDI note-on or program-change message, in order to allow remote recalling of any snapshot, belonging to any panel.
  8. HVS (Hyper Vectorial Synthesis). VMCI Plus allows to modify hundreds of parameters with a single mouse motion, according to a structure configured by the user. This control method is called Hyper Vectorial Synthesis control (see below). Each slider/joystick panel has an HVS panel associated to it. In each HVS panel there are two HVS areas: a one-dimensional area and a two-dimensional one. Normally the user interacts with these areas with the mouse, however a remote MIDI control is possible, by assigning the pointer motion inside each area to one or more incoming MIDI control-change messages.
  9. Virtual Keyboard. This keyboard looks piano-like, but each button can be reconfigured in order to send any  kind of MIDI messages. The buttons can also activate a snapshot belonging to any slider/joystick panel. Each button can be associated to a key of the alphanumeric keyboard, as well as to an incoming MIDI message, allowing remote control of events joined with each button.


How to install VMCI Plus

To install MSVC you must follow the next steps:

  1. Download the zipped archive containing the VMCI package at the following url:

    http://www.tiscalinet.it/G-Maldonado

    Create a folder named "c:\csound\" and unzip the archive in that directory, preserving the directory structure.
  2. Create a shortcut of the executable file (VMCI Plus.exe) in the desktop and/or in the start menu in order to make it faster to start it.

Here is the installation procedure to use VMCI Plus with DirectCsound:

  1. If DirectX (version 7.0 or higher) is not already present on your computer, then download and Install Microsoft DirectX package (you can download it from the Microsoft web site).
  2. Download DirectCsound at the following url:

    http://www.tiscalinet.it/G-Maldonado

    then  unzip and copy all content of DirectCsound archive in the folder named  "c:\csound\".
  3. Install Hubi's Loopback virtual MIDI device. It is included in the VMCI Plus zipped archive. Create a folder named c:\csound\MidiCable\ and unzip the content of archive mdlpbk25.zip in that folder.
    The loopback device must be installed as a device. Here is a quote from the installation notes.

    Windows 95: Start->Settings->ControlPanel->Hardware Continue-> [No] ->Continue -> [ Audio/Video/Game Controller ] ->Continue ->Diskette -> [ enter the unzipped directory (c:\csound\MidiCable) ] ...

    Then you will see a list with "Hubi's Loopback v250", select this, some OK and restart Windows when asked about it.

    (See Hubi's loopback manual for more information).
  4. Create a shortcut to  hwmdcabl.exe on the desktop and/or in the start menu in order to make it faster to start it.
  5. Start VMCI and configure the MIDI port (button "MIDI setup"), the Csound Settings (button" CsoundSettings") and start a real-time orc/sco pair to test it.
  6. OPTIONAL: Download and install MIDI-OX program (available separately; it is very useful to monitor incoming/outgoing MIDI messages, and can be used as diagnostic in the case of problems of communication beetween VMCI and DirectCsound) by clicking on midioxe.exe file.


The Activation Bar

VMCI Plus consists of several windows. When VMCI starts, the activation bar appears (after a splash screen is closed).
The activation bar is the main window of VMCI, it can be used to accomplish the following tasks:


7-bit Slider Panels

7-bit Slider Panels can visualize up to 64 sliders (N.B. only 8 sliders are visualized in this picture).

Normally visible sliders are only a subset of the total number of control parameters that can be handled by a single slider panel. Acutally 7-bit slider panels can handle up to 2048 different parameters (that is the total number of MIDI control change messages: 16 channels X 128 controllers = 2048 parameters). See panel configuration dialog-box to learn how setting-up the total number of control parameters and the number of visible sliders of a panel.

When a slider is moved, a stream of MIDI messages is sent to the current MIDI OUT port (these MIDI messages are control-change messages, with the status-byte $B0 + channel-number. The second byte of a MIDI control-change message is the controller number. Some famous MIDI control-change numbers are number 1-Modulation Wheel, 2-Breath Control, 7-Volume, 10-Pan, 64-Damper Pedal, etc. The third byte of a MIDI control-change message is the datum itself, expressed within a 0 to 127 range). Some Csound opcodes can convert incoming MIDI raw data into a floating-point number within a min-max range defined by the user. So VMCI shows current slider values in two ways: midi-raw-data and floating-point-translated data. The min-max range can be different for each slider. The default range is 0 to 1, but can be changed by the user (negative numbers are allowed too).

Near each slider some information is displayed.
Starting from the left:

All comments, as well as all current slider positions and other user-modified parameters, are stored to disk when current VMCI setup is saved.

Notice that, when you resize this panel horizontally, all visualized sliders are redrawn with a new length, in order to match the new size. This feature is useful to obtain a more precise control with the mouse: in this case, resizing the panel, filling the maximum area possible with current screen setting, will provide a more precise mouse motion control.

Above the sliders there is an area containing several buttons, text boxes and a combo box. This area is called button-bar. If you click one of the sliders, some information will appear immediately in the first three text boxes. These text boxes contain:

  1. MIDI control-change number,
  2. MIDI channel,
  3. floating-point min-max scaled value of last clicked slider (i.e. the slider which has got the focus).

The first two text boxes can be edited and the modifications ar automatically applied to the configuration of the corresponding slider. Notice that, when you change the controller number or the MIDI channel of a slider, that numbers will appear near the slider itself (the red and white numbers at the right of each slider). The third text box duplicates the floating-point translated data value of current slider and, being a text-box, the corresponding string can be selected, copied and pasted to a csound orchestra or score. Sometimes this can be useful to interactively define Csound parameters in orchestras or scores.

A description of the other features of the button-bar follows:


14-bit Slider Panels

These sliders allow a higher precision when using Csound's 'midic14' , 'ctrl14' and 'sliderXXb14' opcodes. The higher resolution is provided by combining two different MIDI controller messages for each slider, one for the first seven bits (Most Significant Byte) and the other for the last seven bits (Less Significant Byte). So a fourteen-bit number is generated, supporting of a range of  0 to 16383 vs. the 0-127 range of the seven-bit sliders. To obtain a real resolution improvement, the number of pixels scanned by the mouse movement (when moving a slider) must be greater than 128. For this reason it is recommended to resize horizontally the 14-bit slider panel, setting it to the maximum width allowed by your screen resolution.

The 14-bit slider panels are  very similar to the 7-bit ones. A description of each difference is presented below.


7-bit Joystick Panels

These panels contain 10 mouse-sensitive areas. When the right mouse button is pressed over one of these 10 areas, two MIDI control-change messages are sent, the first corresponding to the horizontal position, the other to the vertical one. So it is possible to control two different parameter at a time with a single mouse movement. When you drag the mouse into a mouse-sensitive area, a stream of control values will be sent to the midi-out port. This behavior is similar to 'xyin' opcode of Csound. A total of 20 controllers are visible in each panel, however the total control numbers available is 2048 as in the case of 7-bit sliders.

The toolbar  of these panels is similar to that of  7-bit slider and 14-bit slider panels. The differences are:


14-bit Joystick Panels

The mouse-sensitive areas of 14-bit joystic panels allow a higher precision when using Csound's 'midic14' , 'ctrl14' and 'sliderXXb14' opcodes. The higher resolution is provided by combining two different MIDI controller messages for each slider, one for the first seven bits (Most Significant Byte) and the other for the last seven bits (Less Significant Byte). So a fourteen-bit number is generated, supporting of a range of  0 to 16383 vs. the 0-127 range of the seven-bit sliders. To obtain an actual resolution improvement, the number of pixels scanned by the mouse movement (when dragging mouse inside a joystick area) must be greater than 128. For this reason it is recommended to resize both horizontally and vertically the 14-bit joystick panel, setting it to the maximum dimension allowed by your screen resolution.

The 14-bit joystick panels are very similar to the 7-bit ones. A description of each difference is presented below.


Panel Configuration Dialog-Boxes

Each slider/joystick panel is parent of a panel configuration dialog-box, which can be shown/hidden by clicking the "Configuration" button.

This is the picture of a panel configuration dialog-box:

A panel configuration dialog-box accomplishes the following tasks:


Hyper Vectorial Synthesis Control (HVS panels)

The Hyper Vectorial Synthesis control panels allow a new way of gesturally interacting with massive amount of synthesis parameters. Each slider/joystick panel is the parent of a Hyper-Vectorial Synthesis panel connected to itself, which can be shown/hidden by clicking the "View HVS panel" button.
Hyper-vectorial synthesis panels allow the user to vary many parameters at the same time, with a single mouse movement. See the Introduction section for more theoretical information about Hyper Vectorial Synthesis.

HVS panel has two mouse-sensitive areas:
a one-dimensional area (see picture below):

...and a two-dimensional area (see picture below):

During a performance, the user interacts with this panel by dragging the mouse inside one of mouse-sensitive areas.
Also, a MIDI remote control to move the cursor of each areas is provided (see Panel Configuration Dialog Box).

Each button inside mouse-sensitive areas represents a breakpoint. A breakpoint (as a snapshot) is a set of values of different synthesis parameters.
Each breakpoint must be linked to a previously created snapshot. Notice that the snapshot area is present also in HVS panel; snapshots buttons of this area are simply shortcuts to the snapshots of the parent slider/joystick panel.
In order to link a breakpoint to a snapshot, click the breakpoint button, a dialog box appears asking to type the snapshot number to link to, then type the number and click OK. As a faster alternative, drag the snapshot button with the right mouse button over the breakpoint button to link, then drop it.

At first, the user has to decide how many breakpoints he needs both for the one-dimensional area and the two-dimensional one. To set these numbers it is necessary to open the HVS configuration panel by clicking the button. The following dialog-box will appear:

To add a breakpoint in the one-dimensional area, click the "Add point" button; to remove leftmost breakpoint of the one-dimensional area, click the "Remove point" button. Notice that at least two breakpoints must be present in the one-dimensional area. Actually when the HVS panel is first opened, its one-dimensional area contains two breakpoints.

The two-dimensional area consist of rows and columns of breakpoints, and at least two breakpoints must be present in each row and in each column. Consequently the minimum number of breakpoints allowed in two-dimensional area is four. Actually when the HVS panel is first opened, its two-dimensional area contains four breakpoints.
To add a row of breakpoints in the two-dimensional area, click the "Add X Line of points" button; to remove a row of the one-dimensional area, click the "Remove X Line" button.
To add a column of breakpoints in the two-dimensional area, click the "Add Y Line of points" button; to remove a column of breakpoints in the one-dimensional area, click the "Remove Y Line" button.

Notice that you can hide all breakpoint buttons by unchecking the "view buttons" check-box.

Also you can hide the parent slider/joystick panel by unchecking the "show/hide parent panel" check-box.

You can also assign an incoming MIDI message to the pointer motion of one-dimensional and two-dimensional HVS areas, in order to obtain a remote control of Hyper-vectorial synthesis. To do that you can configure the messages of the "Incoming MIDI messages" grid. This grid is identical to that of  the Panel configuration dialog box. See Panel configuration dialog box for more information.

Moving the mouse around the HVS areas will change all parameters stored in the adjacent breakpoints, by linearly interpolating their values according to the mouse position. This gives a very powerful approach in synthesis control. See Introduction section for more theoretical information about Hyper Vectorial Synthesis.


The Virtual Keyboard panel

The  Virtual Keyboard panel allows to trigger any kind of MIDI voice message, not only note-on/off messages. It is very important to understand that the piano-like shape of each button of the Virtual Keyboard has only estetic reasons and could have no reference with the actual behaviour of each button. A click on a piano-key-like button can send a note-on/off, a program-change or a pitch-bend message to the MIDI out port . The user can configure each key to send the type of message he needs; any type of  MIDI VOICE messages can be assigned to each piano-like  button.
Also it is possible to assign a computer key to a piano-like button so you can play the computer keyboard in the manner of a piano keyboard. A total of 959 MIDI messages can be stored in memory.
Furthermore, remote control is possible by means of incoming MIDI note-on or program-change messages. All these messages are completely configurable by the user.
Besides, snapshots belonging to any slider/joystick panel can be associated to each piano-like button. In this case each snapshot can be activated both by computer alphanumeric keyboard and by a remote MIDI keyboard sending messages to VMCI. The snapshot assignment is totally configurable.

An explanation of each Virtual Keyboard feature follows.

When you open the virtual keyboard panel for the first time, it is set to a default configuration. All of the piano-like buttons are set to send MIDI note-on/off messages, so you can play these buttons as they would be the keys of a piano. However you can totally edit this configuration.

There are three modes to operate with the Virtual Keyboard panel:

  1. play mode
  2. edit mode
  3. show mode

see also the radio buttons in the picture below:

You can switch to any of these three modes by clicking the corresponding radio-button.

In play mode you can play the notes, trigger the MIDI messages and/or recall snapshots Virtual Keyboard is configured with.
In edit mode you can change the type and the data of the MIDI message associated with each piano-like button. Also you can assign each piano-like button to any computer key. In edit mode you can also assign an incoming MIDI note-on or program-change message to a piano-like button, in order to allow remote control of each button of the virtual keyboard.
In show mode you can view the parameters (message type, message data and the computer key assigned to that button) assigned to each button.

Notice that snapshots can be linked to each piano-button being in all three modes,  by simply dragging snapshot buttons of a slider/joystick panel  with the right mouse button, and dropping them to any piano-like button of the virtual keyboard panel.

Each  piano-like button has an index.
Notice that indexes are the main points of reference of virtual keyboard panel configuration.

Play mode

To play the virtual keyboard as a piano you must set its panel to play mode. Play mode is the normal mode of the virtual keyboard panel. In this mode it is possible to click the piano-key-like buttons  in order to play notes or to send some MIDI voice messages to Csound or any MIDI instrument connected to a MIDI port.
Each button has an index, starting with zero. Indexes, not buttons, are the points of reference of each single key configuration. Notice that there are 192 piano-key-like buttons, but the total number of indexes available is 960. To access to all indexes available, you can add an offset to the index reference of each piano-key-like button; you can do that by clicking to any of the 'keys to visualize'  radio-buttons (see picture below):
.

You can also define an offset manually by typing it directly to the 'index offset' text-box and clicking in another zone of the panel.
You can play glissandos with the mouse by pressing the 'CTRL' key instead of the left mouse button as normally.
You can enable/disable the sustain-pedal on all 16 midi channels by pressing/depressing the 'ALT' key or by clicking the 'sustain' check-box.
The two vertical sliders on the right of the piano-buttons can add a global offset of the first and second data-byte of each midi-message. So if messages are note-on messages, you can change the note-number (i.e. the first data-byte of that message type) or the velocity (i.e. the second data-byte) of all keys at the same time.

Edit Mode

To edit a piano-key-like button, select the 'edit mode' radio button.
Then click to a piano-like button. You can see the data in the text boxes of will change (see the picture below).

Notice how the number inside the 'index' text-box (that with yellow background) changes. The number you see in this text-box is the index number of the last piano-like button pressed. You can edit the indexes greater than 191 by clicking to any of the 'keys to visualize'  radio-buttons (see play mode). To modify the parameters of current index, fill the data text boxes: you can change the MIDI channel, the first and second data byte according to your needs. Also you can choose the midi-message type you want to be assigned to that index. To do this you must select one of the midi-status-byte radio-buttons. Notice that you can also disable the present index. In this case the corresponding button will not sent any MIDI message.
To test current index setting, simply click to the 'current message output test' button ().  

You can assign a computer-keyboard key to current index. To do this put the focus in the 'key shortcut' text-box and type a key on the computer keyboard. You will see an ascii value appearing inside the 'key shortcut' text box.

You can assign an incoming MIDI note-on and/or program-change message to an index; in this case, when the MIDI message is recognized by VMCI, the corresponding index will be activated. To assign an incoming message you have to open the "Keyboard remote MIDI configuration" dialog box by clicking the corresponding button (). To assign a message to current index you have to fill the corresponding white text boxes of "Keyboard remote MIDI configuration" dialog box (see below):

A faster way to assign a MIDI message to current index is to send it directly to the VMCI MIDI in port by means of a remote controller such as a MIDI master keyboard.

In order to save edited parameters of current index to memory, you have to press the 'apply values to current index' button.
There is also a faster way of saving the parameters of current index and switching to previous or next index at the same time: click one of these two buttons:
.
Pressing one of these buttons both store the last edited parametrs and switch to previous/next index.

Show mode

The 'show mode' is used only to view the configuration parameters of each piano-key-like button. In this mode, a computer-keyboard key can be pressed to see how current configuration parameters will change.


Using VMCI converter

[Image]

VMCI converter is a little application provided in order to convert setup files created with old versions of VMCI to VMCI plus format, as VMCI Plus cannot read .stp files directly. Notice that the file extension of old setup files is .stp whereas the new extension is .stp2.

The use of this little program is very simple.  To start the program, double-click the executable file icon (VMCI Converter.exe)  or an eventual  shortucut you create. Once the program is started, simply drag/drop the .stp file you want to convert to the program window and to press the "Save in stp2 format" button. A file of the same name, but with extension .stp2 will be created in the same directory of the source file.

You can also change the pathname of the .stp2 file before saving it, by editing the "Converted file:" text box.

As VMCI converter always generates eight panels in the newly converted file, it is suggested to delete the eventual unused panels after loading the .stp2 file, then you can save the modified file with the same name, replacing the redundant file.


Copyright and Magic Code

The this program is copyright shareware, it is not public domain.

VMCI Plus is not a free program (previous versions of VMCI are free and still available for download). If you intend to continue using VMCI Plus after 90 days of evaluation, you must register it.

NB. The demo version will stop to run after the trial period has been expired (90-days).

You can copy the unregistered version of the program and give it to your friends or to any other person as long as for no charge. This program cannot be distributed in shareware compilations CDs without prior written approval from the author.

No responsibility is taken for any damage or losses caused by this package.

All program trademarks belongs to its respective author.

Csound is copyright of MIT, and is not included in the package. DirectCsound version can be downloaded separately at the following URL:

http://www.tiscalinet.it/G-Maldonado/download.htm

Registering

The key-code will be communicated to all people who register the program. To receive the key-code you must send to the author your complete name. He will send you the key-code as soon as he receives notification of the payment.

See the included register.txt file to get more information about registering.

Notice that now you can register with the credit card (VISA, MASTECARD, AMERICAN EXPRESS, DISCOVER) via Internet secure transaction at this URL

https://www.regnow.com/softsell/nph-softsell.cgi?item=2859-1

Important

When you receive the key code you have to fill the dialog box opened by clicking the "About - Set Registration Key" menu. You must put your exact first and family name. The string containing your name is linked to the key code, so, if you type an incorrect name, the magic code will not allow to switch to Registered mode. Uppercase letters are significant. After typing name and key-code, you must close and restart VMCI Plus in order the key code have effect.

You can send any question to the following email address:

g.maldonado@agora.stm.it

or

g.maldonado@tiscalinet.it

and you can get the latest version of this program at my WEB site:

http://web.tiscalinet.it/G-Maldonado

Acknowledgements

Special thanks to Hubert Winkler, for allowing the inclusion of his Hubi's loopback in this package

Many thank to all the Csound crew
(starting from its author Barry Vercoe):
Mike Berry
David Boothe
Richard Boulanger
Eli Breder
Michael Casey
Michael Clarke
Perry Cook
Sean Costello
Richard Dobson
Mark Dolson
Dan Ellis
Rasmus Ekman
Tom Erbe
John ffitch
Bill Gardner
Matt Ingalls
Richard Karpen
Allan Lee
David Macintyre
Jean Piché
Marc Resibois
Hans Mikelson
Paris Smaragdis
Greg Sullivan
Robin Whittle

Many thanks to Riccardo Bianchini for the suggestions about how to implement some stuff.