home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.0 / NeXTSTEP3.0.iso / NextDeveloper / Headers / mididriver / midi_spec.h < prev   
Text File  |  1991-09-13  |  4KB  |  130 lines

  1. /*
  2.  *    File:    mididriver/midi_spec.h
  3.  *    Author:    David Jaffe
  4.  *    Copyright (C) 1991, NeXT, Inc.
  5.  *
  6.  *      MIDI definitions
  7.  */
  8.  
  9. #ifndef    _MIDI_SPEC_
  10. #define _MIDI_SPEC_
  11.  
  12. /*
  13.  * MIDI status byte9rom International MIDI Association document
  14.  * MIDI-1.0, August 5, 1983)
  15.  */
  16. #define MIDI_RESETCONTROLLERS    0x79
  17. #define MIDI_LOCALCONTROL    0x7a
  18. #define MIDI_ALLNOTESOFF    0x7b
  19. #define MIDI_OMNIOFF        0x7c
  20. #define MIDI_OMNION        0x7d
  21. #define MIDI_MONO        0x7e
  22. #define MIDI_POLY        0x7f
  23. #define    MIDI_NOTEOFF        0x80
  24. #define    MIDI_NOTEON        0x90
  25. #define    MIDI_POLYPRES        0xa0
  26. #define    MIDI_CONTROL        0xb0
  27. #define    MIDI_PROGRAM        0xc0
  28. #define    MIDI_CHANPRES        0xd0
  29. #define    MIDI_PITCH        0xe0
  30. #define    MIDI_CHANMODE        MIDI_CONTROL
  31. #define    MIDI_SYSTEM        0xf0
  32. #define    MIDI_SYSEXCL        (MIDI_SYSTEM | 0x0)
  33. #define MIDI_TIMECODEQUARTER    (MIDI_SYSTEM | 0x1)
  34. #define    MIDI_SONGPOS        (MIDI_SYSTEM | 0x2)
  35. #define    MIDI_SONGSEL        (MIDI_SYSTEM | 0x3)
  36. #define    MIDI_TUNEREQ        (MIDI_SYSTEM | 0x6)
  37. #define    MIDI_EOX        (MIDI_SYSTEM | 0x7)
  38. #define MIDI_CLOCK        (MIDI_SYSTEM | 0x8)
  39. #define MIDI_START        (MIDI_SYSTEM | 0xa)
  40. #define MIDI_CONTINUE        (MIDI_SYSTEM | 0xb)
  41. #define MIDI_STOP        (MIDI_SYSTEM | 0xc)
  42. #define MIDI_ACTIVE        (MIDI_SYSTEM | 0xe)
  43. #define MIDI_RESET        (MIDI_SYSTEM | 0xf)
  44.  
  45. #define MIDI_MAXDATA            0x7f
  46. #define MIDI_OP(y)              (y & (MIDI_STATUSMASK))
  47. #define MIDI_DATA(y)            (y & (MIDI_MAXDATA))
  48. #define MIDI_MAXCHAN            0x0f
  49. #define MIDI_NUMCHANS             16
  50. #define MIDI_NUMKEYS             128
  51. #define MIDI_ZEROBEND         0x2000
  52. #define MIDI_DEFAULTVELOCITY     64
  53.  
  54. /* MIDI Controller numbers */
  55.  
  56. #define MIDI_MODWHEEL           1
  57. #define MIDI_BREATH             2
  58. #define MIDI_FOOT               4
  59. #define MIDI_PORTAMENTOTIME     5
  60. #define MIDI_DATAENTRY          6
  61. #define MIDI_MAINVOLUME         7
  62. #define MIDI_BALANCE            8
  63. #define MIDI_PAN                10
  64. #define MIDI_EXPRESSION         11
  65. #define MIDI_EFFECTCONTROL1    12
  66. #define MIDI_EFFECTCONTROL2    13            
  67.  
  68. /* LSB for above */
  69. #define MIDI_MODWHEELLSB        (1 + 31)  
  70. #define MIDI_BREATHLSB          (2 + 31)
  71. #define MIDI_FOOTLSB            (4 + 31)
  72. #define MIDI_PORTAMENTOTIMELSB  (5 + 31)
  73. #define MIDI_DATAENTRYLSB       (6 + 31)
  74. #define MIDI_MAINVOLUMELSB      (7 + 31)
  75. #define MIDI_BALANCELSB         (8 + 31)
  76. #define MIDI_PANLSB             (10 + 31)
  77. #define MIDI_EXPRESSIONLSB      (11 + 31)
  78.  
  79. #define MIDI_DAMPER             64
  80. #define MIDI_PORTAMENTO         65
  81. #define MIDI_SOSTENUTO          66
  82. #define MIDI_SOFTPEDAL          67
  83. #define MIDI_HOLD2              69
  84. /*
  85.  * Controller 91-@efinitions from original 1.0 MIDI spec
  86.  */
  87. #define MIDI_EXTERNALEFFECTSDEPTH 91
  88. #define MIDI_TREMELODEPTH       92
  89. #define MIDI_CHORUSDEPTH        93
  90. #define MIDI_DETUNEDEPTH        94
  91. #define MIDI_PHASERDEPTH        95
  92. /*
  93.  * Controller 91-95 definitions as of June 1990
  94.  */
  95. #define MIDI_EFFECTS1        91
  96. #define MIDI_EFFECTS2        92
  97. #define MIDI_EFFECTS3        93
  98. #define MIDI_EFFECTS4        94
  99. #define MIDI_EFFECTS5        95
  100. #define MIDI_DATAINCREMENT      96
  101. #define MIDI_DATADECREMENT      97
  102.  
  103. /*
  104.  * Masks for disassembling MIDI status bytes
  105.  */
  106. #define    MIDI_STATUSBIT    0x80    /* indicates this is a status byte */
  107. #define    MIDI_STATUSMASK    0xf0    /* bits indicating type of status req */
  108. #define    MIDI_SYSRTBIT    0x08    /* differentiates SYSRT from SYSCOM */
  109.  
  110. /* Some useful parsing macros. */
  111. #define MIDI_TYPE_SYSTEM_REALTIME(byte)    (((byte)&0xf8) == 0xf8)
  112. #define MIDI_TYPE_1BYTE(byte)    (   MIDI_TYPE_SYSTEM_REALTIME(byte) \
  113.                  || (byte) == 0xf6 || (byte) == 0xf7)
  114. #define MIDI_TYPE_2BYTE(byte)    (   (((byte)&0xe0) == 0xc0) \
  115.                  || (((byte)&0xe0) == 0xd0) \
  116.                  || ((byte)&0xfd) == 0xf1)
  117. #define MIDI_TYPE_3BYTE(byte)    (   ((byte)&0xc0) == 0x80 \
  118.                  || ((byte)&0xe0) == 0xe0 \
  119.                  || (byte) == 0xf2)
  120. #define MIDI_TYPE_SYSTEM(byte)    (((byte)&0xf0) == 0xf0)
  121. #define MIDI_EVENTSIZE(byte)    (MIDI_TYPE_1BYTE(byte) ? 1 : \
  122.                  MIDI_TYPE_2BYTE(byte) ? 2 : 3)
  123.                  
  124.  
  125.  
  126.  
  127. #endif    _MIDI_SPEC_
  128.  
  129.  
  130.