- From: Chris Wilson <cwilso@google.com>
- Date: Thu, 29 Nov 2012 15:39:01 -0800
- To: James Ingram <j.ingram@netcologne.de>
- Cc: "public-audio@w3.org" <public-audio@w3.org>, Jussi Kalliokoski <jussi.kalliokoski@gmail.com>
- Message-ID: <CAJK2wqVB+EpD2AKSpkWR-TZaRzNN0cO8cJx-uPt14EBC4pb1Qw@mail.gmail.com>
Hey James, Definitely, we need to add a bunch of (informative) JavaScript code examples to the spec. It's on my list. :) On Thu, Nov 29, 2012 at 3:12 PM, James Ingram <j.ingram@netcologne.de>wrote: > Chris, > > Thanks for the answer. I'm kicking myself for having hit my send button a > bit early last time... > > Let's just say that I now understand things much better than I did, and > your answer put the icing on the cake. Hopefully I won't be the only one to > have profited from reading it. > > There's obviously going to be a need for a short explanation of how to use > the API from Javascript. Maybe even a small standard library. That being > the case, I don't think its crucial to Javascript programmers which way you > go. If anything I'm now leaning towards removing MIDIMessages from the API. > > All the best, > James > > > Am 29.11.2012 19:43, schrieb Chris Wilson: > >> James, >> >> I think you missed it, but we explicitly moved away from having two >> different send methods, and using MIDIMessage in send, specifically so that >> we wouldn't need to have a constructor for MIDIMessage, and so that we >> wouldn't have two different forms of what is essentially the same function. >> Using one form, with a sequence parameter and a timestamp, enables us to >> have timestamping on short and long messages, variable-length messages, and >> only one send method. >> >> Note that you DON'T really have to think about UInt8Arrays, on purpose - >> when you call send, it takes a sequence, so it can be anything that >> functions like an array, which means you can call: >> >> send( [ 0x90, 0x45, 0x27 ] ); >> >> (the [] creates an Array in JS.) >> >> On the other end, when you receive a MIDI message (regardless of the >> MIDIMessage change), although the parameter is a UInt8Array, you can again >> just treat it like an array of numbers, you don't have to think about it >> being UInt8Arrays >> >> EXAMPLE USING PROPOSED REMOVAL OF MIDIMESSAGE: >> onmessage( event ) { >> if (event.data.length < 4) { // "short" MIDI message >> switch ( event.data[0] & 0xf0 ) { >> case 0x90: // Note on! >> notenumber = event.data[1]; >> velocity = event.data[2]; >> ... // etc, etc >> } >> } else { >> // sysex! >> } >> } >> >> SAME EXAMPLE, USING CURRENT MIDIMESSAGE: >> onmessage( event ) { >> for (var i=0; i<event.messages.length; i++ ) { >> if (event.messages[i].data.length < 4) { // "short" MIDI message >> switch ( event.messages[i].data[0] & 0xf0 ) { >> case 0x90: // Note on! >> notenumber = event.messages[i].data[1]; >> velocity = event.messages[i].data[2]; >> ... // etc, etc >> } >> } else { >> // sysex! >> } >> } >> } >> >> The main reason for using UInt8Array is it will be more efficient when >> using sysex, particularly when doing file storage. But the average user >> shouldn't have to think about it. >> >> I know the API is relatively small already. But the fewer objects there >> are, the fewer object lifetimes there are to manage, as well as the less >> developers have to understand in order to be productive. If there's >> significant value, then I'm okay with additional API; I don't see much >> significant value right now, and (see above) the code needed for a simple >> note handler becomes more complex. >> >> >> On Thu, Nov 29, 2012 at 3:24 AM, James Ingram <j.ingram@netcologne.de<mailto: >> j.ingram@netcologne.de**>> wrote: >> >> Sitting on the user side, I'd like to keep MIDIMessage objects in >> the API (separate from MIDIEvent). >> >> 1. The API is actually very small. Increasing its size by >> including a separate MIDIMessage does not make the API >> significantly more difficult to understand. >> >> 2. I want to have a MIDIMessage constructor for creating messages, >> and I'd prefer that to be handled by the API. I don't want to have >> to think about UInt8Arrays. If MIDIMessages exist (for that >> reason), it makes sense to expect to find them in MIDIEvents too. >> >> Question: Does a MIDIMessage constructor need to be put in the spec? >> >> Possible suggestion (ignore at your pleasure): It would be >> convenient if MIDIOutput could also send a MidiEvent. I seem to >> remember that the 'send' function used to be called >> 'sendMIDIMessage'. Maybe that change should be reverted, and >> MIDIOutput could also be given a 'sendMidiEvent' function. >> >> best, >> James >> >> >> >> > >
Received on Friday, 30 November 2012 00:05:10 UTC