From the original SynthMaker forum (2004–2014), with its members’ names and dates.
ChrisHooker ·
I'm trying to piece together a schematic that reads incoming bulk dumps from an outboard piece of gear. I've got the SysEx to String component connected to a text component. When sending just the current "preset" to SM, everything is fine (416 characters, just as there should be for this piece of gear)... BUT it seems that when I try to send all presets (the entire system memory) at once, SM cuts off all but the very end of the message. More precisely, as it begins, I can see everything from the beginning of the message (F0...), but as it continues to feed, and then finish, Instead of displaying what should be the full 8,054 characters, only the last 54 are displayed.
I've tried changing triggers, splitting the string at intervals, saving as text file... but it seems like maybe the MIDI (before it even becomes a string) is stopping and restarting (bottleneck/overrun?), making the SysEx-String believe that a second message has arrived, instead of viewing it as just part of the first message.
Any thoughts? Any one else have this issue?
rl ·
Any thoughts? Any one else have this issue?
My assumption is: the device sends sys-ex as a series of messages and you're seeing only the last one. If that's the case, there is some need for extra logic to receive a series messages and chain them together. Did you use a MIDI monitor?
trogluddite ·
That would be my guess too - a lot of bulk dumps are done that way (usually with short pauses between blocks) to allow the receiving device to clear it's buffers. If so, the 54 characters you are left with should also begin 'F0'.
In my experience, it's very unusual for a hardware device to swamp a PC interface coz the bandwidth of USB/PCI etc. is so very much higher than MIDI. A quick test with MIDI-OX (or similar) will check that.
Could also be that the SM SysEx primitive is one of those weird ones that has an arbitrary size limit (like some of the loop primitives do) - a quick test with a String to SysEx piped to a SysEx to String (and a very big text box!) will give you an idea if that is the case.
ChrisHooker ·
Thanks for the input, guys.
Unfortunately, the message being sent is one continuous message (only has F0 at the very beginning, only terminates with F7 at the very end, and the final 54 characters SM leaves me with start with 00).
I am wondering if there may be a size limit to the SysEx prim, though. I'll try as you suggest, Trog, and send the whole thing (as captured using another program) from a String to SysEx prim THEN into the SysEx to String prim.
Thanks again.
I'll post back with results.
ChrisHooker ·
...Aaaaaand I'm posting back with results.
Okay, when keeping it all internal (String-SysEX -> SysEX-String), everything came through.. all 8,054 characters. In other words, there is no limit (at least that I have reached so far) to the SysEX components, nor the text component.
Soooo... maybe my interface or the computer itself (both verrrry old) are the problem to blame. ...I guess I'll have to migrate to another setup to find out.
ChrisHooker ·
Well, I migrated to another computer and still get the same problem. My MIDI interface now is a MOTU MIDI Express XT, connected via USB. Long SysEX dumps work fine when using any other software but SM.
Also to note, though: when I send a short SysEx message from MIDI Out Select, looped back via MIDI cable to a hardware input, then back into SM via MIDI In Select, all works fine... but a long message won't register at ALL... even though the same message will come in (albeit truncated) when sent from the outboard gear instead of being sent from within SM. So that seems to me that the MIDI In/Out Select primitives are causing the problem (the only variable). The MIDI Out combined with the MIDI In must be swamping SM?
I've attached a schematic with the SysEx messages I've been using included in Text primitives.
So, any other thoughts?
DigitalWhiteByte ·
Hi ChrisHooker,
the primitives SysEx seems to have a maximum buffer of 1000 hexadecimal numbers.
The trigger out of the primitive "SysEx to String" is performed every 1000 hexadecimal numbers,
so you can store each line of 1000 hex number in an array.
This should help you solve your problem. 😉
ChrisHooker ·
...you can store each line of 1000 hex number in an array.
This should help you solve your problem.
...And I believe it has! I was trying to use String Split prims combined with String Sample and Holds, and for some reason (probably user-error) they weren't doing the job... but the String Array - PERFECTO!
Thanks so much for the help, DWB... and to Trog and rl for your assistance as well.
I'm going to try to create a module that not only saves the array and unloads it to a standard string (keeping it visable with a Sample and Hold), but also automatically resets the array after the message is finished, so that another message can be accepted on demand. If anyone would like it, please ask, and I'll post it if I'm successful.
-Chris.
trogluddite ·
Nice detective work DWB - yet another of OutSim's little mysteries solved - I wonder sometimes if the lack of documentation is intended deliberately to make SM a 'brain training' puzzle game of some sort!
Wrote something here? To have a post removed or your name hidden, write to [email protected].