Page 1 of 1
Posted: 07-30-22 2:26 am
by Nicholas
After 15 years, Synthesia LLC has finally joined the MIDI Association, which means we've now got our own Manufacturer ID for SysEx messages:

Synthesia LLC Manufacturer ID: 0x00 0x02 0x45

Forum posts are easier to edit than websites (and keeping similar references on the forum has been a good experience), so this top post is now the official technical reference for all the SysEx messages the Synthesia client app can send and receive.

In general, messages will conform to the usual SysEx-style "packet":

Code: Select all

0xF7 Start of SysEx

0x02 Synthesia LLC Manufacturer ID

0xNN Message type byte

... message-specific payload (any number of data bytes)

0x7F End of SysEx
If we ever reach 127 message types (... and I hope we don't), I'll use the same leading-zero trick that the MIDI Association uses for manufacturer IDs.

0x01 Version Identification
Added in Synthesia 10.9

This message is sent immediately as an output device is opened for use. It identifies the major and minor version of the Synthesia client app. There are two data bytes (using the version number for "Synthesia 10.9" as example values):

0x0A Major version
0x09 Minor version

Posted: 07-30-22 2:29 am
by Nicholas
The idea behind getting our own manufacturer ID was to eventually make the light/finger information being emitted by Synthesia more expressive. But now that we've got one, the sky is the limit on the type of information we can send to other listening devices and apps.

Feel free to ask questions about existing messages and/or make suggestions for new ones. :)

Posted: 07-30-22 2:54 pm
by Bavi_H
Your Version Identification message seems similar in purpose to the Universal System Exclusive messages for Identity Request and Identity Reply. You might consider if you want Synthesia to send an Identity Reply if it gets an Identity Request? (Would a MIDI sound generator or a lighted keyboard ever want to probe if it's connected to Synthesia? I guess it's more likely that MIDI software would want to probe what hardware is connected.)

Identity Request and Identity Reply are described in the MIDI 1.0 Detailed Specification on PDF page 45 (printed page 40). And here's an overview table of the MIDI 1.0 Universal System Exclusive Messages. If you see one you want more information about, you'll have to search through the MIDI specs to find the document where it's defined.

Posted: 07-31-22 3:04 am
by Nicholas
I'd actually referred to the identity request/reply messages before writing up the version identification spec. :D

(For going on a decade, I've had implementing identity request/reply on the to-do list for making the device list show up on the Settings screen with better names than "USB Audio Device" or whatever; but it would require a dictionary of manufacturers and devices to work and right now it's still on line 1148.) :grimace:

In any event, this first message is more of an unsolicited identity reply, hehe. The idea is to help out the output-only style of devices along the lines of all these MIDI-enabled LED light strips that have been popping up. (I've heard from no fewer than five different people in just the past year or two that are working on different models, where they're all interested in better Synthesia compatibility.)

No one has asked to know the Synthesia version specifically, but this is one of those situations where you can't predict the future and having a way to pull an "oh, this is the older version so it doesn't behave the way Synthesia XX.YY does yet, let's disable feature Z for now" is potentially handy. You never know...

In the case of an output-only device, they don't have any way of sending the identity request message in the first place. Combine that with not having a need for the other fields in the identity reply (theirs is 17 bytes; mine is 8) and trying to find a good reason to inaugurate this list now that we've got our own ID, and the choice was clear! :lol:

Really, this post is a placeholder until we get to the good stuff: extended finger hint/key light information.

Posted: 02-03-23 9:11 pm
by Bavi_H
Now that Synthesia LLC has a MIDI Manufacturer ID, not only can it be used to define System Exclusive messages, it could also be used to create Sequencer-Specific Meta Events.

Technical Information: Sequencer-Specific Meta Events are defined in the Standard MIDI Files Specification. Like a System Exclusive message, the first 1 or 3 data bytes of a Sequencer-Specific Meta Event is a Manufacturer ID, then any following data bytes are defined by the manufacturer assigned to the Manufacturer ID. However, a Seqencer-Specific Meta Event (as well as every other kind of meta event) has these differences from a System Exclusive message:
  • Meta events aren't sent to a MIDI output device. Meta events only exist in a MIDI file and are only visible to the software that accesses the MIDI file.
  • The data bytes in meta events are able to use all possible byte values from hex 00 to FF.
  • Meta events begin with a variable-length quantity amount to indicate the number of data bytes, so you don't need to use any bytes in the data to indicate the total size of the data.

Posted: 02-08-23 3:55 pm
by Nicholas
Neat, Sequencer-Specific Meta Events are something I've never heard about before. Good find. I'll keep that on my radar in case a use-case for something like that comes up. Thanks!