Re: Stuck MIDI notes
Re: Stuck MIDI notes
- Subject: Re: Stuck MIDI notes
- From: Robert Grant <email@hidden>
- Date: Thu, 31 Oct 2002 03:44:13 -0800 (PST)
I see. I thought that the packet list was a list of MIDI messages nicely split up so that data[0] is the
status/channel byte. I know it's not robust as far as Sysex goes but I thought (given my assumption)
it would be satisfactory for the other messages. It seems a little unfriendly to have possibly
more MIDI messages packed inside the packet as it means that everyone now has to write a MIDI packet
parser.
Robert.
On Wednesday, Oct 30, 2002, at 10:12PM, Kurt Revis <email@hidden> wrote:
>
On Wednesday, October 30, 2002, at 05:03 PM, Robert Grant wrote:
>
>
> So then I'm confused about why I'm losing the note offs. My code is
>
> to crunch the packets is pretty straightforward:
>
>
>
> MIDIPacket *inPacket = (MIDIPacket *)list->packet; // remove const
>
>
>
> for ( j = 0; j < list->numPackets; ++j) {
>
> if ((inPacket->data[0] & 0x7) == m_channel) {
>
> MusicDeviceMIDIEvent(unit, inPacket->data[0],
>
> inPacket->data[1], inPacket->data[2],
>
> 0);
>
> }
>
> inPacket = MIDIPacketNext(inPacket);
>
> }
>
>
This really isn't enough to parse MIDI correctly. Contrary to what
>
you're assuming, each packet may contain more than one MIDI event.
>
There may also be realtime messages (like MIDI clock) interspersed with
>
the data, and sysex messages may get split across multiple packets.
>
You need to handle all of these cases. Most of the time you'll only
>
get one event per packet, but it's not something you can count on.
>
>
You might find it educational to print out all the bytes in each packet
>
as they come in, so you can see this for yourself. And read the MIDI
>
spec... you'll be amazed at how weird things can get.
>
>
--
>
Kurt Revis
>
email@hidden
_______________________________________________
coreaudio-api mailing list | email@hidden
Help/Unsubscribe/Archives:
http://www.lists.apple.com/mailman/listinfo/coreaudio-api
Do not post admin requests to the list. They will be ignored.