VirtualMIDISynth

warning

Warning, JavaScript is disabled!

JavaScript is not available, maybe because you disabled it globally into your browser settings or you are using an addon like NoScript.

We do not have any dangerous JavaScript running here.
Please enable JavaScript; if you're using NoScript this image will help you adding CoolSoft to your whitelist.

Thanks for your comprehension and enjoy CoolSoft.

VirtualMIDISynth is a software MIDI synthesizer implemented as a Windows multimedia user driver, accessible as a standard MIDI Out device.

It works on Windows XP / Vista / 7 / 8 (both x86 and x64), and is based on the great BASS library from un4seen.

Brief intro

If you are a MIDI/karaoke fan like me, you know that MIDI play quality on Windows systems was not really good out of the box. The bundled "Microsoft GS Wavetable Synth" MIDI Out device is just... ehm... simple: poor samples, mono sound, no effects (reverb, chorus) support.

On 32bits systems some better alternatives exist, like the well-known YAMAHA XG SoftSynthetizer S-YXG50 and Cakewalk-sfz+ (both unsupported now).

Upgrading to an x64 system was a pain for me: S-YXG50 doesn't work at all, Cakewalk-sfz+ was unusable.

Screenshot 1

One day Ian Luck (un4seen) added to his BASSMidi library a great feature: the possibility to render a live MIDI stream, including SysEx messages. I quickly realized that, if only I could intercept that MIDI stream and drive it through Ian's library, well, we would have got a great MIDI Synth.

The challenge was to create a good quality synth and keep the end user away from complicated virtual MIDI chains (ever tried VanBasco -> MIDI Yoke/LoopBe1 -> SynthFont chain ?).

User only needs a new virtual MIDI Out device, select it as output on his preferred player settings and... start playing, nothing more.

Here we are, VirtualMIDISynth is the answer: an user mode multimedia x86/x64 driver that works on XP / Vista / 7 (both x86 and x64), implemented as a MIDI Out virtual device.

Main features

  • User mode multimedia driver, no reboots, no BSOD
  • Directly accessible as MIDI Out device, no need for virtual MIDI cables (like MIDI Yoke, LoopBe1)
  • MIDI mixer to set track mute/volume, accessible through systray icon while playing
  • Compact size (setup is ~750 KBytes)
  • No DLL cluttering, everything is self contained in System32/SysWOW64 subfolder
  • Clean installer, won't affect other MIDI devices
  • Efficient RAM usage (allows using large SoundFonts, > 1GByte)
  • Virtually unlimited polyphony (limited only by CPU)
  • Load up to 30 SoundFonts and chain them
  • Load all of your soundfonts into list and enable/disable them at your will
  • Configure MIDI Mapper default device (this feature is already available in XP, but missing in Vista / 7)
  • Multilanguage dialogs (see here for supported langs).
    If you like to provide a translation for your native language please get in touch)

What now?

Well, having a better MIDI experience is easy as 1-2-3:

  • Download VirtualMIDISynth following the link you find at the bottom of this page and install it (you need administrative privileges)
  • Download a SoundFont (you'll find a list of free high quality files below) and add it to VirtualMIDISynt
  • Run your favourite MIDI application and configure it to use VirtualMIDISynt or, better, set VirtualMIDISynt as your default MIDI Out device (see screenshot below)
  • Donate to CoolSoft ;)
    oops, this step was not mandatory, anyway... thanks for doing it!

Maxime Abbey wrote a really detailed documentation on how to setup and configure VirtualMIDISynth; you can find it here.

FAQ

Why are you still playing MIDI files? Have you ever heard of MP3?
Well, first because MIDIs are cool and compact; in a few megabytes you can store thousands songs.
Second, I love Karaoke; VanBasco is one of my preferred MIDI/KAR players.
Third, with MIDI you can silent some tracks, change tempo and pitch easily.

I tried playing a MIDI file on my PC, and it sucks!
I agree, that's why I wrote VirtualMIDISynth!
MIDI only contains "instructions" on what should be played: instruments, notes, their length, power and so on. It's up to the synthesizer to generate sound from these "commands".
The bundled Windows synthesizer, "Microsoft GS Wavetable Synth", is the worst.Screenshot 1

Which players work with VirtualMIDISynt?
VirtualMIDISynt works with Windows Mediaplayer and MPlayer classic. Since these players cannot change their MIDI out device, you must set VirtualMIDISynt as your default device.
I suggest you to try VanBasco player, which is one of the best MIDI/KAR players around.

How much does it cost?
VirtualMIDISynt is freeware, you can use it as you like.

Why are you releasing it for free?
Because the greatest part of MIDI synthesis is done by BASS libraries from un4seen; I only wrapped them in a Windows driver and gave them an easy to use interface.

That's great, how can I thank you?
Send me a comment and tell about this software to your friends / forums / social networks.
You could also support its development with a donation.

--> See more FAQs here.

License

VirtualMIDISynth is freeware, use it as you like.
Donations are welcome.

SoundFonts

Here you'll find a list of some free and quality SoundFonts available on the net.
Please let me know if I miss something or if some link dies...

Some fonts are compressed with sfArk or sfPack.
This page contains links to decompressors: http://woolyss.com/chipmusic-soundfonts.php#compressors

FREE

DONATION

Troubleshooting

If you're experiencing problems using VirtualMIDISynth, here's a list of common issues already solved.
Please check all of them before contacting me.

References

Links to sites that talk about us:

Version history 

v.1.8.1 - 2013-04-22

  • NEW: Added Portuguese (Portugal) language (thanks to Gonçalo Ferreira)
  • FIX: Fixed a bug with DosBox (and maybe other MIDI Clients) that caused crashes and hangs during play
    (many thanks to "drivetheory": sending me saved games and instructions on how to reproduce the bug was a great help, really appreciated)

v.1.8.0 - 2013-03-30

  • NEW: Added Windows Media Player default MIDI device setting (see here for details)
  • NEW: Vietnamese language (thanks to MyNa VN)
  • NEW: Danish language (thanks to Heine Svendsen)
  • NEW: Czech language (thanks to Vaclav Muller)
  • NEW: Improved update checker messages
  • FIX: Clicking on hotkey balloon error will now open the configurator shortcut keys tab
  • FIX: Hotkey balloon error will now show the shortcut that can't be created

v.1.7.0 - 2013-02-07

  • NEW: Polish language (thanks to SuperGod)
  • NEW: Indonesian language (thanks to Latiful)
  • NEW: Swedish language (thanks to Magnus Johansson)
  • NEW: Added support for GM/GM2/GS/XG instrument names, now correctly shown on MIDI Mixer
  • NEW: Added an activity indicator on each MIDI channel, useful to quickly see which channel is actually playing
  • NEW: MIDI Mixer can now be moved by clicking (and dragging) anywhere on it
  • NEW: Added support for MIDI running status bit (some players call it "redundant MIDI data")
  • FIX: Fixed a small memory leak in Mixer drawing functions

v.1.6.3 - 2013-01-10

  • NEW: German language (thanks to Markus Stein)

v.1.6.2 - 2012-11-24

  • NEW: Japanese language (thanks to yukinodsyouid)

v.1.6.1 - 2012-11-01

  • NEW: Russian language (thanks to Boris Petrov)
  • NEW: French language (thanks to Aziz Lallouche)
  • NEW: Spanish language (thanks to Pedro López-Cabanillas)
  • FIX: Fixed BASS initialization in case of already initialized BASS library
  • FIX: Language files are now UTF-8
  • FIX: Better language file memory management
  • FIX: Soundfont listbox doesn't enable Apply button on checkboxes state changes

v.1.6.0 - 2012-10-21
VirtualMIDISynth is now multilanguage, English and Italian for now.
Dialogs and messages can be easily translated into other languages. If you like to help
in translating VirtualMIDISynth into your native language please get in touch at
http://coolsoft.altervista.com/contact

  • NEW: Multilanguage setup, UI dialogs and messages
  • NEW: Option to select language into configurator
  • NEW: Configurator Soundfont chain list items now have a checkbox to allow disabling them while keeping on the list
  • FIX: Increased soundfont list count limit to 30 elements
  • FIX: Increased configurator dialog width to better accomodate translated strings
  • FIX: Added accelerator keys to dialogs

v.1.5.0 - 2012-09-29
Most of VirtualMIDISynth features can now be controlled by PC keyboard.

  • NEW: MIDI Mixer keyboard shortcuts:
    (selected channel has its number underlined)
    LEFT/RIGHT => move selection to left/right
    0          => select master channel
    1..9       => select channel 1...9
    CTRL+0..6  => select channel 10...16
    UP/DOWN    => increase/decrease channel volume
    HOME/END   => quick set volume to max/min
    M          => toggle mute state
  • NEW: VirtualMIDISynth keyboard shortcuts:
    CTRL+ALT+M       => show/hide MIDI Mixer
    CTRL+ALT+SPACE => MIDI panic (note off to all MIDI channels)
  • NEW: Increased max notes limit to 500
  • NEW: Updated BASS library to version 2.4.9.0
  • NEW: Updated BASSMIDI library to version 2.4.7.9
  • FIX: Optimized MIDI Mixer memory usage

v.1.4.0 - 2012-07-20
Lot of new features and fixes in this (long waited) first release of the 1.4.x series.

* DRIVER *

  • NEW: Added support for 64bit MIDI client applications (on 64bit OS)
  • NEW: Better compatibility with BASS based MIDI clients, like Karafun and Synthesia
  • NEW: Default systray context menu item is now mixer which can be opened by double clicking icon
  • FIX: Increased sound buffer efficiency and better threads management

* CONFIGURATOR *

  • NEW: Rewritten configurator with a new tabbed interface; now it could contain the new options in a more clean GUI
  • NEW: Lot of new settings added:
    • "advanced" settings to reduce CPU requirements disabling some features (like effects, polyphony, ...)
    • output audio device selection
    • automatically open MIDI Mixer while playing
    • raise MIDI player process priority to "High priority"
    • enabling audio hardware mixing
    • audio output buffer size (default 250ms)
  • NEW: Option to preload the whole soundfont file into memory before play (enabled by default). It increases the required memory and adds a small delay at start, but also gives a smoothest play because samples are already available in memory.
  • NEW: Horizontal scrollbar into soundfont list to allow reading long filenames.

* MIXER *

  • NEW: Better loking mixer VUMeter bar, it now appears like a LED stripe
  • NEW: Mixer level meter now shows the running average of output level instead of the instant value, making it more realistic and "analogic"
  • NEW: Increased channel name font size and enabled cleartype drawing

v.1.3.1 - 2011-12-10

  • NEW: Post setup actions are not preselected by default.
    "Show readme.txt" option has been removed and this file is now shown during into setup (while still available through Start menu link).
    "Run configurator" and "Open website" checkboxes are blanked if a SoundFont is already configured.
    Clickthrough users should now be happier during updates.
  • FIX: Fixed updater code causing VirtualMIDISynth device to disappear on some localized WinXP versions.
    (thanks to user "exit" from kvraudio forum who helped pointing out compatibility issues under his localized XP)

v.1.3.0 - 2011-10-25

  • NEW: Added update check feature; you can configure VirtualMIDISynth to automatically check if an updated version is available.
    Default check frequency is 14 days (can be changed with configurator). If an update is available, a balloon notification appears on systray when VirtualMIDISynth is loaded (but no more than once a day).
  • NEW: Mixer window position is now clipped to the nearest screen, avoiding it to open out of screen when switching from dual-screen config to single.
  • NEW: Updated bassmidi.dll to version 2.4.8.
  • FIX: Fixed an important memory leak on Mixer window that causes hosting process memory to continuously increase when the Mixer is shown.
  • FIX: MidiMapper now creates the whole registry path if not exists.
  • FIX: Configurator now checks if another instance is running.

Download

Latest stable version included languages: English, Italian, French, Spanish, German, Portuguese (Portugal), Russian, Japanese, Polish, Swedish, Indonesian, Vietnamese, Danish, Czech.
If you like to help translating into your native language, please get in touch.

VirtualMIDISynth automatically notifies its updates (if enabled), otherwise you can subscribe here for being notified about them.

CoolSoft_VirtualMIDISynth_1.8.1.exe
Description Stable version
Release date 2013-Apr-22 SHA1 ad96bd706031feef586954c71b240a5f2d0ed211
Size 840,174 bytes MD5 138c6730dd78e4ff9afaa85625de80cc
CoolSoft_VirtualMIDISynth_1.8.0.exe
Description Previous version (unsupported)
Release date 2013-Mar-30 SHA1 cb78916883a90436215a3013b307797d1a82f281
Size 835,999 bytes MD5 1d46d2a128022127a41e3a15da3d026b

Comments

Pages

Hi there, I finally did the tests you asked me to do. I must admit that I made a mistake earlier (I must have gotten confused because I had trouble figuring out why MUNT can't be installed and things got a little messy).

You were right: VirtualMIDISynth did automatically choose midi2 when midi1 was already taken by MUNT.

Sadly the MUNT installer is not quite as clever. It seems to always choose midi1 and report an error if it's not empty or set to wdmaud.drv. Earlier versions report that the installer is unable edit the registry, the current version (1.2.0) reports that there is no free MIDI slot.

So obviously you did everything right, the only thing you could do to increase compatibility with other MIDI devices is automatically skip midi1 and always choose a higher one but that's hardly the right thing to do, it's the MUNT guys who have to rework their installer. I will see whether I can somehow report this to them and suggest the necessary changes for the next release. Anyway, thanks for your reply.

Thanks for your tests, and thanks also for reporting them back here.
I'm glad it's all working right on my side; as you said, skipping midi1 and searching a free slot from midi2 is not a good idea.

I hope MUNT guys can fix their installer easily and make it more "clever".
Feel free to link this discussion if it could help making your request clearer.

ciao, volevo chiedere come mai a volte le note vanno in feedback, o panic. da diverse versioni precedenti anche. col bassmididrv non succede mai. grazie dell aiuto.

Ciao, come vedi un'altro utente ha segnalato un problema simile 2 commenti più indietro.
Non ho però altre segnalazioni di questo difetto, quindi avrei bisogno di qualche informazione in più.

Puoi darmi quelle informazioni?

Hi,

When more than one program (or the same program multiply running) use the VirtualMIDISynth, it says :
An error occurred while creating shortcut...

Is this solvable?

Consider it a warning: VirtualMIDISynth is only warning you that it can't create that shortcut because another software (or VirtualMIDISynth itself) is already using it.
All other VirtualMIDISynth features will work correctly.

To disable the message you must disable the whole hotkey (open VirtualMIDISynth configurator, shortcuts tab, press DEL into the two shortcut keys selectors).

One more important feature: what about ASIO support? ))

ASIO support is already on my TODO list, scheduled for next 2.x version.

Working with Windows 8.
The Windows GS Wavetable Synth is locked.

How to unlock and choose CoolSoft VirtualMIDISynth?

Sadly this is not possible, the MIDIMapper device has been removed completely.
You must use a MIDI player that allows MIDI device selection.
I'm going to write a blog post with my findings about this.

As a workaround, next VirtualMIDISynth version will have an option to set the default MIDI device for Active Movie based players (like Windows Media Player, Media Player Classic, ...).

Thanks for fast reply

Just added a blog post with my findings about Windows 8 MIDI.

Hi again. I hope you're not yet getting tired of my comments. o.o

I'm wondering about one thing, it's concerning the inability to change SoundFonts while an application is using VirtualMIDISynth. I haven't ever taken a deep look into how virtual MIDI synthesizers work exactly myself, so this is only speculation.

I test a lot of different possible configurations, partially in order to find out what DOS games sound best with what kind of configuration, partially because I'm doing research on soundcards from the DOS times as well as the ability to emulate their characteristics via SoundFonts (also I want to eventually develop my own SoundFont specifically for boosting the audio experience of the best games of the DOS era - I've actually made my first steps in this direction, already). Anyway, that kind of experimenting/comparison of different SoundFonts would obviously be much easier if I didn't have to stop playback in mediaplayers or fully quit applications like DOSBox. So I'm wondering whether there's something you could do to allow this.

I understand that it's not possible to use the MIDI Mapper to change the MIDI device during playback, however, shouldn't it be possible to at least change the SoundFont? I'm aware that applications wait for some kind of response from VirtualMIDISynth during initialization but the way I get it VirtualMIDISynth should be able to say mute the music, load a new SoundFont and then continue playing it without interrupting the communication with the application or pausing that one (pretty much the way DAWs like Cubase behave when loading new soundbanks for the VST plugins currently playing). As far as I know applications do not need constant responses from the MIDI device so I can imagine that this should be possible.

The way I get it the inability to change the SoundFonts during playback is related to the fact that the VirtualMIDISynth's configuration tool is generally not allowed to do any changes to the behaviour of the VirtualMIDISynth MIDI device once that one has been initialized. However, couldn't there be another way for switching the SoundFont during playback like say through VirtualMIDISynth's mixer?

I can imagine that my use of VirtualMIDISynth is not what you had in mind when developing this tool and that people like me aren't your target consumer but well, I'm confident that a fair amount of users would appreciate that kind of functionality and in fact more people might start using VirtualMIDISynth due to this.

Regards
F4LL0UT

Soundfont change while playing is not possible because soundfont selector (VirtualMIDISynth_configurator.exe) and MIDI synthesizer (VirtualMIDISynth.dll) are two separate processes (the latter DLL will live into MIDI player .exe process). So there's no easy way for the configurator to tell synth to load a different soundfont.

Next 2.x version of VirtualMIDISynth will have this option, because the synth and configurator components will be joined into the same process.
See FAQ #5 for further info: http://coolsoft.altervista.org/virtualmidisynth/faq

Thanks for the reply. And yeah, that's pretty much what I meant. Awesome stuff.
I'll make a donation soon since a project like this really deserves to be supported. :)
Keep up the good work!

So che altri utenti ti hanno gia' chiesto di risolvere questo problema, ma l'effetto riverbero è troppo eccessivo.

Puoi per favore:

  1. mettere anziché il segno di spunta, un potenziometro, come quello presente in xmplay?
    Il percorso per visualizzarlo in xmplay è il seguente:
    - tasto dx sul display di xmplay;
    - options and stuff, Plugins, Input;
    - Midi rev.12, config (questo plugin va istallato precedentemente per l'ascolto midi)
    - Mixer
    - Reverb level (che è appunto----> il potenziometro di cui ti parlavo)
  2. se non puoi far niente per quanto richiesto al punto 1, puoi almeno ridurre l'effetto una volta spuntato?

La cosa è un po più complicata e ci sono diverse "difficoltà":

  1. La libreria BASS, durante l'inizializzazione, mette a disposizione un parametro che permette solo di ignorare la gestione di chorus e riverbero, non di regolarne l'effetto.
    Quindi si può escludere del tutto l'azione di questi due controller MIDI oppure attivarli. Lo scopo è quello di risparmiare CPU.
    Per fare quello che chiedi bisogna intervenire sul flusso MIDI in ingresso, intercettare i messaggi dei controller riverbero (MIDI controller 91) e chorus (MIDI controller 93) quindi modificarne il valore in realtime.
    In pratica se tu imposti il 50%, quando il tuo MIDI chiede di mettere il riverbero a 120 (la scala è da 0 a 127), VirtualMIDISynth intercetta la richiesta e la "corregge" a 120*50%=60.
    Non è impossibile, ma non si tratta solo di impostare un valore.
  2. Il configuratore (dove attualmente c'è l'impostazione per spegnere riverbero e chorus) è un programma separato dal driver (la parte che "suona" e che mostra il mixer).
    Per questo motivo ogni cambiamento della configurazione richiede il riavvio del MIDI Player (e di conseguenza del driver).
    Se mettessi il potenziometro nel configuratore, soluzione più semplice, non si potrebbe regolarne l'effetto dinamicamente ma bisognerebbe andare per tentativi.
    Metterlo nel Mixer significherebbe trovargli uno spazio e una grafica adatti.

Ci dò un'occhiata...

Hi, does someone know if it's possible to change the configuration of CoolSoft virtualMIDIsynth by code/script and not in the GUI?

Thanks

Hi there,
VirtualMIDISynth stores its configuration into an INI file: ...\system32\VirtualMIDISynth\VirtualMIDISynth.conf (or ...\SysWOW64\VirtualMIDISynth\VirtualMIDISynth.conf on 64 bit systems).

Please consider that configuration file is read on VirtualMIDISynth startup (and updated on close), so if you're going to change mixer levels at runtime you're out of luck... ;)

The possibility to change one instrument with another in realtime, I make an example...

I play midi file with 5 instruments and i need to change only "Pianoforte" with "Organ" or change all instruments with only "Organ"

I think that there are other person that would like this.

Thanks for you work.

This kind of feature is already scheduled for 2.x version.
Implementing it into 1.x is a huge work, because the configurator and the synth are two different processes and there's actually no way for them to easily communicate together.

That's why each configuration change requires a restart of VirtualMIDISynth client (your MIDI player).

Hey. I have been using VirtualMIDISynth for all my MIDI music and I must say it is an impressive product. But one thing that urks me is the lack of some sort of "Synth Volume Control" setting. This would really come in handy for some soundfonts that are quieter than usual.

Also, I have a problem when I play old games that use MIDI music. On some tracks of, let's say Duke Nukem 3D and Doom, a small portion of the tracks are downshifted in pitch. I was wondering if there was anyway this could be resolved. I am running Duke Nukem 3D under Windows 7 under the eDuke32 source port and Doom under the ZDoom source port.

Adding a gain control for each loaded soundfont file is already on my TODO list, but scheduled for next 2.x versions.
I'll see what does it mean beckporting it to 1.x series...

As for the downshifted pitch I think you could try to solve it with a MIDI processor tool loke MIDIOX.
Put it between MIDI client (your game) and MIDI device (VirtualMIDISynth), then configure it to change MIDI stream pitch.

 

MIDI out setter - MIDI Mapper
http://www.codeproject.com/Articles/36315/MIDI-out-setter

Thanks for VirtualMIDISynth!

The best virtual midi port I've ever used to trigger my soundfonts.
Truly amazing!!!

jazmangmpro24-bitsoundfont.blogspot.com

 

 

Hi,

When a GM / GS reset is sent, what are the default reverb, chorus values that CoolSoft uses? I'd like to try and match the SC-55 settings (Roland VSC uses 40,0) when using Sound Canvas imitation soundfonts.

And thank you for the superb quality synth!

MIDI_EVENT_REVERB_LEVEL = 100
MIDI_EVENT_CHORUS_LEVEL = 100
MIDI_EVENT_REVERB = 0
MIDI_EVENT_CHORUS = 0

See here for values meaning: http://www.un4seen.com/doc/#bassmidi/BASS_MIDI_StreamEvent.html

Pages

warning

Warning, advertise blocker detected!

Advertising images can't be shown, probably due to an advertisement blocker plugin installed into your browser (like Adblock Plus for Firefox or Simple Adblock for Internet Explorer) and/or JavaScript disabled.

CoolSoft is supported by donations and a few (and non-intrusive) banners.

Please disable ad blocking for this website and enable JavaScript. If you're using Adblock for Firefox, this image will help you adding CoolSoft to your whitelist.

Thanks for your comprehension and enjoy CoolSoft.

Close chiudi