MidiEvPtr


A MidiShare event. Most events are made of one fixed size cell. Some events like typeSysEx require additional cells.

typedef struct TMidiEv *MidiEvPtr;        
typedef struct TMidiEv
{
    MidiEvPtr link;                 // link to next event                
    unsigned long date;             // event date (in ms)                 
    Byte evType;                    // event type                         
    Byte refNum;                    // sender reference number             
    Byte port;                      // Midi port                         
    Byte chan;                      // Midi channel                         
    union {                         // info depending of event type :    
       struct {                       // for notes                    
          Byte pitch;                   // pitch                      
          Byte vel;                     // velocity                 
          unsigned short dur;           // duration                 
       } note;
       Byte data[4];                  // for typeKeyOn and other small events         
       MidiSEXPtr linkSE;             // for typeSysEx and other variable length events    
       MidiSTPtr linkST;              // for typeProcess and other special events    
    } info;
} TMidiEv;

Macros for accessing the common parts of an event.

#define Link(e)    ( (e)->link )
#define Date(e)    ( (e)->date )
#define EvType(e)  ( (e)->evType )
#define RefNum(e)  ( (e)->refNum )    
#define Port(e)    ( (e)->port )
#define Canal(e)   ( (e)->chan )
#define Chan(e)    ( (e)->chan )

Macros for accessing the specific parts.

#define Pitch(e)     ( (e)->info.note.pitch ) 
#define Vel(e)       ( (e)->info.note.vel ) 
#define Dur(e)       ( (e)->info.note.dur )
#define Data(e)      ( (e)->info.data )
#define LinkSE(e)    ( (e)->info.linkSE )
#define LinkST(e)    ( (e)->info.linkST )

instead of these macros, you should use MidiGetField and MidiSetField which provides a uniform acces to the specific fields of an event.