<?xml version="1.0" encoding="UTF-8"?>        <rss version="2.0"
             xmlns:atom="http://www.w3.org/2005/Atom"
             xmlns:dc="http://purl.org/dc/elements/1.1/"
             xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
             xmlns:admin="http://webns.net/mvcb/"
             xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
             xmlns:content="http://purl.org/rss/1.0/modules/content/">
        <channel>
            <title>
									Developers &amp; MIDI 2.0 Specifications - MIDI.org Forum				            </title>
            <link>https://midi.org/community/midi-specifications</link>
            <description>MIDI.org Discussion Board</description>
            <language>en-US</language>
            <lastBuildDate>Wed, 16 Sep 2026 03:41:33 +0000</lastBuildDate>
            <generator>wpForo</generator>
            <ttl>60</ttl>
							                    <item>
                        <title>Cannot get reply form MIDI.org</title>
                        <link>https://midi.org/community/midi-specifications/cannot-get-reply-form-midi-org</link>
                        <pubDate>Wed, 09 Sep 2026 01:33:15 +0000</pubDate>
                        <description><![CDATA[I am a participant of the MIDI Innovation Award. I received a invitation email from the MIDI Association that provide a link to joint the MIDI Association Corporate Forum. The email said I m...]]></description>
                        <content:encoded><![CDATA[<p>I am a participant of the MIDI Innovation Award. I received a invitation email from the MIDI Association that provide a link to joint the <span class="">MIDI Association Corporate Forum. The email said I must joint the forum because "because all communciations with 2026 entrants will take place there." I followed the link and filled the information, and it said I will receive a activation email to joint the forum. But for unknown reason, I didn't received any activation email. I send 2 emails in 2 days to info@midi.org to ask help, but didn't get any reply !!!  Can anyone help ?</span></p>]]></content:encoded>
						                            <category domain="https://midi.org/community/midi-specifications">Developers &amp; MIDI 2.0 Specifications</category>                        <dc:creator>Kende Wong</dc:creator>
                        <guid isPermaLink="true">https://midi.org/community/midi-specifications/cannot-get-reply-form-midi-org</guid>
                    </item>
				                    <item>
                        <title>Adding C2PA to Midi 2.0 and requesting a SysEx ID</title>
                        <link>https://midi.org/community/midi-specifications/adding-c2pa-to-midi-2-0-and-requesting-a-sysex-id</link>
                        <pubDate>Thu, 03 Sep 2026 19:46:37 +0000</pubDate>
                        <description><![CDATA[Hello I&#039;m a member of the (Coalition for Content Provenance and Authenticity) C2PA&#039;s Audio Working Group. The group is actively working on including MIDI 2.0 in the C2PA specifications.In ou...]]></description>
                        <content:encoded><![CDATA[<p>Hello I'm a member of the (<span>Coalition for Content Provenance and Authenticity)</span> C2PA's Audio Working Group. <br /><br />The group is actively working on including MIDI 2.0 in the C2PA specifications.<br /><br />In our implementation of adding C2PA to MIDI 2.0 we would need a Manufacturer ID (<mark class="MAeH" data-sfc-root="ep" data-wiz-uids="PISk6e_p" data-ved="2ahUKEwiOtZzrk9OWAxWUsSsGHaKvLxoQu4cTegoIAggACAAIBRAB" data-sfc-inited="2" data-copy-service-computed-style="font-family: &quot;Google Sans&quot;, Arial, sans-serif; font-size: 16px; font-weight: 500; margin: 0px; text-decoration: none; border-bottom: 0px rgb(238, 240, 255);"><!--qkimaf PISk6e_o/HugV6--><!--cqw1tb PISk6e_o/HugV6-->SysEx ID<!--TgQPHd|||[[]]--></mark>) so we could indicate the data is a C2PA manifest and thus could be verified.<br /><br />I personally was just wondering about the best way to discuss this with the MIDI 2.0 group.<br /><br />I know I can pay for a membership, and many of the organization in C2PA are already corporate members, but since the Manufacture ID (SysEx ID) would have to be shared with people inside our group and outside, it might warrant a discussion. </p>]]></content:encoded>
						                            <category domain="https://midi.org/community/midi-specifications">Developers &amp; MIDI 2.0 Specifications</category>                        <dc:creator>Matthew Rappard</dc:creator>
                        <guid isPermaLink="true">https://midi.org/community/midi-specifications/adding-c2pa-to-midi-2-0-and-requesting-a-sysex-id</guid>
                    </item>
				                    <item>
                        <title>Replace the Equal Temperament Tuning or ETT - New Tuning / New Notation System</title>
                        <link>https://midi.org/community/midi-specifications/replace-the-equal-temperament-tuning-or-ett-new-tuning-new-notation-system</link>
                        <pubDate>Mon, 31 Aug 2026 13:09:59 +0000</pubDate>
                        <description><![CDATA[I need your help to create a new music notation program.
We will use A-28 Hertz as a reference (base or aggregate).
Add 28 dividers … 1 - 2 - 4 - 7 - 14 - 28 to the base and we obtain the ...]]></description>
                        <content:encoded><![CDATA[<p><strong><sup>I need your help to create a new music notation program.</sup></strong></p>
<p><strong><sup>We will use A-28 Hertz as a reference (base or aggregate).</sup></strong></p>
<p><strong><sup>Add 28 dividers … 1 - 2 - 4 - 7 - 14 - 28 to the base and we obtain the following list</sup></strong></p>
<p><strong><sup>28 - 29 - 30 - 32 - 35 - 42 - 56.</sup></strong></p>
<p><strong><sup>Apply this list to the sonic band in Hertz and we have a basic scale (7 notes/ first octave)</sup></strong></p>
<p><strong><sup>28Hz                     29Hz                     30Hz                     32Hz                     35Hz                     42Hz                     56Hz      </sup></strong></p>
<p><strong><sup> </sup></strong></p>
<p><strong><sup>List the harmonics for each of the notes in the basic scale and you have the making of a new musical / instrumental tuning.</sup></strong></p>
<p><strong><sup>This new tuning can be applied / transferred to an existing notation program’s extension providing the program will accept the new tuning and run its oscillators on it.</sup></strong></p>
<p><strong><sup>I want to replace the Equal Temperament Tuning. with the following frequencies, for each note respectively.</sup></strong></p>
<p><strong><sup> </sup></strong></p>
<p><strong><sup>NOTE                            Frequency </sup></strong></p>
<p><strong><sup>                                        in Hertz</sup></strong></p>
<p><strong>A - 1        28 -</strong></p>
<p><strong>A#          29</strong></p>
<p><strong>B             30</strong></p>
<p><strong>C            32</strong></p>
<p><strong>C#          35</strong></p>
<p><strong>D            42</strong></p>
<p><strong>D#          56 -</strong></p>
<p><strong>E             58</strong></p>
<p><strong>F             60    </strong></p>
<p><strong>F#           64</strong></p>
<p><strong>G            70</strong></p>
<p><strong>G#          84</strong></p>
<p><strong>A - 2        87</strong></p>
<p><strong>A#          90</strong></p>
<p><strong>B             96</strong></p>
<p><strong>C            105</strong></p>
<p><strong>C#          112 -</strong></p>
<p><strong>D            116</strong></p>
<p><strong>D#          120</strong></p>
<p><strong>E             126</strong></p>
<p><strong>F             128</strong></p>
<p><strong>F#           140</strong></p>
<p><strong>G            145</strong></p>
<p><strong>G#          150</strong></p>
<p><strong>A - 3        160</strong></p>
<p><strong>A#          168</strong></p>
<p><strong>B             174</strong></p>
<p><strong>C            175</strong></p>
<p><strong>C#           180</strong></p>
<p><strong>D            192</strong></p>
<p><strong>D#          196</strong></p>
<p><strong>E             203</strong></p>
<p><strong>F             210</strong></p>
<p><strong>F#           224 -</strong></p>
<p><strong>G            232</strong></p>
<p><strong>G#           240</strong></p>
<p><strong>A - 4        245</strong></p>
<p><strong>A#          252</strong></p>
<p><strong>B             256</strong></p>
<p><strong>C            261</strong></p>
<p><strong>C#           270</strong></p>
<p><strong>D            280</strong></p>
<p><strong>D#          288                                </strong></p>
<p><strong>E             290</strong></p>
<p><strong>F             294</strong></p>
<p><strong>F#           300</strong></p>
<p><strong>G            308</strong></p>
<p><strong>G#          315</strong></p>
<p><strong>A - 5        319</strong></p>
<p><strong>A#          320</strong></p>
<p><strong>B             330</strong></p>
<p><strong>C            336</strong></p>
<p><strong>C#          348</strong></p>
<p><strong>D            350</strong></p>
<p><strong>D#          352</strong></p>
<p><strong>E             360</strong></p>
<p><strong>F             364</strong></p>
<p><strong>F#           377</strong></p>
<p><strong>G            378</strong></p>
<p><strong>G#          384</strong></p>
<p><strong>A - 6        385</strong></p>
<p><strong>A#          390</strong></p>
<p><strong>B             392</strong></p>
<p><strong>C            406</strong></p>
<p><strong>C#          416</strong></p>
<p><strong>D            420</strong></p>
<p><strong>D#          435</strong></p>
<p><strong>E             448 -</strong></p>
<p><strong>F             450</strong></p>
<p><strong>F#           455</strong></p>
<p><strong>G            462</strong></p>
<p><strong>G#          464</strong></p>
<p><strong>A - 7        476</strong></p>
<p><strong>A#          480</strong></p>
<p><strong>B             490</strong></p>
<p><strong>C            493</strong></p>
<p><strong>C#          504</strong></p>
<p><strong>D            510</strong></p>
<p><strong>D#          512</strong></p>
<p><strong>E             522</strong></p>
<p><strong>F             525</strong></p>
<p><strong>F#           532</strong></p>
<p><strong>G            540</strong></p>
<p><strong>G#          544</strong></p>
<p><strong>A - 8        546</strong></p>
<p><strong>A#          551</strong></p>
<p><strong>B             560</strong></p>
<p><strong>C            570</strong></p>
<p><strong>C#          576</strong></p>
<p><strong>D            580</strong></p>
<p><strong>D#          588</strong></p>
<p><strong>E             595                                </strong></p>
<p><strong>F             600</strong></p>
<p><strong>F#           608</strong></p>
<p><strong>G            609</strong></p>
<p><strong>G#          616</strong></p>
<p><strong>A - 9        630         </strong></p>
<p><strong>A#          638</strong></p>
<p><strong>B             640</strong></p>
<p><strong>C            644</strong></p>
<p><strong>C#          660</strong></p>
<p><strong>D            665</strong></p>
<p><strong>D#          667</strong></p>
<p><strong>E             672</strong></p>
<p><strong>F             690</strong></p>
<p><strong>F#           696</strong></p>
<p><strong>G            700</strong></p>
<p><strong>G#           704</strong></p>
<p><strong>A - 10      714</strong></p>
<p><strong>A#          720</strong></p>
<p><strong>B             725</strong></p>
<p><strong>C            728</strong></p>
<p><strong>C#          735</strong></p>
<p><strong>D            736</strong></p>
<p><strong>D#          750</strong></p>
<p><strong>E             754</strong></p>
<p><strong>F             756</strong></p>
<p><strong>F# </strong><strong>          768</strong></p>
<p><strong>G            770</strong></p>
<p><strong>G#          780</strong></p>
<p><strong>A - 11      783</strong></p>
<p><strong>A#          784</strong></p>
<p><strong>B             798</strong></p>
<p><strong>C            800</strong></p>
<p><strong>C#          805</strong></p>
<p><strong>D            810</strong></p>
<p><strong>D#           812</strong></p>
<p><strong>E             832</strong></p>
<p><strong>F             840</strong></p>
<p><strong>F#           841</strong></p>
<p><strong>G            864</strong></p>
<p><strong>G#          868</strong></p>
<p><strong>A - 12      870</strong></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>I asked the same thing to Chat Gpt</p>
<p>Thet say ok, it's new we do it</p>
<p>I followes the intructions, installed Python... and now I am stuck</p>
<p>I need me a computer person to help me and the Chat Gpt robo thingy complete the prototype.</p>
<p>&nbsp;</p>]]></content:encoded>
						                            <category domain="https://midi.org/community/midi-specifications">Developers &amp; MIDI 2.0 Specifications</category>                        <dc:creator>Philippe Rousset</dc:creator>
                        <guid isPermaLink="true">https://midi.org/community/midi-specifications/replace-the-equal-temperament-tuning-or-ett-new-tuning-new-notation-system</guid>
                    </item>
				                    <item>
                        <title> What is the common practice of handling a virtual UMP device when a legacy Midi host connected into it?</title>
                        <link>https://midi.org/community/midi-specifications/alsa-sequencer-what-is-the-common-practice-of-handling-a-virtual-ump-device-when-a-legacy-midi-host-connected-into-it</link>
                        <pubDate>Mon, 17 Aug 2026 02:02:21 +0000</pubDate>
                        <description><![CDATA[Hi mate!First time commenter here since I have a hard time on searching relevant info regardless to the ALSA sequencer where I find no info related to this problem in the ALSA documentation,...]]></description>
                        <content:encoded><![CDATA[<p>Hi mate!<br /><br />First time commenter here since I have a hard time on searching relevant info regardless to the ALSA sequencer where I find no info related to this problem in the ALSA documentation, nor I could find anyone handing this problem in the existing midi libraries, while the github and sourceforge discussions are a bit inactive where many of the questions remain unanswered. Seems like here is the closest place where can give me some directions to solve the problems since my problem might also involves in some basic midi 2.0 knowledge.<br /><br />I am currently studying the ALSA sequencer and I have some success on building a basic midi 1.0 input and output, so I decided to build a virtual input with supporting ump; basically, I have created a port with an enum of SND_SEQ_PORT_TYPE_MIDI_UMP:</p>
<pre contenteditable="false">// Create an input port, but ump
const port_id = asound.snd_seq_create_simple_port(
    seq.?,
    "Zig Midi In Ump",
    asound.SND_SEQ_PORT_CAP_WRITE | asound.SND_SEQ_PORT_CAP_SUBS_WRITE,
    asound.SND_SEQ_PORT_TYPE_MIDI_GENERIC | asound.SND_SEQ_PORT_TYPE_APPLICATION | asound.SND_SEQ_PORT_TYPE_MIDI_UMP,
);</pre>
<p>After that, I have created an async callback to receive the ump packet. is_active is a global variable so that the loop can be stopped outside the async function, while the type UmpEvent is snd_seq_ump_event_t: </p>
<pre contenteditable="false">fn processUmpEvent(seq: ?*Seq) void {
    var ev: ?*UmpEvent = null;
    while (is_active) {
        if (asound.snd_seq_ump_event_input(seq.?, &amp;ev) &gt;= 0) {
            std.debug.print("Event type: {d}\n", .{ev.?.type});
        }
    }
}
</pre>
<p>While the program is run, since I also want to see how midi host that can't support ump behaves to my virtual input device, I decided to open a daw and trying to send something with it; unsurprisingly, although my daw recognized my virtual port, the port don't response to the event since my host didn't send ump event, but this creates some questions since I am not sure how should I handle this situation if I want to build a midi library or a midi host for example, so here are the questions:</p>
<p>- Is the behavior of legacy midi host recognized my virtual input device intended?<br />- When I build a virtual input device, do I need to check if the new incoming or target device support ump? Or my virtual device should always handle both ump and legacy format? Or I should prevent the legacy device to connect to the ump endpoint?</p>
<p>Please let me know if anyone needs more info for the questions, or if the question is duplicated so that I could referred to the existing discussion.</p>]]></content:encoded>
						                            <category domain="https://midi.org/community/midi-specifications">Developers &amp; MIDI 2.0 Specifications</category>                        <dc:creator>Accipiter Nova</dc:creator>
                        <guid isPermaLink="true">https://midi.org/community/midi-specifications/alsa-sequencer-what-is-the-common-practice-of-handling-a-virtual-ump-device-when-a-legacy-midi-host-connected-into-it</guid>
                    </item>
				                    <item>
                        <title>Got Property Exchange working between two vendors&#039; gear that never coordinated — sharing it, and some open questions on adoption</title>
                        <link>https://midi.org/community/midi-specifications/got-property-exchange-working-between-two-vendors-gear-that-never-coordinated-sharing-it-and-some-open-questions-on-adoption</link>
                        <pubDate>Thu, 06 Aug 2026 22:26:48 +0000</pubDate>
                        <description><![CDATA[I wanted to share a proof-of-concept and open a discussion, because I think it says something useful about where Property Exchange is right now.
What I built. A small PE responder (running ...]]></description>
                        <content:encoded><![CDATA[<p data-pm-slice="1 1 []">I wanted to share a proof-of-concept and open a discussion, because I think it says something useful about where Property Exchange is right now.</p>
<p><strong>What I built.</strong> A small PE <em>responder</em> (running on a Mac) that impersonates a sound generator. It serves resources built from data that a synth already has — its parameter names and its CC map — so that a hardware controller can discover it over MIDI-CI. The result: the controller <strong>auto-labels its eight knobs with the synth's real parameter names and drives them</strong>, with no MIDI-learn and no templates. The two products were never designed to interoperate; PE made them.</p>
<p>For me this was the "oh, it actually works" moment — the thing PE promised, running on real gear. It scaled cleanly across ~47 instruments from one software collection.</p>
<p><strong>Why I'm posting.</strong> Getting there took more reverse-engineering than I expected, and I ran into a few things I'd genuinely like other implementers' perspectives on:</p>
<ol>
<li>
<p><strong>Standard vs. vendor-specific resources.</strong> The controller I used fetches vendor-specific</p>
<p>parameter/value resources rather than the standardized <code>CtrlList</code> / <code>AllCtrlList</code>. Is that common in the wild? Has anyone successfully served <em>standard</em> controller resources to a shipping controller and had it map knobs from them? I'd love to know how portable a "standard-resources-only" responder actually is today.</p>
</li>
<li>
<p><strong>Subscriptions / value sync.</strong> For a responder to advertise live values and have a controller</p>
<p>display them, what's the subscription behavior you've found works reliably? I'd like to compare notes on the <code>full</code> vs <code>partial</code> update flow and how different peers handle it.</p>
</li>
<li>
<p><strong>Robustness patterns.</strong> Stale MIDI-CI sessions, re-subscription behavior, MUID invalidation on</p>
<p>reconnect — is there an agreed set of best practices or, ideally, a reference implementation people build against?</p>
</li>
</ol>
<p><strong>Offer.</strong> I'm happy to share the responder and the harvester (the bit that turns a synth's shipped files into a PE resource set) as a reference — it might save the next person the reverse-engineering, and it could be a useful starting point for anyone building a responder. If there's interest in an open reference implementation / conformance-style test set for PE, I'd gladly contribute what I have.</p>
<p>Mostly I'd love to hear from anyone else implementing PE — what's worked, what's been painful, and whether the standard-resource path is as viable as I hope it becomes.</p>]]></content:encoded>
						                            <category domain="https://midi.org/community/midi-specifications">Developers &amp; MIDI 2.0 Specifications</category>                        <dc:creator>Nick Rains</dc:creator>
                        <guid isPermaLink="true">https://midi.org/community/midi-specifications/got-property-exchange-working-between-two-vendors-gear-that-never-coordinated-sharing-it-and-some-open-questions-on-adoption</guid>
                    </item>
				                    <item>
                        <title>Question on the notion of a client &quot;session&quot; with a host in Network MIDI 2.0</title>
                        <link>https://midi.org/community/midi-specifications/question-on-the-notion-of-a-client-session-with-a-host-in-network-midi-2-0</link>
                        <pubDate>Wed, 29 Jul 2026 21:47:32 +0000</pubDate>
                        <description><![CDATA[Knowing that Network MIDI is in its first official specification release in MIDI 2.0, it is primarily focused with a peer-to-peer connection between devices, and likely that will tend to be ...]]></description>
                        <content:encoded><![CDATA[<p>Knowing that Network MIDI is in its first official specification release in MIDI 2.0, it is primarily focused with a peer-to-peer connection between devices, and likely that will tend to be a 1-&gt;1 relationship between client and host, although the spec does support multiple client connections to a host, including from a single device.  The specification mentions the ability for a client to essentially determine that a host is not available after a "reasonable amount of time" when submitting repeated Invitation packets (Network MIDI 2.0 Section 6.4), but is there an equivalent concept of the host determining that a client is no longer reachable, in case the device has been powered off, or otherwise removed from the network before sending a Bye packet?  For a host process that might want to only accept a certain number of client connections, such a timeout strategy would help to free up a connection for a client that is no longer active.  I am unable to find any discussion of this within the Network MIDI 2.0 specification.</p>]]></content:encoded>
						                            <category domain="https://midi.org/community/midi-specifications">Developers &amp; MIDI 2.0 Specifications</category>                        <dc:creator>Robin Bayer</dc:creator>
                        <guid isPermaLink="true">https://midi.org/community/midi-specifications/question-on-the-notion-of-a-client-session-with-a-host-in-network-midi-2-0</guid>
                    </item>
				                    <item>
                        <title>Working Group List?</title>
                        <link>https://midi.org/community/midi-specifications/working-group-list</link>
                        <pubDate>Sun, 12 Jul 2026 03:16:22 +0000</pubDate>
                        <description><![CDATA[At NAMM 2026 I spoke with Chris Stone who I believe was on an Orchestra Articulations Working Group. At least I believe that&#039;s what the group was named. 
Is there somewhere I&#039;m missing on t...]]></description>
                        <content:encoded><![CDATA[<p>At NAMM 2026 I spoke with Chris Stone who I believe was on an Orchestra Articulations Working Group. At least I believe that's what the group was named. </p>
<p>Is there somewhere I'm missing on the forum or main TMA webpage that has a list of the current and past working groups? And possibly WGs being considered for the future for review or display of interest? Or maybe these are by invitation only? </p>
<p>Thank you</p>]]></content:encoded>
						                            <category domain="https://midi.org/community/midi-specifications">Developers &amp; MIDI 2.0 Specifications</category>                        <dc:creator>bdc91709</dc:creator>
                        <guid isPermaLink="true">https://midi.org/community/midi-specifications/working-group-list</guid>
                    </item>
				                    <item>
                        <title>MIDI-CI Property Exchange Subscription: recommended baseline synchronization after Subscription Start?</title>
                        <link>https://midi.org/community/midi-specifications/midi-ci-property-exchange-subscription-recommended-baseline-synchronization-after-subscription-start</link>
                        <pubDate>Mon, 29 Jun 2026 06:42:46 +0000</pubDate>
                        <description><![CDATA[I’m currently implementing the Responder side of MIDI-CI Property Exchange Subscription, and I have a question about the recommended synchronization behavior after Subscription Start.
As I ...]]></description>
                        <content:encoded><![CDATA[<p class="isSelectedEnd"><span>I’m currently implementing the Responder side of MIDI-CI Property Exchange Subscription, and I have a question about the recommended synchronization behavior after Subscription Start.</span></p>
<p class="isSelectedEnd"><span>As I understand it, there is a possible race condition around the initial baseline state.</span></p>
<p class="isSelectedEnd"><span>For example:</span></p>
<ol start="1" data-spread="false">
<li><span>The Initiator performs Get and obtains the current full state of a resource.</span></li>
<li><span>The Responder’s resource changes after that Get response.</span></li>
<li><span>The Initiator sends Subscription Start.</span></li>
<li><span>The Responder accepts the subscription and then starts sending Subscription Partial updates for subsequent changes.</span></li>
</ol>
<p class="isSelectedEnd"><span>In this sequence, the change that happened between the initial Get and the Subscription Start may not be observed by the Initiator, unless the Initiator performs another Get after Subscription Start to establish a reliable baseline.</span></p>
<p class="isSelectedEnd"><span>From an interoperability point of view, it seems safest if Initiators are recommended to perform Get after Subscription Start has been accepted, and then apply subsequent Subscription Partial updates on top of that state.</span></p>
<p class="isSelectedEnd"><span>Is there any plan to clarify this in the specification or implementation guidelines?</span></p>
<p class="isSelectedEnd"><span>If this behavior is not recommended or required for Initiators, then as a conservative Responder implementation, I may need to send Subscription Notify immediately after accepting Subscription Start, in order to prompt the Initiator to retrieve the current full state.</span></p>
<p class="isSelectedEnd"><span>However, if both sides behave conservatively, this can result in redundant Gets:</span></p>
<ul data-spread="false">
<li><span>The Initiator sends Get after Subscription Start to establish the baseline.</span></li>
<li><span>The Responder also sends Subscription Notify after Subscription Start to prompt a Get.</span></li>
<li><span>The Initiator may then perform an additional Get because of the Notify.</span></li>
</ul>
<p class="isSelectedEnd"><span>This is not necessarily incorrect, but it seems inefficient and could lead to inconsistent implementation patterns between devices.</span></p>
<p class="isSelectedEnd"><span>So my questions are:</span></p>
<ol start="1" data-spread="false">
<li><span>Is the intended/recommended behavior that an Initiator should perform Get after Subscription Start has been accepted, in order to establish a reliable initial baseline?</span></li>
<li><span>If so, would it be appropriate to clarify this as a recommended practice in the specification or implementation guidelines?</span></li>
<li><span>If not, what is the recommended Responder behavior to avoid missed changes around Subscription Start?</span></li>
<li><span>Should a Responder send Subscription Notify immediately after accepting Subscription Start, or should it avoid doing so to prevent redundant Gets?</span></li>
</ol>
<p><span>My main concern is ensuring that the Initiator and Responder can share a complete and correct resource image without relying on implementation-specific assumptions.</span></p>]]></content:encoded>
						                            <category domain="https://midi.org/community/midi-specifications">Developers &amp; MIDI 2.0 Specifications</category>                        <dc:creator>Ryo Susami</dc:creator>
                        <guid isPermaLink="true">https://midi.org/community/midi-specifications/midi-ci-property-exchange-subscription-recommended-baseline-synchronization-after-subscription-start</guid>
                    </item>
				                    <item>
                        <title>Getting JR Timestamps working on a USB MIDI 2.0 translator device</title>
                        <link>https://midi.org/community/midi-specifications/getting-jr-timestamps-working-on-a-usb-midi-2-0-translator-device</link>
                        <pubDate>Mon, 25 May 2026 09:14:22 +0000</pubDate>
                        <description><![CDATA[I&#039;ve been building a USB MIDI 2.0 8-port DIN interface on an RP2040 and have gotten it enumerating correctly on Linux (kernel 6.17) as a UMP Streaming device (ALSA leaves the JR clock handli...]]></description>
                        <content:encoded><![CDATA[<p>I've been building a USB MIDI 2.0 8-port DIN interface on an RP2040 and have gotten it enumerating correctly on Linux (kernel 6.17) as a UMP Streaming device (ALSA leaves the JR clock handling to the application). On macOS (Tahoe) isn't CoreMidi supposed to handle the JR timestamps/clocks? <br /><br />The device: A translator/interface - USB MIDI 2.0 on one side, 8 physical DIN MIDI 1.0 ports on the other. The DIN ports carry MIDI 1.0 content, so the Function Block midiProtocol is correctly set to 0x01.<br /><br />What works on macOS: After several rounds of descriptor fixes (IAD triplet, CS_INTERFACE GTB type, MS Header in alt-0, UAC 1.0 AC header format), AppleMIDIUSBDriver binds correctly and MIDIServer enumerates the device as a UMP device. MIDIServer logs confirm it reads gtb.midiProtocol=0x2 from the inline GTBs in alt-1. UMP Endpoint Discovery completes successfully.<br /><br />The problem: macOS only ever negotiates MIDI-1UP - it sends a Stream Config Request with protocol=0x01 and does not accept counter-proposals for protocol=0x02. The device appears in CoreMIDI as a standard MIDI 1.0 device. JR Timestamps/clocks are never send from the host.<br /><br />What I've tried:<br /><br />Setting bMIDIProtocol=0x02 in inline GTB descriptors (macOS reads it correctly but still negotiates 0x01)<br />Announcing midi1=true, midi2=true in Endpoint Info (no change)<br />Announcing midi1=false, midi2=true (device disappears from CoreMIDI - macOS apparently requires midi1 support)<br />Counter-proposing protocol=0x02 in Stream Config Notification (macOS ignores it and resends the 0x01 request)<br />The conclusion from MIDIServer logs is that configureDeviceUsingPortMap makes a hardcoded decision - seemingly based on the Function Block midiProtocol field - regardless of what the Endpoint Info capability flags say.<br /><br />The question:<br /><br />Are JR Timestamps ever achievable on macOS for a translator device whose function blocks report midiProtocol=0x01? Or does macOS require midiProtocol=0x02 function blocks to offer MIDI-2UP negotiation?<br /><br />If a device sets midiProtocol=0x02 on its function blocks (meaning it would present the DIN ports to the host as MIDI 2.0 channels), does macOS then negotiate MIDI-2UP and honour JR Timestamps?<br /><br />Is there any MIDI-CI or UMP Stream exchange that can prompt macOS to switch to MIDI-2UP after initial enumeration?<br /><br />And what is up with the phantom Midi 2 device with 0 ins/outs ? <br /><br />Any insight from people who have shipped MIDI 2.0 devices that work under CoreMIDI would be very welcome.</p>]]></content:encoded>
						                            <category domain="https://midi.org/community/midi-specifications">Developers &amp; MIDI 2.0 Specifications</category>                        <dc:creator>Johannes</dc:creator>
                        <guid isPermaLink="true">https://midi.org/community/midi-specifications/getting-jr-timestamps-working-on-a-usb-midi-2-0-translator-device</guid>
                    </item>
				                    <item>
                        <title>Port 255 (Midi 1.0)</title>
                        <link>https://midi.org/community/midi-specifications/port-255-midi-1-0</link>
                        <pubDate>Wed, 20 May 2026 12:06:48 +0000</pubDate>
                        <description><![CDATA[If I in a midi file see a port value of 11111111, how should i interpret it?What is most likely the midi authors intention with that number?Right now I am simply allocating it to port 255 in...]]></description>
                        <content:encoded><![CDATA[<p>If I in a midi file see a port value of 11111111, how should i interpret it?<br />What is most likely the midi authors intention with that number?<br />Right now I am simply allocating it to port 255 in my app, since then it at least does not interfere with any of the 'normal' ports.<br />AI suggests it could mean its connected to all ports at same time, omni. Or that it means unassigned, which I guess is port 0, but what if there is tracks with port <br />0.<br />PS. I know ports is not part of standard midi 1.0 spec, but I hope one of you still knows the answer.<br /><br />Thanks for any answers.</p>]]></content:encoded>
						                            <category domain="https://midi.org/community/midi-specifications">Developers &amp; MIDI 2.0 Specifications</category>                        <dc:creator>Lido</dc:creator>
                        <guid isPermaLink="true">https://midi.org/community/midi-specifications/port-255-midi-1-0</guid>
                    </item>
							        </channel>
        </rss>
		