A software MIDI synthesizer for professional use.
Latest commit bae95bc Nov 12, 2018

README.md


A fork of the original BASSMIDI Driver by Kode54, with more features.

F.A.Q.

Was it really necessary to create a complete separate fork of BASSMIDI Driver?

I feel like it was necessary, yes.

Couldn't you just edit the driver on the existing repository?

True that, I could've just done that. But I honestly didn't want to ruin the original driver.
The driver was born back in 2015, when a friend of mine wanted a version of BASSMIDI Driver with higher polyphony, but then I started working on it more and more, to the point where most of the original source code got replaced by mine.
I really didn't want to ruin kode54's original source code, so I decided to create my own repository. (While still giving credits to kode54, of course.)
Oh, and of course, the driver wouldn't be where it is now, without kode54's help from behind the scenes. He helped me a lot with some issues I was having with some parts of his code. (Which I eventually replaced, but still.)

Do you feel like your driver is complete now?

Tough question... I honestly have no idea. I mean, there's always room for improvement.
But I feel like I have nothing else to add to it at this point, I'm literally out of ideas.
If you're a programmer, and you have some ideas on how to improve or expand the driver's functionalities, please hit me up or send a pull requests with the edits.

Ok ok, enough of your story... What's so special about your driver that makes it different from the others out there?

Good question. The driver has unique features, such as:

  • Automatic rendering recovery. The driver will always try to give you the best audio quality, no matter what MIDI you're trying to play.
  • Spartan user interface, no "fancy graphics" which can distract the user from the original purpose of the driver, and designed for people who aims for features more than for style.
  • The ability to use up to 4 cores/threads, to ensure each function is executed at its best. Each core hosts a vital part of the driver: The first thread hosts the settings loader, the debug info writer etcetera, the second hosts the MIDI event parser, the third hosts the audio render and the fourth hosts the ASIO driver (When using the ASIO angine).
  • Constant updates, to keep the driver fresh and always up-to-date to users requests.

It's meant for professional people who wants a lot of settings to change almost every behaviour of the program.

What do you mean by "for professional use"?

I'll be honest, when I programmed the interface of the driver, I made it to make it familiar for DAW experts or people who know how to use advanced programs.
I've seen newbies getting angry at me after changing one settings, complaining that the driver kept crashing their apps while they were playing MIDIs/working on projects.

If you want something easy to use, I strongly recommend VirtualMIDISynth 2.x by Claudio Nicora.
His driver is definitely more stable than mine, and it's easier to use too. Go check it out.

How can I get rid of the annoying SmartScreen block screen and stop Chrome from warning me not to download your driver?

You can install my self-signed certificate by using the two files here: https://github.com/KaleidonKep99/OmniMIDI/tree/master/InstallCert
I made the sign myself, no one has the original key except me. So you can trust add it to your trusted certificates by using the small installcert.exe utility.
Make sure that KeppyCert.cer is in the same folder as InstallCert.exe.

Can I use your program's source code for my program?

Sure, as long as you follow the LICENSE.

I'm here just for the WinMM patch. How can I get it without downloading your driver?

Aw, do you have something against it?
Aight, here is the version without the KDMAPI. Click me for the direct download

Can you make a WinMM patch for other drivers too?

I am definitely planning a patch for VirtualMIDISynth, but I don't know about other drivers.

Reviews

Gingeas, famous YouTuber who uploads Black MIDI videos:

"Extremely high utility driver.
I believe that you can make good audio with any driver (even TiMidity and BASSMIDI), but the driver changes the effort needed.
I could spend 30 min - 2 hours making perfect audio in BASSMIDI that can be done with OmniMIDI in maybe 5 - 20 minutes due to its streamlined efficiency as well as its tools.
Even though OmniMIDI by far has the highest performance out of all drivers I've used, the big selling point to the synth is the utility from its tools, such as the debug window and the SoundFont manager system."

Frozen Snow, Professional Composer and Arranger for animation, games and video:

"A one of a kind workflow enhancing, lightweight and feature packed synthesizer that helps me focus on creativity.

On the surface, this synthesizer is a fantastic performer for beginners and the more demanding users. It allows for fast Black MIDI and Transcription playback with High Quality Soundfonts. However, delving deeper, as a content creator, who works with MIDI data a lot, on a deadline, you'll find that this is more than your average synth. Allow me to explain why.

Having something that can help me focus on creating without having to switch outputs constantly is really important. especially when you work with multiple instances of various DAWs and sometimes a MIDI player all at the same time. My workflow usually consists of routing all my MIDI channels to plugin VSTs; for handling MIDI events like mod wheel etc better. Having big sample libraries and VSTs can sometimes take a big chunk out of my time, which slows me down. Having a sound ready to go from that MIDI channel, on a per app basis, with different soundfonts to suit my particular need for that program, may it be Black MIDI, Orchestrations or other, with the efficiency and quality that this synth has, is crucial.

The aforementioned alone, I'd pay gold for. But to top it all off, there's some awesome additional features such as output to WAV, selecting output devices like the ASIO of my audio interface and changing the voice count on the fly directly within its settings, while not requiring an app to close, nor a restart is amazing. The low latency that gets introduced on some VSTs, is nonexistent between not one but all my programs and my devices.

Take all of that, and you get a synthesizer that's a powerhouse for creative freedom allowing me to get my work out to my clients without the hustle of feeling burdened. It's the fastest performing and most feature packed of them all. In fact, I can't get it out of my current workflow at this point anymore, it's a must have for any creator who requires a tool that can aid in compositions, while also packing a bucket load of extra stuff. Whenever it's simple MIDI playback or full-fledged composing, this synth pulls it off."

Info about the driver

Features compared to other software synthesizers

Click here: Features compared to other software synthesizers

Keppy's Direct MIDI API for developers

You can access the Keppy's Direct MIDI API from here: Keppy's Direct MIDI API Documentation
You can also access the source code for the Windows Multimedia Wrapper here: WinMMWRP on GitHub

Required software for it to work

You need this software installed before attempting to run the setup:

Minimum system requirements for MIDI playback

The minimum requirements for this synthesizer to work are the following:

  • A CPU running at 2.0GHz (With SSE instruction set support)
  • 256MB of RAM
  • Realtek High Definition Audio or better
    (AC97 might work too, but it's really laggy.)
  • Windows Vista SP2 or greater (Server versions are supported too)
    (Windows XP SP3 is supported too, but I won't give technical support for it.)

Recommended system requirements for studio environments

For the best experience, it's recommended to run the synthesizer on a PC with the following specifications:

  • A octa-core CPU running at 3GHz (Ryzen 7 1700 or better recommended)
  • 16GB of RAM
  • Native Instruments Komplete Audio 6 or another dedicated ASIO-capable hardware interface
  • Windows 10 Pro for Workstations
  • Alternative MIDI Mapper and Windows Multimedia Wrapper for DAWs (Both included in the driver's configurator, for easy installation)

Requirements for compiling the source code

To compile (and test) the synthesizer, you need:

  • Microsoft Visual Studio 2017 (or newer)
  • Inno Setup 5.5.6 (It's recommended to install Inno Script Studio and the Inno Setup Pack)
  • Inno Downloader Plugin
  • Microsoft Windows SDK 7.1A (Windows XP C++ support for VS2013+)

ASIO support details

You can read the lists here: OmniMIDIASIOSupportList folder on GitHub
WARNING: Since I can not test all the ASIO devices available on the market (Mainly because they're not cheap), if you have one, please... Test it with OmniMIDI, then send me an e-mail about it to kaleidonkep99@outlook.com.

Features compared to other software synthesizers

πŸ“ OmniMIDI VirtualMIDISynth 1.x VirtualMIDISynth 2.x BASSMIDI Driver
Easy-to-use configurator βœ”οΈ βœ”οΈ βœ”οΈ ❌
Smaller memory footprint βœ”οΈ ❌ ❌ ❌
Support for Windows XP ❌ βœ”οΈ βœ”οΈ βœ”οΈ
Suitable for day-to-day
music playback
βœ”οΈ* βœ”οΈ βœ”οΈ βœ”οΈ
Suitable for professional
music production
βœ”οΈ ❌ ❌ ❌
Mixer for easy volume
changes per MIDI channel
βœ”οΈ βœ”οΈ βœ”οΈ ❌
Ability to change
channel instruments
βœ”οΈ ❌ ❌ ❌
Real-time debug information
about the audio stream
βœ”οΈ ❌ βœ”οΈ ❌
Only one MIDI out port
with multiple SoundFont lists
βœ”οΈ ❌ ❌ ❌
User has full
control over the audio
stream
βœ”οΈ ❌ ❌ ❌
Updatable without
admin permissions
βœ”οΈ ❌ ❌ ❌
Uses a separate process
for audio rendering
❌ ❌ βœ”οΈ ❌
Able to achieve extremely
low latencies
βœ”οΈ ❌ ❌ ⚠️
Wide choice of audio engines,
from DirectSound to WASAPI
βœ”οΈ ❌ ❌ ⚠️

βœ”οΈ: Supported
⚠️: Partially supported, or implemented in a different way
❌: Unsupported
* Might require some advanced computer expertise


Credits

BASSMIDI driver by Kode54 and mudlord: https://github.com/kode54/BASSMIDI-Driver
HtmlAgilityPack by Simon Mourier: https://www.nuget.org/packages/HtmlAgilityPack/
BASS libraries by Un4seen (Ian Luck): http://www.un4seen.com/
BASS.NET wrapper by radio42: http://bass.radio42.com/
Costura.Fody by Simon Cropp: https://github.com/Fody
Octokit by GitHub Inc.: https://developer.github.com/v3/libraries/