Coder Social home page Coder Social logo

keppysoftware / omnimidi Goto Github PK

View Code? Open in Web Editor NEW
347.0 18.0 35.0 292.62 MB

A software MIDI synthesizer for professional use.

Home Page: https://keppysoftware.github.io/

License: Other

C++ 23.93% C 31.44% Inno Setup 4.32% Batchfile 0.22% Makefile 0.04% C# 40.04% BASIC 0.02%
midi-driver asio omnimidi midi synthesizer bassmidi-driver soundfont2-synthesizer-library realtime professional audio

omnimidi's Introduction


A reboot 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.

Didn't you stop updating it?

Yes, but I still do small updates from time to time when needed, and I also do updates on request.
I've received numerous donations from people that don't want the driver to be abandoned, and I'm really thankful to all of them for their support!

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 engine).
  • 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.

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

Sure, as long as you follow the LICENSE.

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
Python bindings are available as well, get them from PyPI: kdmapi (maintained by SebaUbuntu, source code here)

Here's a list of applications that currently have native support for the Keppy's Direct MIDI API:

Can you make a WinMM patch for other drivers too?

There's a patch available for VirtualMIDISynth. You can get it here: https://github.com/KeppySoftware/WinMMWRP/releases/tag/4.2A

Minimum system requirements for MIDI playback on x86/x64 systems

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

  • A SSE2-capable x86 CPU running at 1.5GHz
  • 1024MB of RAM
  • DirectX 9 capable sound card or better
  • Windows Vista SP2 or greater (Server versions are supported too)

Minimum system requirements for MIDI playback on ARM64 systems

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

  • Qualcomm® Snapdragon™ 835, or any ARM® Cortex-A57 based chip running at 2GHz or more
  • 1536MB of RAM (Required by Windows)
  • Any sound device supported by Windows 10 ARM64 (Qualcomm® Aqstic™ or aptX™ DACs are recommended)
  • Windows 10 Spring Creators Update 2018

Recommended system requirements for studio environments

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

  • AMD Ryzen 9 5900X
  • 32GB of RAM (3600MHz)
  • Realtek ALC1220 with ASIO4ALL or Native Instruments Komplete Audio 6 (or another dedicated ASIO-capable hardware interface)
  • Windows 10 Pro 21H2
  • OmniMapper 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 2022
  • Inno Setup 6.1+ (It's recommended to install Inno Script Studio and the Inno Setup Pack)
  • Inno Downloader Plugin
  • Microsoft Windows SDK 10.0.22000

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 [email protected].

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/

omnimidi's People

Contributors

briannafoxwell avatar gitter-badger avatar kaleidonkep99 avatar khang06 avatar longnguyen2004 avatar macchiatoneko avatar mystyle-48 avatar nonamemissingno avatar sebaubuntu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

omnimidi's Issues

Mixer can't open?

I get this error when I open a mixer
mixer

See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.ComponentModel.Win32Exception (0x80004005): The system cannot find the file specified
at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start()
at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
at KeppySynthConfigurator.KeppySynthConfiguratorMain.openTheMixerToolStripMenuItem_Click(Object sender, EventArgs e)
at System.Windows.Forms.MenuItem.OnClick(EventArgs e)
at System.Windows.Forms.MenuItem.MenuItemData.Execute()
at System.Windows.Forms.Command.Invoke()
at System.Windows.Forms.Command.DispatchID(Int32 id)
at System.Windows.Forms.Control.WmCommand(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.Form.WndProc(Message& m)
at KeppySynthConfigurator.KeppySynthConfiguratorMain.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

************** Loaded Assemblies **************
mscorlib
Assembly Version: 4.0.0.0
Win32 Version: 4.6.1590.0 built by: NETFXREL2

CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll

KeppySynthConfigurator
Assembly Version: 1.0.0.0
Win32 Version: 1.0.0.0

CodeBase: file:///C:/Windows/SysWOW64/keppysynth/KeppySynthConfigurator.exe

System.Windows.Forms
Assembly Version: 4.0.0.0
Win32 Version: 4.6.1590.0 built by: NETFXREL2

CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll

System
Assembly Version: 4.0.0.0
Win32 Version: 4.6.1590.0 built by: NETFXREL2

CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll

System.Drawing
Assembly Version: 4.0.0.0
Win32 Version: 4.6.1590.0 built by: NETFXREL2

CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll

System.Configuration
Assembly Version: 4.0.0.0
Win32 Version: 4.6.1590.0 built by: NETFXREL2

CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll

System.Core
Assembly Version: 4.0.0.0
Win32 Version: 4.6.1590.0 built by: NETFXREL2

CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll

System.Xml
Assembly Version: 4.0.0.0
Win32 Version: 4.6.1590.0 built by: NETFXREL2

CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll

************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.

Add option to disable watchdog

Please add the option to enable/disable the watchdog in the configurator! It is annoying that I have to switch back to 3.3.1.5 to disable the watchdog while I play MIDIs.

Lag with Bluetooth Speakers/Headphones

When I try to listen to MIDI files using Piano From Above with my speaker connected to Bluetooth, the sound lags a lot. I tried changing the buffer to 1000 and it didn't work. I also tried changing the max voices or the max percentage, but same problem.

Default synthesizer settings doesn't work properly

The default synthesizer settings is broken. First, it doesn't change the MIDI Mapper setting at HKCU\Software\Microsoft\Windows\CurrentVersion\Multimedia\MIDIMap.

Second, it doesn't work with 64bit programs because it only changes the devenum key, not them devenum 64bit one

Third, the ID are completely wrong. The settings says that the Keppy's Driver ID is 0 but the actual ID is 4 for 32bit and 2 for 64bit (sometime the ID can be different depends on the system, the number of synth installed, etc...).

This ID hell (It's my own name) can be fixed by read the individual ID for the 32 bit and 64 bit then change the default one accordingly.

No longer default MIDI device

Issue experienced on Windows 10 64-bit (cannot speak to others): Since version 4.0.0.0, driver no longer installs as MIDI device #0. Prior to this the driver would always install as device #0 and programs that cannot explicitly select MIDI device would use it by default. Now there is no way to use the driver in such programs.

Configurator crashes when saving with blank value of sample rate

A blank sample rate should only give the default value of the sound card/audio device's sample rate rather than the fixed value. But instead the configurator crashes when you apply changes with no sample rate. This is why we need support for audio device's default sample rate.

Blacklist system is broken

Now every MIDI applications I use are blacklisted by KS (even though I haven't blacklisted anything).

Can't uninstall (

I can't uninstall version 4.0.6.15 from a fairly basic/minimalistic Windows 10 installation. :(

If I select "Change or remove program-> Keppy's Synthesizer 4.0.6.15 (Uninstall only)-> Uninstall" then I get a dialog box saying "Runtime Error (at 097:93): Internal error: Cannot call "EXTRACTTEMPORARYFILE" function during Uninstall."

MIDI application crashes with no audio devices

Since Microsoft GS Wavetable Synth doesn't crash a MIDI application with no audio devices installed on the computer or all audio devices are unplugged, Keppy's Synthesizer has a bug that crashes a MIDI application when using with no audio devices on the computer. However, "Output to WAV" has no effect though.

Blacklist not working

The blacklist stopped working in later versions of the driver! When launching a MIDI program that is in the blacklist, the driver does not hide anymore and still visible.
Blacklist bug, notice the selection is still there

Driver not working with audio frequency of 96,000Hz

When I set the driver to use a frequency of 96kHz, the audio either doesn't work at all, or with crackles (see the video). Steps to re-produce:

(0. Reset to default)

  1. Set your audio driver to work at 96kHz (or set it in Windows)
  2. Set the preset to high fidelity audio
  3. Set the frequency to 96000
  4. Test the audio (I used Piano From Above)

The problem persists if you keep the application open, and set it to the high fidelity preset, however when you restart the application, it works fine.

Video of the problem: https://youtu.be/W_Dc_DuOmn8

Refuses to load even if no other synth is installed?

I have had both Coolsoft VMS versions (1.x, 2.x) uninstalled for quite some time since I started using this driver. The function of refusing to load alongside VMS 1 is pretty good, but for me, it seems to still find it installed even though there isnt a trace leftover.

1
2
3

This issue began happening immediately after install of 3.0.1.6.

GUI cannot Enable/Disable Watchdog.

Last 2 versions starting with 4.0.1.3 cannot Enable/Disable Watchdog via GUI. Must manually edit registry. GUI will show current state as found in registry, but cannot change from one to the other.

PFA Freezes & Crashes

When I Open PFA With The XAudio Engine Enabled
image
PFA Crashes
image
But When I Have The XAudio Engine Diabled
image
image
It Just Freezes

Two MIDI Out devices?

screenshot_2
I tried uninstalling any other synths that I have but it doesn't fix the problem.
Is that an intended feature or a bug?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.