Author |
Topic: Class Compliant MIDI Devices (Read 3627 times) |
|
jonrmorgan
New Member

 MIDI-OX Rules!
Posts: 2
|
 |
Class Compliant MIDI Devices
« on: Jun 11th, 2018, 6:03am » |
Quote Modify
|
Hi All, Many of the cheap MIDI devices sold on E-Bay and Amazon rely on the Windows driver for PC communication with your gear. They handle simple data transfers, ie short MIDI messages, OK and with a bit of playing around with buffer sizes MIDI-OX can handle incoming sysex as well. The problem I have though is using one of these devices to send bulk dump requests to a synth. For example, sending F0,43,20,09,F7 to a MK2 Yamaha DX7 requests a bulk dump of a voice bank. If I use a Roland device (eg UM1) to send this request the synth responds with the dump and the message "Completed" appears in the DX7's LCD. Using a generic device, although I can see the dump request is sent to the driver because its Output light flashes, nothing happens at the synth. Is this a known bug in the Windows Class Compliant driver or is there a workaround ? I've tried the procedure under both Win10 64bit and Win7 32bit with no difference in the result. Thanks for your advice. Jon
|
|
IP Logged |
|
|
|
Sonus
Member
 
 MIDI-OX Rules!
Posts: 78
|
 |
Re: Class Compliant MIDI Devices
« Reply #1 on: Jun 12th, 2018, 3:50am » |
Quote Modify
|
Hi Jon, Requesting and transmitting data with a class compliant m-audio usb uno is working perfectly. To verify if a request is received, create a loop by connecting midi thru instead of midi out. Apparently these poorly designed usb midi cables are missing essential components... Cheap USB MIDI cable: some self assembly may be required ... so it's hardware troubleshooting. You're welcome!
|
« Last Edit: Jun 12th, 2018, 5:20am by Sonus » |
IP Logged |
|
|
|
Breath
Administrator
    

Gender: 
Posts: 1029
|
 |
Re: Class Compliant MIDI Devices
« Reply #2 on: Jun 12th, 2018, 4:06am » |
Quote Modify
|
Microsoft's Class compliant driver is faulty as it limits the size of sysex messages to 255bytes. This has never (over 30 years) been part of the Midi spec. and as such MS driver is faulty. Many older synths have sysex message blocks greater than 255 bytes. It is a well known problem and many manufactures of Midi interfaces have their own correct drivers and some even allow you to use the MS driver, which is OK for a lot of simple things, but fails particularly for vintage things and then the poor uses is baffled. Roland, Yamaha, M-Audio, Behringer etc all take this introduced limitation on board and you will be safe with these interfaces. The silver Chinese interfaces are at best troublesome. Sadly current manufactures seem to feel they have to comply with MS's redefinition (dumbing down) of the Midi spec. and break their sysex into blocks less than 255 bytes. MS also says that you can't use Midi running status on PCs. MidiOx started life as a MS example of how to write Midi programs in C (then C++). It never functioned AT ALL and every time a new version of their C compiler came out it was always a disappointment to find the same example of code that never worked. I will now get down from my soapbox and try and calm down All the best Royce
|
|
IP Logged |
|
|
|
jonrmorgan
New Member

 MIDI-OX Rules!
Posts: 2
|
 |
Re: Class Compliant MIDI Devices
« Reply #3 on: Jun 12th, 2018, 5:09am » |
Quote Modify
|
Sonus/Royce, Thanks for the quick and comprehensive replies guys. Royce, I fully understand your frustration on the driver issue. I've been writing MIDI software since the 80's and the commonest gripe I get is "why won't my apps work with this Chinese junk". At last I have a full understanding of the problem. Thank you. Jon
|
|
IP Logged |
|
|
|
Breath
Administrator
    

Gender: 
Posts: 1029
|
 |
Re: Class Compliant MIDI Devices
« Reply #4 on: Jun 13th, 2018, 1:09am » |
Quote Modify
|
Hi Jon I should add that the MS class compliant driver was not Multi-Client until Win10. That is, more than one application can connect and use the one Midi port, something available in the 1990's and on virtually all manufacturers Midi drivers since. What a software leader MS is. Here is a quote from a MS blog "One great feature of the new API is that it is multi-client. As long as all apps with the port open are using the Windows 10 UWP MIDI API and not the older Win32 MME or DirectMusic APIs, they can share the same device. This is something the older APIs don’t handle without custom drivers and was a common request from our partners and customers." So from Win 10 it is now multi-client, BUT only for new software that uses the new UWP API. Is you DAW up to date - doesn't mean they have adopted the new API because it won't run pre Win10 - how about all those synth editors that manufactures no longer service? (note that the smoke you see is not your machine but coming from my ears). Fortunately you can connect a class compliant driver to a couple of MidiYoke Ports and suddenly it is Multi-Client for the older API (thanks Jamie). All the best Royce
|
|
IP Logged |
|
|
|
Breath
Administrator
    

Gender: 
Posts: 1029
|
 |
Re: Class Compliant MIDI Devices
« Reply #5 on: Sep 23rd, 2022, 7:03pm » |
Quote Modify
|
Thanks Jon, what drivers did you reinstall? If it was the Roland driver, I understand completely as all the Roland drivers I have seen are very good and multiclient. All the best Royce
|
|
IP Logged |
|
|
|
filliphey
New Member

 MIDI-OX Rules!
Posts: 1
|
 |
Re: Class Compliant MIDI Devices
« Reply #6 on: Dec 21st, 2022, 2:49am » |
Quote Modify
|
on Jun 11th, 2018, 6:03am, jonrmorgan wrote:Hi All, Large numbers of the modest MIDI gadgets sold on E-Narrows and Amazon depend on the Windows driver for PC correspondence with your stuff. They handle straightforward information moves, ie short topcv review messages, alright and with a touch of messing with support sizes MIDI-Bull can deal with approaching sysex too. The problem I have though is using one of these devices to send bulk dump requests to a synth. For example, sending F0,43,20,09,F7 to a MK2 Yamaha DX7 requests a bulk dump of a voice bank. If I use a Roland device (eg UM1) to send this request the synth responds with the dump and the message "Completed" appears in the DX7's LCD. Using a generic device, although I can see the dump request is sent to the driver because its Output light flashes, nothing happens at the synth. Is this a known bug in the Windows Class Compliant driver or is there a workaround ? I've tried the procedure under both Win10 64bit and Win7 32bit with no difference in the result. Thanks for your advice. Jon |
| I have the assumption that this is a general problem with devices that use the USB class-compliant MIDI driver. I tried a "Livid OhmRGB" as well as an "Alesis Q25" - both do not bring their own driver but instead use the general class-compliant driver. Thus, they do not appear in the compatibility center. However, both are compatible with Windows 7 according to the manufacturer. I also asked in the Livid forum and people have the OhmRGB running without any problems under Win 7. Both devices work under other computers (WinXP, Mac).
|
« Last Edit: Dec 28th, 2022, 1:42am by filliphey » |
IP Logged |
|
|
|
Breath
Administrator
    

Gender: 
Posts: 1029
|
 |
Re: Class Compliant MIDI Devices
« Reply #7 on: Dec 21st, 2022, 7:42pm » |
Quote Modify
|
Hi under Mac and Linux things seem to be fine, but this is a MS Windows program and there is the problem. Firstly MS decided their Class Compliant driver so it would connect to ONE and only one program at a time despite Windows architecture is for many programs to run at once. When they wrote it there were already a few multi-client (connect to more that one program at a time) available and most of the Midi interface manufactures followed with their drivers. Say you were running a DAW and you had some Midi problems you couldn't work out. Easily fixed, start MidiOx and have a look...... oh no you can't. You would have to close the Midi Port connections or close down your DAW because the MS driver will only talk to one program at a time. All the big Midi manufactures had their own Multi Client drivers and so this is not an issue only for devices that used the MS drivers. You can use MidiOx with MidiYoke or loopMidi or other "Midi Patch chord" drivers that are Multi Client drivers to convert from Single to Multi, but what a pain. (MidiOx displays that it is 'Out of memory' when it is not the first to connect to a Class compliant Midi port) MS refused to change their driver for many, many years, and many versions of Windows. They say they have fixed the problem now starting in one of the versions of WIN 10. The trouble there is, they rewrote ALL their Midi code in Windows as well and expect every other software company to rewrite all of their code to connect to their new API. If they don't the Class Compliant driver is STILL single client. The only DAWs and other software that I know of that have done these changes are Sonar and Juce (Midi software library). This may have changed so check your software maker. So when everyone has re-written their software, your class compliant drivers should be fine as long as you have the latest software versions. Secondly MS decided to change the Midi specification. So on Win PCs only, the manufacturers agreed to 'Standardization' is corrupted. (don't forget that the original specification has remained usable since the early 1980's That is around 40 years!) The original Midi design has things like 'running status' which reduces the amount of Midi data that is sent - The Yamaha wind controllers use this as there is so much data coming in. This is necessary as Midi is designed to be relatively slow because of the processing speed and size of memory in early microprocessors. When 'running status' gets to ANY driver it must expanded to non-running status. Not a big deal these days, but it should be unnecessary. The original System Exclusive definition is simply F0 (start system exclusive), manufactures ID number/s and then as much data as you like, and ending with F7. So sysex messages could be any size. So starting in the early 1980's, many synth and equipment manufactures did just that. Some sysex dumps more than 255 bytes. MS decided they new better and that System Exclusive messages should be limited to 255 bytes in Windows. So large messages have to be broken up into packets. The big manufactures took this into account and their Midi interface drivers converted from the 'any size' sysex to 'packet' sysex. So their devices always work. When MS wrote their Class Compliant driver many years ago they decided that it wasn't their responsibility. Unfortunately many synth manufacturers had already written their System Exclusive code inside their equipment, so tough luck connecting to a PC and Win. So no Sysex dumps for older synths and no explanation for the failure of your attempt to do the transfer. Many modern equipment makers apply these limitations these days, despite the extra money to create the extra unneeded code. So really if you are happy only connecting to one program at a time and have no old synths you should be OK. If not, talk to the software coders of your DAW and tell them to re-write their code to match Microsoft's wisdom. I don't think Jamie is planning to do this for MidiOx. Royce
|
|
IP Logged |
|
|
|
|