1997 - 2003
All rights reserved


VMIDIJoY screenshot

Click on the image to download 2.6.2

[New features] [Join updates mailing list]



Current release [usb only]: 2.6.2 date: 22 April 2003 [1348kB][download 2.6.2]

Older release [analog joys]: 2.1.4 date:  2001 [163kB][download 2.1.4]

UPDATES: This program is still occasionally in development - please send me all your ideas for improvements (and bug reports)! If you want updates, there is a VMIDIJoY mailing list on yahoo:

Subscribe to vmidijoy

The list is currently a low volume, unmoderated, free-to-join list, but at the first hint of spam the defences will go up.

Overview: Converts joystick X and Y (and Z if you have it) movement into any of the MIDI continuous controllers, and you can define the fire buttons to be MIDI pedals, or trigger notes, or activate a few other functions. Axis range and polarity can be specified, and "arpeggiation" series of pitch/velocity pairs may be set up for use with note triggering. Good for people like myself who don't have a fancy keyboard plastered with neo-faux-analogue twisty knobs and sliders.



  • When you run the program for the first time, it will say "bank file not found". This is ok on your first use - the program will generate a bank file saving all your settings automatically when you quit.
  • The "SAVE" and "LOAD" buttons refer to the CURRENT PATCH ONLY. Banks of presets are saved automatically when you shut the program down.
  • The Global button allows access to the MIDI In port selector, the bank setup selector, and preset selectors.

VMIDIJoY Home-built Hardware


A very fine page detailing exactly how to wire up your own joystick-like interface has been written by Tomi Engdahl. Definitely suggested reading!


  • Which pins do I connect my third axis potentiometer to? - The pins used for the second joystick's x axis pot.

Tom's gadget:

Here's what one VMIDIJoY user built to hook up to his joystick ports - a nice big 2-rack unit box with separate knobs for each axis. Note the extra large knob used to control those ever important filter cutoff positions!

A lot of people ask how he got 6 axes going - the answer is with 2 separate joystick ports. This isn't necessary with VMIDIJoY II, since DirectX supports many more axes (Though you might have to hack into the circuitry of a digital joystick if you want to make your own devices).

The newer > 2.5 versions of VMIDIJoY may not work with "Home brew" controllers, as DirectX seems happier with digital joys. I will endevour to put old skool joystick interfacing back in soon! 

Joystick port diagram



  • Version 2.6.2 (22 April 2003)
    Bug fixes:
    • Some list box members were additively enumerated on every window opening.
    • App icons and purple master window background restored
  • Version 2.6.1 (17 April 2003)
    Bug fixes:
    • MIDI In device not opening properly
    • patch inspector not initializing on first open
    • arpeggiator window not tracking patch changes.
  • Version 2.6.0 (15 April 2003)
    Additions / changes:
    • Dynamic detection of joystick
    Bug fixes:
    • Numerous GUI inconsistancies left over from the 2.5.0 Vellocet Foundation Class porting
  • Version 2.14 (11.6.2000)
    Additions / changes:
    • Anti-jitter 'minimum movement' param for each axis.
    • Brought VMIDIJoY's device interaction inline with the VS1 class library
  • Version 2.13 (17.9.99)
    Bug fixes:
    • Axis range initialised to 0-127 again on startup
    • A few minor memory leaks fixed.
    • Arpeggiator editor crashed first time you use VMIDIJoY.
  • Version 2.12 (9.9.99)
    Bug fixes:
    • Not-so-reliable 2.10 joystick detection logic fixed
    • Minimising and restoring main windows - didn't remember win coords
    • Patch change message now updates editor window
  • Version 2.11 (7.9.99)
    Bug fixes:
    • Program crash if no joystick detected.
    • An 8kB memory leak.
  • Version 2.10 (3.9.99)
    Additions / changes:
    • Minimizes to task tray (can start minimized too)
    • Windows remember positions between sessions
    • Enhanced NRP support
    • CC>63 bug fixed.
    • If you have edited a patch, VMIDIJoY will prompt you to save the changes when you shut the program down.
  • Version 2.02 (28.6.99)
    Additions / changes:
    • Right mouse click now minimises VMIDIJoY to a small 'stay-on-top' logo
    • Finished graphics for main window (for moment)
    • Main window refuses to be dragged off screen, where you might lose it.
    Bug fixes:
    • Minor inconsistancies in interface dealt with.
  • Version 2.01 (23.5.99)
    Additions / changes:
    • A MIDI-message LED twinkles when you send a MIDI message. Whey-hey.
    • Always-on-top option in Global options dialog.
    • Most dialogs are now modeless (ie, concurrent)
    • AXIS RANGE NOW 0-127 (MIDI range), not 0-100%.
    • New chunked file format to provide a more future-proof VMIDIJoY.
    Bug fixes:
    • Bank/load save works again. Whoops!
    • Joystick auto-activates with patch changes (if needed) again.
  • Version 2.00 (14.5.99)
    Additions / changes:
    • Direct-X support for up to 6 axis, 8 button joysticks
    • Only one joystick supported for the moment
    • Joystick status view window in patch editor
    Bug fixes:
    • Reverse polarity now works for all axes as it should.
    • Arpeggiator window shouldn't occassionaly crash program anymore.
  • Version 1.53 (5.1.99)
    Bug fixes:
    • Controllers above 31 should now work.
  • Version 1.52 (31.8.98)
    • Arpeggiators can now be synched to the in-port MIDI clock. Holding a button down will auto-arpeggiate.
    Bug fixes:
    • The occasional arpeggiator edit window crash seems to have been nailed.
    • Arpeggiator steps edit control now behaves as you would expect - up arrow increases steps and vice versa.
    • Axis partial range maximum edit window now behaves itself.
  • Version 1.51 (24.8.98)
    • Extra button functions: Song start/stop/continue/position/select messages.
    • Static SYSEX messages can be fired from the buttons.
  • Version 1.50 (20.6.98 - VMIDIJoY) Additions:
    • Dual joystick support
    • New, smaller front-end.
    • Four patch-preset buttons
    • Continuous controllers up to #127 supported (I hope - I can't test that!)
    • Individually assignable MIDI channels for each button and axis
    • Individual arpeggiator sequence for each button
    • Loading/Saving patches
    • MIDI program change messages supported (auto patch changing!)
  • Version 1.10 additions: (MIDIJoY)
    • A simple manually-stepped arpeggiator allows you to choose a short series of pitches and velocities to trigger with a fire button.
    • Z axis support for those with grander joysticks (I'll work on 6-axis support soon!)
    • A button display (How useful? Not sure - help you work out which button is which?)
    • The "active" switch disables joystick polling as well as MIDI now - should be easier to change the control values.
    • Joystick features inspection dialog box.

Need more MIDI ports?


Because this program requires a MIDI out port to send its messages, you may want Hubi's MIDI Loopback Device or MIDIYoke, which are virtual MIDI port device drivers that allows you to connect MIDI programs within your machine.

Author: SKoT