SyxLoader

SyxLoader is a little tool for sending MIDI system exclusive data from SYX Files (.syx) or Standard MIDI Files (.mid) to your MIDI devices.

SyxLoader

About SYX files
SYX files are the simplest way to store system exclusive data. They contain raw MIDI data in one or more blocks as transmitted via MIDI when performing a bulk dump. Unlike SMF, no timing information is included. The only thing a parser has to know or assume about a SYX file is that one or more data blocks may occur, each beginning with system exclusive status byte F0h and ending with F7h (end of exclusive, EOX). The contents in between are not of parsers interest but only for the dedicated MIDI device.

About Standard MIDI Files (SMF)
SMF are a common and standardized way to interchange time-stamped MIDI data between computers or MIDI devices. The file format was specified by the MIDI Manufacturers Association (MMA).

Quick Guide
Files can be opened as usual but drag & drop is supported and recommended. Some keyboard shortcuts are provided for basic control. The Save as.. allows you to save (and thus convert) a loaded SYX file to an SMF.

Menu File

There is an Offline option to close the MIDI output and make it available to other applications without closing SyxLoader. May be useful.

Menu MIDI-Output

Transmission can be paused and resumed. This is not really an essential option for a sysex tool as most MIDI devices do not like interruptions. It may be useful if you put several dumps with distinct pauses into one file and stop transmission to change the MIDI output.

While sending

In between ..
SyxLoader splits big sysex events into parts of 1024 bytes by default. To get this done internally, the subsequent parts are handled as separate events with status byte F7h (EOX). Delta time in ticks between these events is calculated as follows:

Brainer

Measure warp
With the Save as… option there is one thing to mention about the saved SMF: In case they contain music next to sysex data you will experience a measure warp along the timeline. This is due to SyxLoaders fragmentation algorithm which not only splits big sysex blocks into small ones but also shifts the position of all subsequent events to the amount of calculated delta times; see the animated GIF below. This warping is a feature, not a bug.

Measure warp

Update for Version 1.5 (12. August 2007)
Recently a user contacted me, who was not able to get just one sysex dump out of his Miditech MIDIFACE USB interface without experiencing a sporadic data loss and ridiculous amounts of data bytes wrongly transmitted on the MIDI output. So I ordered a MIDIFACE myself and found it to be one of those USB class-compliant interfaces which do not need a special driver and just work out of the box. They are sometimes called „driverless“, but of course they are not. Instead — under Windows XP — it is the OS’s usbaudio.sys driver which handles them.

It turned out that with usbaudio.sys an application should not pass a big sysex event with more than one call of midiOutLongMsg() unless you want the output data to be severely corrupted. In other words, the driver and probably all thereby driven class-compliant MIDI interfaces will handle sysex data correctly if you avoid the commonly used split output buffering. A typical drawback of usbaudio.sys are blocking calls to midiOutLongMsg() that will not return until the driver has synchronously transmitted all of the passed MIDI data.

SyxLoader now offers a preferences dialog to control the splitting behaviour. With Maximum Blocksize you may either vary the split size or — recommended, if you use a class-compliant device — disable the splitting by choosing ignore (do not split). Please be aware that the progress bar on SyxLoader’s main window may appear „chunky“ or frozen while transferring big non-splitted MIDI dumps.

Preferences

Download
SyxLoader is built with Borland C++Builder 6 using Theme Manager by Mike Lischke. It is designed to run on Microsoft Windows 2000/XP and comes with Inno Setup installer. Please tell if you find errors or want further features to be added – your feedback is welcome.

SyxLoader is freeware and provided to you as is. It is assumed to work properly but may be erroneous and have malicious effects on your computer systems or MIDI devices. Download and use at your own risk.

Download SyxLoaderDownload SyxLoader 1.5 (~607KB)

17 Responses to “SyxLoader”

  1. James Cowan sagt:

    I’m stumbling through a project using midiOutLongMsg() in Visual Studio.
    Got any help for me? It’s for a syx patch sender for my guitar. SyxLoader
    might be similar. Thanks for considering.

    • Hajo sagt:

      James,

      what is exactly your problem or question on midiOutLongMsg()?

      Regards,
      Hajo

      • James sagt:

        Hajo,
        I’m in the process of setting up the long message sender. Most of the
        rest of my „Corrilator“ is built. I have :
        midiOutPrepareHeader
        DlgDirListComboBox
        midiOutLongMsg
        midiOutUnprepareHeader
        These I hope, roughly will build into a sender. I’m using this approach
        because I had to take priority in polling etc. into the program and hence use older header files.
        So, How cam I make:
        LPTSTR lpPathSpec, // pointer to path or filename string from combo

        Work for passing to:
        hmo // Handle of the MIDI output device. This parameter can also be the handle of a MIDI stream cast to HMIDIOUT of midiOutLongMsg

        ?? Thank You for your understanding. I hope I’m not imposing
        too much. I’ve got a nice continuous conroller program working now
        and hundreds of syx files for Yamaha SW1000 and Nanosynth. I use
        an electric and midi guitar for input. I’m writing my own program
        because nobody else will.
        Sincerely,
        James

        • Hajo sagt:

          James,

          use a standard combo box for output port selection, not the directory listing type, there’s no working typecast for LPTSTR to HMIDIOUT ;-). Get the port names and indices with midiOutGetDevCaps(), reference ports by names in the GUI and ini-stuff and use indices just right before midiOutOpen().

          If my answer is less than you expected, feel free to ask more.

          Regards,
          Hajo

          • James sagt:

            Hajo,
            Right ON! I have just started setting up that part of the ports secton.
            I have 5 output ports and 2 input ports enumerated already. The LPTSTR
            was the only part I have in there that wouldn’t set up at first. I’ve got
            to set my project down for a week or so.
            I’ve found that SyxLoader works very well sending a variety or syx
            messages to my Yamaha SW1000. Most noticably it works well with
            the several other apps I normally run concurrently. ie loop recorders,
            a mixer, a tuner, „Cascade“ which is my completely working program
            written in VB. A chart of music score and so on. The numerous
            ports in „Corrilator“ are to communicate by midi to controll Yamaha
            SW1000 & DS2146, Nanosynth, and record/play on various loop
            recorders I’ve written. These events are triggered by a 8 footswitch
            3 continuous controller input to „Corrilator“. That part is working
            very well at this point. I’ve had years of great results from the VB
            version and I get great wah and cc effects already with the short
            message section which is working on „Corrilator“
            I’ve never really needed a sysex message longer than 256 bytes.
            That’s really enough to do all I need. It also keeps the patch change
            quick enough not to be noticable. Which with my polling algorythm
            is always transparent and smooth.
            So, your tips are exactly what I can use. I’ll be proceeding slowly
            though, because I can only work on this on occasional weekends.
            Thanks for Attending!
            James

  2. Chris sagt:

    I have an error. It worked once, I got the patch to the BOSS GT-10, but from the second time on it dosen’t work at all. When I click SEND the programm states that it worked, that it was sent, but the BOSS GT dosen’t recive it. What’s the bug?

    Thanks alot!
    Chris

    • Hajo sagt:

      Chris,

      maybe the MIDI-Device-ID of your GT-10 has changed upon the first dump; the ID must match the one being addressed in the exclusive dump.

      Regards,
      Hajo

  3. GB sagt:

    Hi,

    Is the source code available (even just the midi part)? I’m a Borland user and would like to learn about writing MIDI software. Email me if possible.

    Thanks,
    GB

  4. Thomas sagt:

    Thanks :)

  5. Hiphop Hippy sagt:

    Hey Hajo,
    firstly thanks for a great little app, really appreciate it. :)

    I’m a bit old school, and would love to run this as a batch job – or part thereof .
    Are there any command line switches to load a file and then exit ?

    eg.
    „C:\Program Files\SyxLoader\SyxLoader.exe“ „C:\Documents and Settings\Administrator\My Documents\GT_Pro-practice.mid“

    gets me part of the way there but then I still have to click „Send“ and exit, whereas it would be really nice (for me :) ) if this could be „automated“.

    Thanks in advance
    HhH

    • Hajo sagt:

      Hi HhH,

      thank you for your kind feedback. I am sorry, there are no command line switches yet, but maybe I should provide an update of Syxloader in the near future. Let me think it over.

      All the best,
      Hajo

      • Hiphop Hippy sagt:

        Thanks for the reply Hajo,

        It’s very cool as it is but if you do decide to do an update could you please let me know.

        ps. and all the best for the new year.

        Thanks in Advance
        HhH

  6. John Evans sagt:

    Hello Hajo,

    I have a Behringer V-Amp2 which uses Syx patches,however, I’m trying to download or upload individual Syx patches into/from my XP laptop, but am not having much luck. The V-amp2 seems to want to only accept all syx patches to be changed…..when I only want to download say…. an individual patch into the V-Amp2. Does your Syx Loader allow individual patches to be transmitted from my laptop into the Behringer V-Amp2?Thanks.
    John

    • Hajo sagt:

      Hi John,

      Syxloader does not allow to transmit individual patches but only dumps as a whole.

      All the best,
      Hajo

  7. Ciro sagt:

    Hello Hajo

    I have a Roland D50 that has a problem with SysEx Dump. The patch data which are transmitted out of the keyboard to PC are corrupted. Ironically the Bulk load works flawlessly and I can send .syx files to it easily.

    I have tried many different MIDI Interfaces like Roland UM-1 MK2, Edirol UM-1, Digidesign 002 MIDI interface, MPU401 standard midi adapter with a variety of software like SYSEX D50, D50 librarian, MIDIOX, etc but non of them can receive SysEx data from my D50 correctly.

    I also tried using different PCs running Windows XP, 7 and 10 without any success.

    I checked every single component on my D50. Replaced T-ram chips, Replaced the EPROM (IC22) with another higher version (2.21) , and replaced all the components carrying the MIDI OUT signal out of the gear.

    Would you please let me know what is your opinion on this problem?
    Regards