Montage M / MODX M now have additional Sysex Parameters defining the Audio File Path and (MD5) Identifier of 'the device information of the USB flash drive'.
The parameters are defined as follows, on page 229 of the G0 data list:
03 4p 0s 00 | Size 256 | Range 00 or 20-7E | Default 00 Audio File Path
03 5p 0s 00 | Size 32 | Range 00 or 20-7E | Default 00 Identifier
These descriptions appear to be misleading, as while the data is indeed 256 bytes for 03 4p 0s 00, and 32 bytes for 03 5p 0s 00 in a bulk dump, a parameter request for those addresses returns just a single byte, so rather than those parameters having 256 and 32 bytes respectively, they actually appear to be constructed in the same way as other string fields in Montage M, such as 03 2p 0s 00 Live Set Slot Name 1, 03 2p 0s 01 Live Set Slot Name 2 etc., but the documentation fails to make this clear.
However, problems arise with the 03 4p 0s 00 parameter, as while I can query 03 5p 0s 1F for the 32nd byte of the Identifier parameter, 03 4p 0s FF for the 256th character of the Audio File Path parameter throws an invalid sysex error.
Am I doing something ridiculous?
Oh wait... Yamaha uses 7-bit addresses, so I guess we'd have to continue to increment after 7F using the third byte..?
No - incrementing the 3rd byte will change the slot number.
We haven't tested but our hypothesis would be that you will only be able to access 128 bytes and that the 'Size 256' is likely a doc error.
MIDI 1 doesn't allow having the high order bit set within a record. The high order bit is special (e.g. F0, F7).
The only other 'large' data is the smart morph data and they have their own addresses. For exmaple p.236 for FM-X shows '06 00 10 00' and '06 00 11 00' with single values for add4 and no size.
Yamaha could have used that same 1 byte add4 for '03 4p 0s 00' but apparently didn't.
The difference is that each of the morph data is fixed size but the audio path is variable length.
Only Yamaha know what the intended design is. Worth an IdeaScale submission, a 'Contact Us' email or both.
I tested whether there is a documentation error regarding the 256 byte length, and added a wav file with a 156 character name. It was returned correctly in the bulk dump, with 100 null characters to follow - so the synth definitely stores those bytes, and can return them, but short of constructing a bulk request, I can't see how to get or set the value using parameter request / change.
I can't test this without the M. The parameter change receive (as in Montage M or MODX M on the receiving end) supports multiple 7-bit data bytes so does it work if you stuff 256 data bytes into the parameter change request before the end of SysEx byte?
Still, I wouldn't use this method. I say this because lots of data (256 bytes) I would prefer to deliver with checksum which only bulk operations allow. It's fairly close to the same bytes sent except the end of data has the checksum for you to send (and slightly different "command" bytes). I'm not sure if docs fixed the guidance on forming the checksum but primarily the problem in the past was the communication of what bytes are included (address, length, data, etc). It's easy to determine by requesting a bulk dump from the instrument and using the checksum it sends as a basis to check what bytes are included. Otherwise, checksum is done in a fairly standard way for 7-bit data that you can find references for the lower level nuts and bolts. You probably already have this aced, however, with your previous sw dev.
Current Yamaha Synthesizers: Montage Classic 7, Motif XF6, S90XS, MO6, EX5R
'The parameter change receive' - that is the problem - sending a SysEx to receive the entire value rather than byte-at-a-time.
It's an interesting idea to add a checksum byte - my initial approach was indeed to try to send the entire 256 bytes to the parameter address, but Montage responds with the 'Illegal bulk data' modal error on the display. Perhaps adding a checksum byte might make that go away... I shall try and report back.
... unfortunately not. Sending anything other than a single byte to the 03 4p 0s 00 address results in the Ilegal bulk data error.
I think you will find checksums are for 'bulk data' records and not for individual parameters. You can always try though.
P.214/215 don't show any checksum for '(3-5-3) PARAMETER CHANGE' or '(3-5-6) PARAMETER REQUEST'.
Multi byte parameter change doesn't utilize checksum. I was saying even if I could get that to work I would still send (keyboard receive) bulk dumps which do utilize checksum.
Current Yamaha Synthesizers: Montage Classic 7, Motif XF6, S90XS, MO6, EX5R
I've heard back from Yamaha - 03 4p 0s 00 is not supported for parameter request/change, and is only available via bulk data.