OmniMIDI: A MIDI synthesizer forked from "BASSMIDI Driver" by kode54

Schedules and announcements about program releases.

OmniMIDI: A MIDI synthesizer forked from "BASSMIDI Driver" by kode54

Postby KaleidonKep99 » 2018-11-08 @ 13:09

I've been thinking about making a topic about it for almost 2 years, but I never had the guts of self-promoting it here... But I guess it's time... :depressed:

What's OmniMIDI, you might ask?
OmniMIDI is a MIDI synthesizer based around the BASSMIDI libraries, and a fork (or at least, what used to be) of BASSMIDI Driver (viewtopic.php?f=24&t=27975).
Most of the original source code got nuked in the past 3 years...

What makes it better than the original?
I never liked how limited BASSMIDI Driver actually is. The driver itself is good, don't get me wrong, it works great and performs really well, but...
The configurator is pretty basic to say the least; the only options it gives you are the SoundFont lists editor, the volume and the latency setting... That's about it, as far as I know.

Meanwhile, my fork allows the user to take FULL CONTROL over the audio stream, with settings ranging from the maximum voice count, to how big the events buffer can be, or even overriding the banks/presets of specific channels.

There's also an useful debug window included, which allows you to see how many active voices are being played at the moment (per channel!), the rendering time/CPU usage of the driver, how much memory the MIDI app is using etc...

Features
- Supports Windows Vista and newer (It does work on Windows XP, but the .NET 4.0 configurator is outdated)
- Guaranteed to work perfectly under Windows 10
- Can play up to 100.000 voices at the same time (If your PC is powerful enough, that is)
- Advanced SoundFont chaining/stacking system, which is an improved version of the one from BASSMIDI Driver
- Native support for DirectSound, WASAPI and ASIO
- Can output the audio directly to a WAV file
- All the features from BASSMIDI Driver are present here too (viewtopic.php?f=24&t=27975)

Download
The project itself is open-source, and its code can be viewed and edited by anyone, just like BASSMIDI Driver!
GitHub page: https://github.com/KeppySoftware/OmniMIDI
Grab the latest release from here: https://github.com/KeppySoftware/OmniMIDI/releases

Screenshots
Image
Entire album here: https://imgur.com/a/pM0sL6h
User avatar
KaleidonKep99
Newbie
 
Posts: 9
Joined: 2014-7-11 @ 21:43
Location: Italy

Re: OmniMIDI: A MIDI synthesizer forked from "BASSMIDI Driver" by kode54

Postby Firtasik » 2018-11-08 @ 15:46

Nice! I'll give it a try. :happy:
11 1 111 11 1 1 1 1 1 11 1 1 111 1 111 1 1 1 1 111
User avatar
Firtasik
Member
 
Posts: 447
Joined: 2013-7-21 @ 19:07

Re: OmniMIDI: A MIDI synthesizer forked from "BASSMIDI Driver" by kode54

Postby KaleidonKep99 » 2018-11-28 @ 01:05

I've added support for the MIDI Stream API and Running Status in version 6.0.57.26!
Games such as ZDoom will benefit from this update.

https://github.com/KeppySoftware/OmniMI ... /6.0.57.26
User avatar
KaleidonKep99
Newbie
 
Posts: 9
Joined: 2014-7-11 @ 21:43
Location: Italy

Re: OmniMIDI: A MIDI synthesizer forked from "BASSMIDI Driver" by kode54

Postby bellarmine » 2019-4-04 @ 08:58

Hi Kaleidon,

Thanks for this, it looks good. I downloaded it and am trying it out on an XP SP3 machine.

The interface works fine, but I cannot get the MIDI driver to appear in MIDI devices, so I cannot test it. When I go to Device Manager > Hidden Devices On > Legacy Audio Devices, I see the OmniMIDI driver present but XP says "Cannot load driver - may be missing".

Do you have any suggestions? I would REALLY like to get this working. I have a MIDI keyboard I am trying to play into the computer, and am having a hard time finding a MIDI driver that: 1-Supports SoundFonts; 2-Works in XP, 3-Supports ASIO for smallest latency possible.

Thanks in advance! Bellarmine
When working on a job, you have 3 criteria: Fast, Good, and Cheap (i.e., Quick, High Quality, and Low Cost). Only 2 out of 3 are practical.
User avatar
bellarmine
Newbie
 
Posts: 32
Joined: 2016-2-23 @ 06:52
Location: Ontario, Canada

Re: OmniMIDI: A MIDI synthesizer forked from "BASSMIDI Driver" by kode54

Postby KaleidonKep99 » 2019-4-07 @ 04:27

bellarmine wrote:Hi Kaleidon,

Thanks for this, it looks good. I downloaded it and am trying it out on an XP SP3 machine.

The interface works fine, but I cannot get the MIDI driver to appear in MIDI devices, so I cannot test it. When I go to Device Manager > Hidden Devices On > Legacy Audio Devices, I see the OmniMIDI driver present but XP says "Cannot load driver - may be missing".

Do you have any suggestions? I would REALLY like to get this working. I have a MIDI keyboard I am trying to play into the computer, and am having a hard time finding a MIDI driver that: 1-Supports SoundFonts; 2-Works in XP, 3-Supports ASIO for smallest latency possible.

Thanks in advance! Bellarmine

I will try to restore XP support on later versions of OmniMIDI.
I decided to abandon support for it because of some architectural changes to the SoundFonts list systems, and because .NET 4.5 is not supported on it.
User avatar
KaleidonKep99
Newbie
 
Posts: 9
Joined: 2014-7-11 @ 21:43
Location: Italy

Re: OmniMIDI: A MIDI synthesizer forked from "BASSMIDI Driver" by kode54

Postby DracoNihil » 2019-4-07 @ 19:58

This is kinda why I wonder why people use C# and .NET, what's wrong with just plain ol C or C++? Atleast at that point as long as you're only touching "msvcrt.dll" there's no dependency hell or compatibility issues.

Regardless this does work just fine on modern Windows 10 systems just fine so I'm taking that for granted atleast.
User avatar
DracoNihil
Oldbie
 
Posts: 1281
Joined: 2011-10-09 @ 14:26
Location: Independence, KS

Re: OmniMIDI: A MIDI synthesizer forked from "BASSMIDI Driver" by kode54

Postby KaleidonKep99 » 2019-4-08 @ 11:54

DracoNihil wrote:This is kinda why I wonder why people use C# and .NET, what's wrong with just plain ol C or C++? Atleast at that point as long as you're only touching "msvcrt.dll" there's no dependency hell or compatibility issues.

Regardless this does work just fine on modern Windows 10 systems just fine so I'm taking that for granted atleast.

The first version of the configurator was coded in C++, but it was too hard to maintain so I ditched it and moved to Visual Basic (And then C#).

I'd have to use GCC or an old version of VC++ to target msvcrt, and honestly it's not worth the hassle.
User avatar
KaleidonKep99
Newbie
 
Posts: 9
Joined: 2014-7-11 @ 21:43
Location: Italy

Re: OmniMIDI: A MIDI synthesizer forked from "BASSMIDI Driver" by kode54

Postby bellarmine » 2019-4-09 @ 08:02

Thanks for getting back to me Kaleidon, I appreciate it. Ok, I'll wait with 'bated breath' for now, hope you manage to get to it. Let me know if you'd like a hand beta testing it in XP or Win7 or something. I 'just' upgraded to Win7 on my desktop (not the laptop I use with the keyboard...:o) - guess I'm overdue, just another diehard XP fan lol. Thanks for all the hard work - Cheers! Bellarmine
When working on a job, you have 3 criteria: Fast, Good, and Cheap (i.e., Quick, High Quality, and Low Cost). Only 2 out of 3 are practical.
User avatar
bellarmine
Newbie
 
Posts: 32
Joined: 2016-2-23 @ 06:52
Location: Ontario, Canada

Re: OmniMIDI: A MIDI synthesizer forked from "BASSMIDI Driver" by kode54

Postby KaleidonKep99 » 2019-4-13 @ 21:29

I restored full support for Windows XP in OmniMIDI 6.7.
Link for download: https://github.com/KeppySoftware/OmniMI ... ag/6.7.0.0

EDIT 1:
Here's a video of OmniMIDI 6.6 beta running under XP SP3: https://www.youtube.com/watch?v=9I14uZy7g8k
User avatar
KaleidonKep99
Newbie
 
Posts: 9
Joined: 2014-7-11 @ 21:43
Location: Italy

Re: OmniMIDI: A MIDI synthesizer forked from "BASSMIDI Driver" by kode54

Postby Falcosoft » 2019-4-17 @ 16:50

Hi,
I have tested OmniMidi with the soon to be released FSMP 5.7 and I have noticed a few problems:
1. Real time Midi Clock messages are misinterpreted as Program/Bank Change messages.
In FSMP 5.7 I have implemented sending Midi Clock messages that can be a handy feature e.g. in case of AutoDrum: https://youtu.be/bnTbNi6yPaE
But I have noticed that in case of enabled Midi clocks OmniMidi produces strange Program/Bank Changes randomly. I could also reproduce the problem with other DAWs/Sequencers in case of enabled Midi sync/clock messages. I think instead of processing real time messages they should be simply ignored by OmniMidi since Bassmidi does not support them at all anyway.

2. ASIO buffer size does not only influence audio latency but also Midi timing/precision. Midi timing problems can occur even at reasonable buffer sizes of 20-50 ms.
This problem is definitely Bass/Bassmidi related. I think the problem in case of ASIO output is that there is no independent update period like in case of Directsound/WASAPI but the update period is always corresponds the audio buffer size. This is not a fortunate coupling since it means any buffer sizes above ~5ms can cause noticeable timing problems since all Midi data is buffered and played back at once at each buffer update. In case of OmniMidi maybe instead of user selectable buffer sizes the buffer size (in samples) should be capped at max. Sample rate/100 or something. Or at least a warning should be shown about this problem since audio buffer size affecting Midi precision is not intuitive at all.

3. Channel 10 Transpose option is disabled in all Midi systems but disabling only does make sense in GM mode not in GM2/GS/XG mode ( all of them are supported by Bassmidi).
This is not really a bug but only an unreasonable restriction. The restricted option and its explanation is only true in GM mode. But Bassmidi and thus OmniMidi supports many other modes. On one hand in GS/GM2/XG modes other channels than 10 can also be Drum/Percussion channels on the other hand channel 10 can also be a melodic channel. So at least this fixed channel 10 restriction should be removed, or a more sophisticated method should be applied that restricts only the channels that are actually in drum/percussion mode.
Test file that shows the problem with this fixed channel 10 restriction:
GM2_Ch10_Piano.zip
(219 Bytes) Downloaded 12 times


You can test the 1st issue with the test version of FSMP:
http://falcosoft.hu/midiplayer_57_test.zip

I have made a video about all the issues and in the description part you can find the time codes for the corresponding sections:
https://youtu.be/z3C7wmCdgZw

Bye

@Edit:
The misinterpreted messages problem is a result of a code part in the the BufferSystem.h file:
Code: Select all
BASS_MIDI_StreamEvents(
      OMStream, BASS_MIDI_EVENTS_RAW,
      &dwParam1, ((dwParam1 & 0xF0) >= 0xF8 && (dwParam1 & 0xF0) <= 0xFF) ? 1 : (((dwParam1 & 0xF0) == 0xC0 || (dwParam1 & 0xF0) == 0xD0) ? 2 : 3)

The tests for Program Change and Channel Pressure messages are OK, but the test for the real time messages never satisfies the condition. (dwParam1 & 0xF0) >= 0xF8 can never be true so real time messages will always be 3 bytes instead of the correct 1 byte and this problem can generate ghost messages that can be falsely interpreted as Program/Bank change messages with running status.
User avatar
Falcosoft
Oldbie
 
Posts: 904
Joined: 2016-5-21 @ 13:46
Location: Pécs, Hungary

Re: OmniMIDI: A MIDI synthesizer forked from "BASSMIDI Driver" by kode54

Postby bellarmine » 2019-4-20 @ 06:23

KaleidonKep99 wrote:I restored full support for Windows XP in OmniMIDI 6.7.
Link for download: https://github.com/KeppySoftware/OmniMI ... ag/6.7.0.0

EDIT 1:
Here's a video of OmniMIDI 6.6 beta running under XP SP3: https://www.youtube.com/watch?v=9I14uZy7g8k


Hi Kaleidon, Just posting to say a big THANK YOU for restoring XP support. I'm running v6.7.0.2 in XP right now (going to download your latest revision momentarily), and it works PERFECTLY!! :happy: Finally, a nice simple way to play my MIDI keyboard in XP using ASIO - I've got the latency all the way down to 2.6ms and it sounds great - no more delays when I'm playing keys. I see at GitHub that you're hard at work also fixing all of FalcoSoft's points - you'll get them done I'm sure. It's always such a thrill to me to suggest something and then, due to your hard work, see it happen - must be fun being a programmer. My only claim to fame is fiddling with complex DOS Batch files, still use them to do handy things.

Again, a big THANKS Kaleidon, and Happy Easter! :happy:

Bellarmine
When working on a job, you have 3 criteria: Fast, Good, and Cheap (i.e., Quick, High Quality, and Low Cost). Only 2 out of 3 are practical.
User avatar
bellarmine
Newbie
 
Posts: 32
Joined: 2016-2-23 @ 06:52
Location: Ontario, Canada

Re: OmniMIDI: A MIDI synthesizer forked from "BASSMIDI Driver" by kode54

Postby KaleidonKep99 » 2019-4-20 @ 15:45

bellarmine wrote:
KaleidonKep99 wrote:I restored full support for Windows XP in OmniMIDI 6.7.
Link for download: https://github.com/KeppySoftware/OmniMI ... ag/6.7.0.0

EDIT 1:
Here's a video of OmniMIDI 6.6 beta running under XP SP3: https://www.youtube.com/watch?v=9I14uZy7g8k


Hi Kaleidon, Just posting to say a big THANK YOU for restoring XP support. I'm running v6.7.0.2 in XP right now (going to download your latest revision momentarily), and it works PERFECTLY!! :happy: Finally, a nice simple way to play my MIDI keyboard in XP using ASIO - I've got the latency all the way down to 2.6ms and it sounds great - no more delays when I'm playing keys. I see at GitHub that you're hard at work also fixing all of FalcoSoft's points - you'll get them done I'm sure. It's always such a thrill to me to suggest something and then, due to your hard work, see it happen - must be fun being a programmer. My only claim to fame is fiddling with complex DOS Batch files, still use them to do handy things.

Again, a big THANKS Kaleidon, and Happy Easter! :happy:

Bellarmine

Thank you for your kind words, they mean a lot to me!

Image
Also, I suggest you to use the integrated MIDI input test whenever you want to play your keyboard live, since it uses KDMAPI to reduce the latency added by Windows Multimedia.
I also fixed all the issues reported by Falco at this point, we just have to report the ASIO issue to Ian Luck, the creator of BASS/BASSMIDI.

Have fun with the software!
User avatar
KaleidonKep99
Newbie
 
Posts: 9
Joined: 2014-7-11 @ 21:43
Location: Italy

Re: OmniMIDI: A MIDI synthesizer forked from "BASSMIDI Driver" by kode54

Postby Zup » 2019-5-10 @ 15:46

I've had a strange issue with OmniMIDI. Maybe it is directly related to a battle worn Windows 10 (more below) or it is a driver issue, but...

Background: My computer is an AMD Ryzen 1200 with on a Gygabyte GA-AB350-Gaming 3 board (Realtek ALC1220 sound chip), using a Windows 10 x64 Home and OmniMIDI m7 CR2. It used to be a Athlon FX with a Asus Xonar soundcard, Windows 10 x64 Pro and BASSMIDI, but the mainboard died. So I replaced mainboard and CPU without reinstalling Windows (and surprisingly it worked) but I lost activation. My windows was a Windows 7 updated and reinstalled (I had an "upgrade" key), so I bought a Windows 10 Home and managed to install it without formatting my HD (there is an unofficial method to do that) and keeping all settings, drivers and applications.

The issue: Today I wanted to hear some MIDIs (.kar variant), but BASSMIDI didn't appear as a MIDI device. So I uninstalled it and downloaded and installed OmniMIDI. I started vanBasco Karaoke Player, and it works great. Then I plugged my earphones (the realtek mixer appeared) but OmniMIDI output did not change to earphones. System sounds and other apps sounds can be heard in earphones but OmniMIDI output remains on speakers.

It seems that plugging/unplugging connectors while playing MIDI doesn't change OmniMIDI output. If the application is restarted, OmniMIDI output changes to the correct device. If settings are reset while playing the MIDI, it also changes to the correct device. As I said, I don't know if that's a OmniMIDI issue, a driver issue, something related to all changes made to Windows without reinstalling it or some kind of limitation on windows and its sound subsystem.
I have traveled across the universe and through the years to find Her.
Sometimes going all the way is just a start...

I'm selling some stuff!
User avatar
Zup
Oldbie
 
Posts: 1285
Joined: 2003-10-04 @ 12:16

Re: OmniMIDI: A MIDI synthesizer forked from "BASSMIDI Driver" by kode54

Postby KaleidonKep99 » 2019-5-12 @ 14:00

Zup wrote:I've had a strange issue with OmniMIDI. Maybe it is directly related to a battle worn Windows 10 (more below) or it is a driver issue, but...

Background: My computer is an AMD Ryzen 1200 with on a Gygabyte GA-AB350-Gaming 3 board (Realtek ALC1220 sound chip), using a Windows 10 x64 Home and OmniMIDI m7 CR2. It used to be a Athlon FX with a Asus Xonar soundcard, Windows 10 x64 Pro and BASSMIDI, but the mainboard died. So I replaced mainboard and CPU without reinstalling Windows (and surprisingly it worked) but I lost activation. My windows was a Windows 7 updated and reinstalled (I had an "upgrade" key), so I bought a Windows 10 Home and managed to install it without formatting my HD (there is an unofficial method to do that) and keeping all settings, drivers and applications.

The issue: Today I wanted to hear some MIDIs (.kar variant), but BASSMIDI didn't appear as a MIDI device. So I uninstalled it and downloaded and installed OmniMIDI. I started vanBasco Karaoke Player, and it works great. Then I plugged my earphones (the realtek mixer appeared) but OmniMIDI output did not change to earphones. System sounds and other apps sounds can be heard in earphones but OmniMIDI output remains on speakers.

It seems that plugging/unplugging connectors while playing MIDI doesn't change OmniMIDI output. If the application is restarted, OmniMIDI output changes to the correct device. If settings are reset while playing the MIDI, it also changes to the correct device. As I said, I don't know if that's a OmniMIDI issue, a driver issue, something related to all changes made to Windows without reinstalling it or some kind of limitation on windows and its sound subsystem.

This is done by design, OmniMIDI doesn't change its output unless you restart its stream or change the output device manually through the configurator.
You can force it to change its output by holding SHIFT when clicking "Apply" in the settings tab, you don't need to change any setting to do this.

I could still add a check that makes OmniMIDI switch output when an hardware change is detected (E.g. new headphones plugged in), but I'll keep it disabled by default.
User avatar
KaleidonKep99
Newbie
 
Posts: 9
Joined: 2014-7-11 @ 21:43
Location: Italy

Re: OmniMIDI: A MIDI synthesizer forked from "BASSMIDI Driver" by kode54

Postby KaleidonKep99 » 2019-5-12 @ 14:29

Added to OmniMIDI 7.1.0.3.
Download: https://github.com/KeppySoftware/OmniMI ... ag/7.1.0.3

Image
User avatar
KaleidonKep99
Newbie
 
Posts: 9
Joined: 2014-7-11 @ 21:43
Location: Italy

Re: OmniMIDI: A MIDI synthesizer forked from "BASSMIDI Driver" by kode54

Postby Zup » 2019-5-18 @ 14:58

KaleidonKep99 wrote:This is done by design, OmniMIDI doesn't change its output unless you restart its stream or change the output device manually through the configurator.
You can force it to change its output by holding SHIFT when clicking "Apply" in the settings tab, you don't need to change any setting to do this.

I could still add a check that makes OmniMIDI switch output when an hardware change is detected (E.g. new headphones plugged in), but I'll keep it disabled by default.


Thanks, but I still felt kinda dumb.

Having a workaround was enough for me (restarting a MIDI player is not so hard), and (after writing my post) I found that other software don't change output device on-the-fly.

I haven't tried the new version yet, but I'm wondering what "switch default audio device" means... my problem was changing between connectors in the same (onboard) audio card, but I wonder if it supports plugging another audio device (i.e.: USB headphones). I know that this is a strange behaviour for a human being (most people will connect their headphones BEFORE launching the program), but I seeing my wife headphones made me curious.
I have traveled across the universe and through the years to find Her.
Sometimes going all the way is just a start...

I'm selling some stuff!
User avatar
Zup
Oldbie
 
Posts: 1285
Joined: 2003-10-04 @ 12:16

Re: OmniMIDI: A MIDI synthesizer forked from "BASSMIDI Driver" by kode54

Postby KaleidonKep99 » 2019-5-18 @ 20:15

Zup wrote:
KaleidonKep99 wrote:This is done by design, OmniMIDI doesn't change its output unless you restart its stream or change the output device manually through the configurator.
You can force it to change its output by holding SHIFT when clicking "Apply" in the settings tab, you don't need to change any setting to do this.

I could still add a check that makes OmniMIDI switch output when an hardware change is detected (E.g. new headphones plugged in), but I'll keep it disabled by default.


Thanks, but I still felt kinda dumb.

Having a workaround was enough for me (restarting a MIDI player is not so hard), and (after writing my post) I found that other software don't change output device on-the-fly.

I haven't tried the new version yet, but I'm wondering what "switch default audio device" means... my problem was changing between connectors in the same (onboard) audio card, but I wonder if it supports plugging another audio device (i.e.: USB headphones). I know that this is a strange behaviour for a human being (most people will connect their headphones BEFORE launching the program), but I seeing my wife headphones made me curious.

The new option works like this:
When you boot OmniMIDI up, it'll automatically use the default audio device selected in the Audio control panel.
Image

When you check that option in the OmniMIDI Configurator, OmniMIDI will automatically follow the default device whenever it's changed, for example when you plug a new pair of headphones on the front panel while using your speakers connected to the back panel, or you plug in an external audio device which was set as the default output when it was plugged in last time.
User avatar
KaleidonKep99
Newbie
 
Posts: 9
Joined: 2014-7-11 @ 21:43
Location: Italy


Return to Release Announcements

Who is online

Users browsing this forum: ATauenis and 2 guests