1 #ifndef LIBRARIES_CAMD_H 2 #define LIBRARIES_CAMD_H 3 4 #include <exec/lists.h> 5 #include <exec/types.h> 6 #include <utility/tagitem.h> 7 8 enum 9 { 10 CD_Linkages, 11 CD_NLocks 12 }; 13 14 15 typedef union 16 { 17 ULONG l[2]; 18 UBYTE b[4]; 19 } MidiMsg; 20 21 22 #define mm_Msg l[0] 23 #define mm_Time l[1] 24 #define mm_Status b[0] 25 #define mm_Data1 b[1] 26 #define mm_Data2 b[2] 27 #define mm_Port b[3] 28 #define mm_Data b 29 30 31 #define voicemsg(m,a) (((m)->mm_Status & MS_StatBits) == (a)) 32 #define sysmsg(m) ((m)->mm_Status >= MS_System) 33 #define noteon(m) (voicemsg(m,MS_NoteOn) && (m)->mm_Data2) 34 #define realtime(m) ((m)->mm_Status >= MS_RealTime) 35 #define modemsg(m) (voicemsg(m,MS_Ctrl) && (m)->mm_Data1 >= MM_Min) 36 37 38 struct MidiCluster 39 { 40 struct Node mcl_Node; 41 WORD mcl_Participants; 42 struct List mcl_Receivers; 43 struct List mcl_Senders; 44 WORD mcl_PublicParticipants; 45 UWORD mcl_Flags; 46 }; 47 48 49 struct MidiLink 50 { 51 struct Node ml_Node; 52 WORD ml_Pad; 53 struct MinNode ml_OwnerNode; 54 struct MidiNode *ml_MidiNode; 55 struct MidiCluster *ml_Location; 56 char *ml_ClusterComment; 57 UBYTE ml_Flags; 58 UBYTE ml_PortID; 59 UWORD ml_ChannelMask; 60 ULONG ml_EventTypeMask; 61 62 union SysExFilter 63 { 64 UBYTE b[4]; 65 ULONG sxf_Packed; 66 } ml_SysExFilter; 67 68 APTR ml_ParserData; 69 APTR ml_UserData; 70 }; 71 72 #define sxf_Mode b[0] 73 #define sxf_ID1 b[1] 74 #define sxf_ID2 b[2] 75 #define sxf_ID3 b[3] 76 77 78 enum 79 { 80 MLTYPE_Receiver, 81 MLTYPE_Sender, 82 MLTYPE_NTypes 83 }; 84 85 86 #define MLF_Sender (1 << 0) 87 #define MLF_PartChange (1 << 1) 88 #define MLF_PrivateLink (1 << 2) 89 #define MLF_DeviceLink (1 << 3) 90 91 #define MLINK_Base (TAG_USER + 65) 92 93 #define MLINK_Location (MLINK_Base + 0) 94 #define MLINK_ChannelMask (MLINK_Base + 1) 95 #define MLINK_EventMask (MLINK_Base + 2) 96 #define MLINK_UserData (MLINK_Base + 3) 97 #define MLINK_Comment (MLINK_Base + 4) 98 #define MLINK_PortID (MLINK_Base + 5) 99 #define MLINK_Private (MLINK_Base + 6) 100 #define MLINK_Priority (MLINK_Base + 7) 101 #define MLINK_SysExFilter (MLINK_Base + 8) 102 #define MLINK_SysExFilterX (MLINK_Base + 9) 103 #define MLINK_Parse (MLINK_Base + 10) 104 #define MLINK_Reserved (MLINK_Base + 11) 105 #define MLINK_ErrorCode (MLINK_Base + 12) 106 #define MLINK_Name (MLINK_Base + 13) 107 108 #define SXF_ModeBits 0x04 109 #define SXF_CountBits 0x03 110 111 #define SXFM_Off 0x00 112 #define SXFM_1Byte 0x00 113 #define SXFM_3Byte 0x04 114 115 116 struct MidiNode 117 { 118 struct Node mi_Node; 119 UWORD mi_ClientType; 120 struct Image *mi_Image; 121 struct MinList mi_OutLinks; 122 struct MinList mi_InLinks; 123 struct Task *mi_SigTask; 124 struct Hook *mi_ReceiveHook; 125 struct Hook *mi_ParticipantHook; 126 BYTE mi_ReceiveSigBit; 127 BYTE mi_ParticipantSigBit; 128 UBYTE mi_ErrFilter; 129 UBYTE mi_Alignment[1]; 130 ULONG *mi_TimeStamp; 131 ULONG mi_MsgQueueSize; 132 ULONG mi_SysExQueueSize; 133 }; 134 135 #define CCType_Sequencer (1 << 0) 136 #define CCType_SampleEditor (1 << 1) 137 #define CCType_PatchEditor (1 << 2) 138 #define CCType_Notator (1 << 3) 139 #define CCType_EventProcessor (1 << 4) 140 #define CCType_EventFilter (1 << 5) 141 #define CCType_EventRouter (1 << 6) 142 #define CCType_ToneGenerator (1 << 7) 143 #define CCType_EventGenerator (1 << 8) 144 #define CCType_GraphicAnimator (1 << 9) 145 146 #define MIDI_Base (TAG_USER + 65) 147 #define MIDI_Name (MIDI_Base + 0) 148 #define MIDI_SignalTask (MIDI_Base + 1) 149 #define MIDI_RecvHook (MIDI_Base + 2) 150 #define MIDI_PartHook (MIDI_Base + 3) 151 #define MIDI_RecvSignal (MIDI_Base + 4) 152 #define MIDI_PartSignal (MIDI_Base + 5) 153 #define MIDI_MsgQueue (MIDI_Base + 6) 154 #define MIDI_SysExSize (MIDI_Base + 7) 155 #define MIDI_TimeStamp (MIDI_Base + 8) 156 #define MIDI_ErrFilter (MIDI_Base + 9) 157 #define MIDI_ClientType (MIDI_Base + 10) 158 #define MIDI_Image (MIDI_Base + 11) 159 #define MIDI_ErrorCode (MIDI_Base + 12) 160 161 #define CME_NoMem 801 162 #define CME_NoSignals 802 163 #define CME_NoTimer 803 164 #define CME_BadPrefs 804 165 #define CME_NoUnit(unit) (820 + (unit)) 166 167 #define CMB_Note 0 168 #define CMB_Prog 1 169 #define CMB_PitchBend 2 170 171 #define CMB_CtrlMSB 3 172 #define CMB_CtrlLSB 4 173 #define CMB_CtrlSwitch 5 174 #define CMB_CtrlByte 6 175 #define CMB_CtrlParam 7 176 #define CMB_CtrlUndef 8 177 178 #define CMB_Mode 9 179 #define CMB_ChanPress 10 180 #define CMB_PolyPress 11 181 182 #define CMB_RealTime 12 183 #define CMB_SysCom 13 184 #define CMB_SysEx 14 185 186 #define CMF_Note (1L << CMB_Note) 187 #define CMF_Prog (1L << CMB_Prog) 188 #define CMF_PitchBend (1L << CMB_PitchBend) 189 190 #define CMF_CtrlMSB (1L << CMB_CtrlMSB) 191 #define CMF_CtrlLSB (1L << CMB_CtrlLSB) 192 #define CMF_CtrlSwitch (1L << CMB_CtrlSwitch) 193 #define CMF_CtrlByte (1L << CMB_CtrlByte) 194 #define CMF_CtrlParam (1L << CMB_CtrlParam) 195 #define CMF_CtrlUndef (1L << CMB_CtrlUndef) 196 197 #define CMF_Mode (1L << CMB_Mode) 198 #define CMF_ChanPress (1L << CMB_ChanPress) 199 #define CMF_PolyPress (1L << CMB_PolyPress) 200 201 #define CMF_RealTime (1L << CMB_RealTime) 202 #define CMF_SysCom (1L << CMB_SysCom) 203 #define CMF_SysEx (1L << CMB_SysEx) 204 205 #define CMF_Ctrl (CMF_CtrlMSB | CMF_CtrlLSB | CMF_CtrlSwitch | CMF_CtrlByte | CMF_CtrlParam | CMF_CtrlUndef) 206 #define CMF_Channel (CMF_Note | CMF_Prog | CMF_PitchBend | CMF_Ctrl | CMF_Mode | CMF_ChanPress | CMF_PolyPress) 207 #define CMF_All (CMF_Channel | CMF_RealTime | CMF_SysCom | CMF_SysEx) 208 209 210 #define CMEB_MsgErr 0 211 #define CMEB_BufferFull 1 212 #define CMEB_SysExFull 2 213 #define CMEB_ParseMem 3 214 #define CMEB_RecvErr 4 215 #define CMEB_RecvOverflow 5 216 #define CMEB_SysExTooBig 6 217 218 #define CMEF_MsgErr (1L << CMEB_MsgErr) 219 #define CMEF_BufferFull (1L << CMEB_BufferFull) 220 #define CMEF_SysExFull (1L << CMEB_SysExFull) 221 #define CMEF_ParseMem (1L << CMEB_ParseMem) 222 #define CMEF_RecvErr (1L << CMEB_RecvErr) 223 #define CMEF_RecvOverflow (1L << CMEB_RecvOverflow) 224 #define CMEF_SysExTooBig (1L << CMEB_SysExTooBig) 225 226 #define CMEF_All (CMEF_MsgErr | CMEF_BufferFull | CMEF_SysExFull | CMEF_SysExTooBig | CMEF_ParseMem | CMEF_RecvErr | CMEF_RecvOverflow) 227 228 enum 229 { 230 CMSG_Recv, 231 CMSG_Link 232 }; 233 234 struct cmLink 235 { 236 ULONG cml_MethodID; 237 ULONG cml_Action; 238 }; 239 240 enum 241 { 242 CACT_Link, 243 CACT_Unlink 244 }; 245 246 struct ClusterNotifyNode 247 { 248 struct MinNode cnn_Node; 249 struct Task *cnn_Task; 250 BYTE cnn_SigBit; 251 UBYTE pad[3]; 252 }; 253 254 #define PackSysExFilter0() ((ULONG)(SXFM_Off << 24)) 255 #define PackSysExFilter1(id1) ((ULONG)(SXFM_1Byte | 1) << 24 | (ULONG)(id1) << 16) 256 #define PackSysExFilter2(id1,id2) ((ULONG)(SXFM_1Byte | 2) << 24 | (ULONG)(id1) << 16 | (id2) << 8) 257 #define PackSysExFilter3(id1,id2,id3) ((ULONG)(SXFM_1Byte | 3) << 24 | (ULONG)(id1) << 16 | (id2) << 8 | (id3)) 258 #define PutMidiMsg(ml,msg) PutMidi((ml),(msg)->l[0]) 259 260 /*------------------*/ 261 /* MIDI definitions */ 262 /*------------------*/ 263 264 /* MIDI commands */ 265 266 #define MS_NoteOff 0x80 267 #define MS_NoteOn 0x90 268 #define MS_PolyPress 0xA0 269 #define MS_Ctrl 0xB0 270 #define MS_Mode 0xB0 271 #define MS_Prog 0xC0 272 #define MS_ChanPress 0xD0 273 #define MS_PitchBend 0xE0 274 275 #define MS_StatBits 0xF0 276 #define MS_ChanBits 0x0F 277 278 #define MS_System 0xF0 279 #define MS_SysEx 0xF0 280 #define MS_QtrFrame 0xF1 281 #define MS_SongPos 0xF2 282 #define MS_SongSelect 0xF3 283 #define MS_TuneReq 0xF6 284 #define MS_EOX 0xF7 285 286 #define MS_RealTime 0xF8 287 #define MS_Clock 0xF8 288 #define MS_Start 0xFA 289 #define MS_Continue 0xFB 290 #define MS_Stop 0xFC 291 #define MS_ActvSense 0xFE 292 #define MS_Reset 0xFF 293 294 295 /* MIDI standard controllers */ 296 297 #define MC_Bank 0x00 298 #define MC_ModWheel 0x01 299 #define MC_Breath 0x02 300 #define MC_Foot 0x04 301 #define MC_PortaTime 0x05 302 #define MC_DataEntry 0x06 303 #define MC_Volume 0x07 304 #define MC_Balance 0x08 305 #define MC_Pan 0x0a 306 #define MC_Expression 0x0b 307 #define MC_General1 0x10 308 #define MC_General2 0x11 309 #define MC_General3 0x12 310 #define MC_General4 0x13 311 312 #define MC_Sustain 0x40 313 #define MC_Porta 0x41 314 #define MC_Sustenuto 0x42 315 #define MC_SoftPedal 0x43 316 #define MC_Hold2 0x45 317 #define MC_General5 0x50 318 #define MC_General6 0x51 319 #define MC_General7 0x52 320 #define MC_General8 0x53 321 #define MC_ExtDepth 0x5b 322 #define MC_TremoloDepth 0x5c 323 #define MC_ChorusDepth 0x5d 324 #define MC_CelesteDepth 0x5e 325 #define MC_PhaserDepth 0x5f 326 327 #define MC_DataIncr 0x60 328 #define MC_DataDecr 0x61 329 #define MC_NRPNL 0x62 330 #define MC_NRPNH 0x63 331 #define MC_RPNL 0x64 332 #define MC_RPNH 0x65 333 334 #define MC_Max 0x78 335 336 337 /* MIDI multivoice modes */ 338 339 #define MM_Min 0x79 340 341 #define MM_ResetCtrl 0x79 342 #define MM_Local 0x7a 343 #define MM_AllOff 0x7b 344 #define MM_OmniOff 0x7c 345 #define MM_OmniOn 0x7d 346 #define MM_Mono 0x7e 347 #define MM_Poly 0x7f 348 349 #define MRP_PBSens 0x0000 350 #define MRP_FineTune 0x0001 351 #define MRP_CourseTune 0x0002 352 353 354 /* MIDI time */ 355 356 #define MTCQ_FrameL 0x00 357 #define MTCQ_FrameH 0x10 358 #define MTCQ_SecL 0x20 359 #define MTCQ_SecH 0x30 360 #define MTCQ_MinL 0x40 361 #define MTCQ_MinH 0x50 362 #define MTCQ_HourL 0x60 363 #define MTCQ_HourH 0x70 364 365 #define MTCQ_TypeMask 0x70 366 #define MTCQ_DataMask 0x0f 367 368 #define MTCH_TypeMask 0x60 369 #define MTCH_HourMask 0x1f 370 371 #define MTCT_24FPS 0x00 372 #define MTCT_25FPS 0x20 373 #define MTCT_30FPS_Drop 0x40 374 #define MTCT_30FPS_NonDrop 0x60 375 376 377 /* Vendors (the table is incomplete, should be moved to API) */ 378 379 #define MID_Sequential 0x01 380 #define MID_IDP 0x02 381 #define MID_OctavePlateau 0x03 382 #define MID_Moog 0x04 383 #define MID_Passport 0x05 384 #define MID_Lexicon 0x06 385 #define MID_Kurzweil 0x07 386 #define MID_Fender 0x08 387 #define MID_Gulbransen 0x09 388 #define MID_AKG 0x0a 389 #define MID_Voyce 0x0b 390 #define MID_Waveframe 0x0c 391 #define MID_ADA 0x0d 392 #define MID_Garfield 0x0e 393 #define MID_Ensoniq 0x0f 394 #define MID_Oberheim 0x10 395 #define MID_Apple 0x11 396 #define MID_GreyMatter 0x12 397 #define MID_PalmTree 0x14 398 #define MID_JLCooper 0x15 399 #define MID_Lowrey 0x16 400 #define MID_AdamsSmith 0x17 401 #define MID_Emu 0x18 402 #define MID_Harmony 0x19 403 #define MID_ART 0x1a 404 #define MID_Baldwin 0x1b 405 #define MID_Eventide 0x1c 406 #define MID_Inventronics 0x1d 407 #define MID_Clarity 0x1f 408 409 #define MID_XAmerica 0x00 410 411 #define MIDX_DigitalMusic 0x000007 412 #define MIDX_Iota 0x000008 413 #define MIDX_Artisyn 0x00000a 414 #define MIDX_IVL 0x00000b 415 #define MIDX_SouthernMusic 0x00000c 416 #define MIDX_LakeButler 0x00000d 417 #define MIDX_DOD 0x000010 418 #define MIDX_PerfectFret 0x000014 419 #define MIDX_KAT 0x000015 420 #define MIDX_Opcode 0x000016 421 #define MIDX_Rane 0x000017 422 #define MIDX_SpatialSound 0x000018 423 #define MIDX_KMX 0x000019 424 #define MIDX_Brenell 0x00001a 425 #define MIDX_Peavey 0x00001b 426 #define MIDX_360 0x00001c 427 #define MIDX_Axxes 0x000020 428 #define MIDX_CAE 0x000026 429 #define MIDX_Cannon 0x00002b 430 #define MIDX_BlueSkyLogic 0x00002e 431 #define MIDX_Voce 0x000031 432 433 #define MID_SIEL 0x21 434 #define MID_Synthaxe 0x22 435 #define MID_Hohner 0x24 436 #define MID_Twister 0x25 437 #define MID_Solton 0x26 438 #define MID_Jellinghaus 0x27 439 #define MID_Southworth 0x28 440 #define MID_PPG 0x29 441 #define MID_JEN 0x2a 442 #define MID_SSL 0x2b 443 #define MID_AudioVeritrieb 0x2c 444 #define MID_Elka 0x2f 445 #define MID_Dynacord 0x30 446 #define MID_Clavia 0x33 447 #define MID_Soundcraft 0x39 448 449 #define MID_Kawai 0x40 450 #define MID_Roland 0x41 451 #define MID_Korg 0x42 452 #define MID_Yamaha 0x43 453 #define MID_Casio 0x44 454 #define MID_Kamiya 0x46 455 #define MID_Akai 0x47 456 #define MID_JapanVictor 0x48 457 #define MID_Mesosha 0x49 458 459 #define MID_UNC 0x7d 460 #define MID_UNRT 0x7e 461 #define MID_URT 0x7f 462 463 #define MiddleC 60 464 #define DefaultVelocity 64 465 #define PitchBendCenter 0x2000 466 #define MClksPerQtr 24 467 #define MClksPerSP 6 468 #define MCCenter 64 469 470 #define MIDIHiByte(word) ((word) >> 7 & 0x7f) 471 #define MIDILoByte(word) ((word) & 0x7f) 472 473 #define MIDIWord(hi,lo) (((hi) & 0x7f) << 7 | ((lo) & 0x7f)) 474 475 #define MakeMIDX(id0,id1,id2) ((ULONG)(id0)<<16 | (id1)<<8 | (id2)) 476 477 478 #endif /* LIBRARIES_CAMD_H */