Virtual MIDI driver for Windows 7 up to Windows 10, 32 and 64 bit with the ability to dynamically create and destroy freely nameable MIDI-ports.
The necessity for virtualMIDI came along when I implemented my rtpMIDI-driver. Later I also used this driver when I created loopMIDI for people who only need simple loopback MIDI-ports.
I had some pretty specific requirements:
• Compatibility from Windows XP to Windows 10
• Both 32bit and 64bit operation
• On-the-fly creation (and destruction) of freely nameable virtual MIDI-ports
• Only one side of the ports was supposed to be visible to the public
• The other side only visible via a private interface
• Multi-client-capability
Cantabile is the best way we know to play VST instrument and effect plugins in real-time. With incredible MIDI routing capabilities, whether you're practicing in your basement or rockin' the stage we're sure you're going to love Cantabile. A VST Host designed for serious live performance Flexible live MIDI routing capabilities.
Since I had been hanging around on the wdmaudiodev mailinglist for quite some time due to my interest in kernel-streaming, I had already read quite a bit on the topic over there.
- I'm very new to Linux/Ubuntu but also very happy with it. If I can get my midi keyboard working through a virtual machine there is no need for me to go back to windows. Any advice would be appreciated.
- At this point, you should be able to play notes from either your external MIDI controller or from the virtual piano GUI (the GUI works even if you don't have an external controller). From the Keyboard GUI you can select different instruments (see Program ).
- Mamba is a Virtual MIDI keyboard with some extended, unique features.
- PyMIDIK is a simple MIDI keyboard emulator for Linux/evdev. Simply supplying an input device (/dev/input/eventX) as a command line parameter will launch PyMIDIK and create a MIDI output device. However, it is probably easier to use the -o option to connect to an existing MIDI input device.
All of the people there suggested to use the DMusUart and the MPU401 sample as a starting-point. So that's what I did and creating the actual driver had been not too hard after getting enough insights at the WDK-documentation.
Nevertheless all the stuff people had done prior to my attempts would not quite achieve what my requirement were.
All of those other virtual MIDI miniport driver implementations actually developed simple static 'loopback' MIDI-ports. Loopback meaning that both ends of this port would be public. Static meaning that the number of ports and their names would be fixed at install-time of the driver (via the inf-file of the driver).
This was not satisfactory, so I looked some more and I found references to dynamic creation of sub-devices. But this was a hard nut to crack. Finally I had been able to locate a guy who was doing something similar for a virtual soundcard-driver for digital-audio-broadcast. Keyboard synthesizer program.
His insights have been invaluable. It still took quite some time to get everything going smoothly, but I finally succeeded in creating this driver.
One problem remained: Since Microsoft introduced Vista, all drivers for 64bit need to be code-signed. Though the idea itself is pretty nifty – to know the specific company that the code running in the kernel comes from – it had a severe drawback:
Only companies incorporated could apply for such a code-signing-certificate. Many people in the driver-development-community urged Microsoft to rectify this. And finally in May of 2010 it has been done. Since that time it is also possible for individuals to get their own code-signing certificate to be able to run their drivers on the 64bit versions of Vista and Windows 7.
Linux Virtual Midi Keyboard Layout
The driver is currently part of the rtpMIDI-driver network-MIDI driver and the loopMIDI virtual loopback MIDI cable. But it can be used for other tasks as well.
Free Virtual Midi Keyboard Software
If you have a music-application that needs to create its own freely named MIDI-devices on-the-fly – virtualMIDI is exactly the right tool. I have prepared a small & simple to use SDK with bindings for C/C++, Delphi, Java and C#.