{"action":"created","issue":{"url":"https://api.github.com/repos/WebAudio/web-midi-api/issues/148","labels_url":"https://api.github.com/repos/WebAudio/web-midi-api/issues/148/labels{/name}","comments_url":"https://api.github.com/repos/WebAudio/web-midi-api/issues/148/comments","events_url":"https://api.github.com/repos/WebAudio/web-midi-api/issues/148/events","html_url":"https://github.com/WebAudio/web-midi-api/issues/148","id":82143209,"number":148,"title":"Expose system-level grouping of MIDIPorts","user":{"login":"agoode","id":59842,"avatar_url":"https://avatars.githubusercontent.com/u/59842?v=3","gravatar_id":"","url":"https://api.github.com/users/agoode","html_url":"https://github.com/agoode","followers_url":"https://api.github.com/users/agoode/followers","following_url":"https://api.github.com/users/agoode/following{/other_user}","gists_url":"https://api.github.com/users/agoode/gists{/gist_id}","starred_url":"https://api.github.com/users/agoode/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/agoode/subscriptions","organizations_url":"https://api.github.com/users/agoode/orgs","repos_url":"https://api.github.com/users/agoode/repos","events_url":"https://api.github.com/users/agoode/events{/privacy}","received_events_url":"https://api.github.com/users/agoode/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/WebAudio/web-midi-api/labels/needs%20WG%20review","name":"needs WG review","color":"e11d21"}],"state":"open","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/WebAudio/web-midi-api/milestones/2","html_url":"https://github.com/WebAudio/web-midi-api/milestones/V1","labels_url":"https://api.github.com/repos/WebAudio/web-midi-api/milestones/2/labels","id":294310,"number":2,"title":"V1","description":"","creator":{"login":"cwilso","id":507001,"avatar_url":"https://avatars.githubusercontent.com/u/507001?v=3","gravatar_id":"","url":"https://api.github.com/users/cwilso","html_url":"https://github.com/cwilso","followers_url":"https://api.github.com/users/cwilso/followers","following_url":"https://api.github.com/users/cwilso/following{/other_user}","gists_url":"https://api.github.com/users/cwilso/gists{/gist_id}","starred_url":"https://api.github.com/users/cwilso/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cwilso/subscriptions","organizations_url":"https://api.github.com/users/cwilso/orgs","repos_url":"https://api.github.com/users/cwilso/repos","events_url":"https://api.github.com/users/cwilso/events{/privacy}","received_events_url":"https://api.github.com/users/cwilso/received_events","type":"User","site_admin":false},"open_issues":9,"closed_issues":18,"state":"open","created_at":"2013-03-22T22:44:06Z","updated_at":"2015-06-01T14:56:35Z","due_on":null,"closed_at":null},"comments":5,"created_at":"2015-05-28T22:02:48Z","updated_at":"2015-06-02T14:53:27Z","closed_at":null,"body":"Both ALSA and CoreMIDI (Mac) have a 2-level organization of MIDI ports. The first level (called Entity in CoreMIDI and Client in ALSA) typically corresponds to an application or single hardware device. The second level (called Endpoint in Core MIDI and Port in ALSA) corresponds to actual MIDI ports.\r\n\r\nMost USB MIDI devices have a single Entity (the device itself), but multiple Endpoints (the individual MIDI ports on a interface device, or the internal connections on a keyboard or synth). This allows software to reflect the grouping implicit in the hardware.\r\n\r\nWeb MIDI only exposes the second concept, as `MIDIPort`. It would be nice to have a way to express the first level concept in WebMIDI, so that software can say \"Port X\" on the \"Y MIDI interface\", and display appropriately."},"comment":{"url":"https://api.github.com/repos/WebAudio/web-midi-api/issues/comments/107980934","html_url":"https://github.com/WebAudio/web-midi-api/issues/148#issuecomment-107980934","issue_url":"https://api.github.com/repos/WebAudio/web-midi-api/issues/148","id":107980934,"user":{"login":"agoode","id":59842,"avatar_url":"https://avatars.githubusercontent.com/u/59842?v=3","gravatar_id":"","url":"https://api.github.com/users/agoode","html_url":"https://github.com/agoode","followers_url":"https://api.github.com/users/agoode/followers","following_url":"https://api.github.com/users/agoode/following{/other_user}","gists_url":"https://api.github.com/users/agoode/gists{/gist_id}","starred_url":"https://api.github.com/users/agoode/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/agoode/subscriptions","organizations_url":"https://api.github.com/users/agoode/orgs","repos_url":"https://api.github.com/users/agoode/repos","events_url":"https://api.github.com/users/agoode/events{/privacy}","received_events_url":"https://api.github.com/users/agoode/received_events","type":"User","site_admin":false},"created_at":"2015-06-02T14:53:27Z","updated_at":"2015-06-02T14:53:27Z","body":"There is probably a way to extract the info on Windows. See https://msdn.microsoft.com/en-us/library/windows/hardware/ff536382%28v=vs.85%29.aspx.\r\n\r\nChrome does something with this structure to extract the USB vendor and product numbers. If there is a way to link back to a hardware node, then this functionality can exist on Windows as well."}}