Mac OS 9
QuickTimeMusic.h
Go to the documentation of this file.
1 
19 #ifndef __QUICKTIMEMUSIC__
20 #define __QUICKTIMEMUSIC__
21 
22 #ifndef __COMPONENTS__
23 #include <Components.h>
24 #endif
25 
26 #ifndef __QUICKDRAW__
27 #include <Quickdraw.h>
28 #endif
29 
30 #ifndef __VIDEO__
31 #include <Video.h>
32 #endif
33 
34 #ifndef __MACMEMORY__
35 #include <MacMemory.h>
36 #endif
37 
38 #ifndef __SOUND__
39 #include <Sound.h>
40 #endif
41 
42 #ifndef __ENDIAN__
43 #include <Endian.h>
44 #endif
45 
46 #ifndef __IMAGECOMPRESSION__
47 #include <ImageCompression.h>
48 #endif
49 
50 #ifndef __MOVIES__
51 #include <Movies.h>
52 #endif
53 
54 #if PRAGMA_ONCE
55 #pragma once
56 #endif
57 
58 #ifdef __cplusplus
59 extern "C"
60 {
61 #endif
62 
63 #if PRAGMA_IMPORT
64 #pragma import on
65 #endif
66 
67 #if PRAGMA_STRUCT_ALIGN
68 #pragma options align = mac68k
69 #elif PRAGMA_STRUCT_PACKPUSH
70 #pragma pack(push, 2)
71 #elif PRAGMA_STRUCT_PACK
72 #pragma pack(2)
73 #endif
74 
75  enum
76  {
77  kaiToneDescType = FOUR_CHAR_CODE('tone'),
78  kaiNoteRequestInfoType = FOUR_CHAR_CODE('ntrq'),
79  kaiKnobListType = FOUR_CHAR_CODE('knbl'),
80  kaiKeyRangeInfoType = FOUR_CHAR_CODE('sinf'),
81  kaiSampleDescType = FOUR_CHAR_CODE('sdsc'),
82  kaiSampleInfoType = FOUR_CHAR_CODE('smin'),
83  kaiSampleDataType = FOUR_CHAR_CODE('sdat'),
84  kaiSampleDataQUIDType = FOUR_CHAR_CODE('quid'),
85  kaiInstInfoType = FOUR_CHAR_CODE('iinf'),
86  kaiPictType = FOUR_CHAR_CODE('pict'),
87  kaiWriterType = FOUR_CHAR_CODE('©wrt'),
88  kaiCopyrightType = FOUR_CHAR_CODE('©cpy'),
89  kaiOtherStrType = FOUR_CHAR_CODE('str '),
90  kaiInstrumentRefType = FOUR_CHAR_CODE('iref'),
91  kaiInstGMQualityType = FOUR_CHAR_CODE('qual'),
92  kaiLibraryInfoType = FOUR_CHAR_CODE('linf'),
93  kaiLibraryDescType = FOUR_CHAR_CODE('ldsc')
94  };
95 
97  {
98  Str31 libIDName;
99  };
100  typedef struct InstLibDescRec InstLibDescRec;
101  struct InstKnobRec
102  {
103  BigEndianLong number;
104  BigEndianLong value;
105  };
106  typedef struct InstKnobRec InstKnobRec;
107  enum
108  {
109  kInstKnobMissingUnknown = 0,
110  kInstKnobMissingDefault = (1 << 0)
111  };
112 
114  {
115  BigEndianLong knobCount;
116  BigEndianLong knobFlags;
117  InstKnobRec knob[1];
118  };
119  typedef struct InstKnobList InstKnobList;
120  enum
121  {
122  kMusicLoopTypeNormal = 0,
123  kMusicLoopTypePalindrome = 1 /* back & forth*/
124  };
125 
126  enum
127  {
128  instSamplePreProcessFlag = 1 << 0
129  };
130 
132  {
133  BigEndianOSType dataFormat;
134  BigEndianShort numChannels;
135  BigEndianShort sampleSize;
136  BigEndianUnsignedFixed sampleRate;
137  BigEndianShort sampleDataID;
138  BigEndianLong offset; /* offset within SampleData - this could be just for
139  internal use*/
141  numSamples; /* this could also just be for internal use, we'll see*/
142 
143  BigEndianLong loopType;
144  BigEndianLong loopStart;
145  BigEndianLong loopEnd;
146 
147  BigEndianLong pitchNormal;
148  BigEndianLong pitchLow;
149  BigEndianLong pitchHigh;
150  };
151  typedef struct InstSampleDescRec InstSampleDescRec;
152 
153  typedef Handle AtomicInstrument;
154  typedef Ptr AtomicInstrumentPtr;
155  enum
156  {
157  kQTMIDIComponentType = FOUR_CHAR_CODE('midi')
158  };
159 
160  enum
161  {
162  kOMSComponentSubType = FOUR_CHAR_CODE('OMS '),
163  kFMSComponentSubType = FOUR_CHAR_CODE('FMS '),
164  kMIDIManagerComponentSubType = FOUR_CHAR_CODE('mmgr'),
165  kOSXMIDIComponentSubType = FOUR_CHAR_CODE('osxm')
166  };
167 
169  enum
170  {
171  kMusicPacketPortLost =
172  1, /* received when application loses the default input port */
173  kMusicPacketPortFound = 2, /* received when application gets it back out from
174  under someone else's claim */
175  kMusicPacketTimeGap =
176  3 /* data[0] = number of milliseconds to keep the MIDI line silent */
177  };
178 
179  enum
180  {
181  kAppleSysexID = 0x11, /* apple sysex is followed by 2-byte command. 0001 is
182  the command for samplesize */
183  kAppleSysexCmdSampleSize = 0x0001, /* 21 bit number in 3 midi bytes follows
184  sysex ID and 2 cmd bytes */
185  kAppleSysexCmdSampleBreak =
186  0x0002, /* specifies that the sample should break right here */
187  kAppleSysexCmdAtomicInstrument =
188  0x0010, /* contents of atomic instrument handle */
189  kAppleSysexCmdDeveloper =
190  0x7F00 /* F0 11 7F 00 ww xx yy zz ... F7 is available for non-Apple
191  developers, where wxyz is unique app signature with 8th bit
192  cleared, unique to developer, and 00 and 7f are reserved */
193  };
194 
196  {
197  unsigned short length;
198  unsigned long reserved; /* if length zero, then reserved = above enum */
199  UInt8 data[249];
200  };
201  typedef struct MusicMIDIPacket MusicMIDIPacket;
202  typedef CALLBACK_API(ComponentResult,
203  MusicMIDISendProcPtr)(ComponentInstance self, long refCon,
204  MusicMIDIPacket *mmp);
205  typedef STACK_UPP_TYPE(MusicMIDISendProcPtr) MusicMIDISendUPP;
206  enum
207  {
208  kSynthesizerConnectionFMS = 1, /* this connection imported from FMS */
209  kSynthesizerConnectionMMgr =
210  2, /* this connection imported from the MIDI Mgr */
211  kSynthesizerConnectionOMS = 4, /* this connection imported from OMS */
212  kSynthesizerConnectionQT = 8, /* this connection is a QuickTime-only port */
213  kSynthesizerConnectionOSXMIDI =
214  16, /* this connection is an OS X CoreMIDI port */
215  /* lowest five bits are mutually exclusive; combinations reserved for future
216  use.*/
217  kSynthesizerConnectionUnavailable =
218  256 /* port exists, but cannot be used just now */
219  };
220 
241  {
242  OSType clientID;
243  OSType inputPortID; /* terminology death: this port is used to SEND to the
244  midi synth */
245  OSType outputPortID; /* terminology death: this port receives from a keyboard
246  or other control device */
247  long midiChannel; /* The system channel; others are configurable (or the nubus
248  slot number) */
249  long flags;
250  long unique; /* unique id may be used instead of index, to getinfo and
251  unregister calls */
252  FSSpecPtr sampleBankFile; /* see notes above */
253  long reserved2; /* should be zero */
254  };
256  struct QTMIDIPort
257  {
258  SynthesizerConnections portConnections;
259  Str63 portName;
260  };
261  typedef struct QTMIDIPort QTMIDIPort;
263  {
264  short portCount;
265  QTMIDIPort port[1];
266  };
267  typedef struct QTMIDIPortList QTMIDIPortList;
279  ComponentResult
281  QTMIDIPortListHandle *outputPorts);
282 
292  ComponentResult
293  QTMIDIUseSendPort(QTMIDIComponent ci, long portIndex, long inUse);
294 
304  ComponentResult
306 
307  enum
308  {
309  kMusicComponentType = FOUR_CHAR_CODE('musi'),
310  kInstrumentComponentType = FOUR_CHAR_CODE('inst')
311  };
312 
313  enum
314  {
315  kSoftSynthComponentSubType = FOUR_CHAR_CODE('ss '),
316  kGMSynthComponentSubType = FOUR_CHAR_CODE('gm ')
317  };
318 
320  /* MusicSynthesizerFlags*/
321  enum
322  {
323  kSynthesizerDynamicVoice = 1 << 0, /* can assign voices on the fly (else,
324  polyphony is very important */
325  kSynthesizerUsesMIDIPort = 1 << 1, /* must be patched through MIDI Manager */
326  kSynthesizerMicrotone = 1 << 2, /* can play microtonal scales */
327  kSynthesizerHasSamples = 1
328  << 3, /* synthesizer has some use for sampled data */
329  kSynthesizerMixedDrums =
330  1 << 4, /* any part can play drum parts, total = instrument parts */
331  kSynthesizerSoftware =
332  1 << 5, /* implemented in main CPU software == uses cpu cycles */
333  kSynthesizerHardware =
334  1 << 6, /* is a hardware device (such as nubus, or maybe DSP?) */
335  kSynthesizerDynamicChannel =
336  1 << 7, /* can move any part to any channel or disable each part. (else we
337  assume it lives on all channels in masks) */
338  kSynthesizerHogsSystemChannel =
339  1 << 8, /* can be channelwise dynamic, but always responds on its system
340  channel */
341  kSynthesizerHasSystemChannel =
342  1 << 9, /* has some "system channel" notion to distinguish it from
343  multiple instances of the same device (GM devices dont) */
344  kSynthesizerSlowSetPart =
345  1 << 10, /* SetPart() and SetPartInstrumentNumber() calls do not have
346  rapid response, may glitch notes */
347  kSynthesizerOffline = 1 << 12, /* can enter an offline synthesis mode */
348  kSynthesizerGM = 1 << 14, /* synth is a GM device */
349  kSynthesizerDLS = 1 << 15, /* synth supports DLS level 1 */
350  kSynthesizerSoundLocalization =
351  1 << 16 /* synth supports extremely baroque, nonstandard, and proprietary
352  "apple game sprockets" localization parameter set */
353  };
354 
371  typedef SInt32 MusicController;
372  enum
373  {
374  kControllerModulationWheel = 1,
375  kControllerBreath = 2,
376  kControllerFoot = 4,
377  kControllerPortamentoTime =
378  5, /* time in 8.8 seconds, portamento on/off is omitted, 0 time = 'off' */
379  kControllerVolume = 7, /* main volume control */
380  kControllerBalance = 8,
381  kControllerPan =
382  10, /* 0 - "default", 1 - n: positioned in output 1-n (incl fractions) */
383  kControllerExpression = 11, /* secondary volume control */
384  kControllerLever1 = 16, /* general purpose controllers */
385  kControllerLever2 = 17, /* general purpose controllers */
386  kControllerLever3 = 18, /* general purpose controllers */
387  kControllerLever4 = 19, /* general purpose controllers */
388  kControllerLever5 = 80, /* general purpose controllers */
389  kControllerLever6 = 81, /* general purpose controllers */
390  kControllerLever7 = 82, /* general purpose controllers */
391  kControllerLever8 = 83, /* general purpose controllers */
392  kControllerPitchBend = 32, /* positive & negative semitones, with 8 bits
393  fraction, same units as transpose controllers*/
394  kControllerAfterTouch = 33, /* aka channel pressure */
395  kControllerPartTranspose =
396  40, /* identical to pitchbend, for overall part xpose */
397  kControllerTuneTranspose =
398  41, /* another pitchbend, for "song global" pitch offset */
399  kControllerPartVolume = 42, /* another volume control, passed right down from
400  note allocator part volume */
401  kControllerTuneVolume =
402  43, /* another volume control, used for "song global" volume - since we
403  share one synthesizer across multiple tuneplayers*/
404  kControllerSustain = 64, /* boolean - positive for on, 0 or negative off */
405  kControllerPortamento = 65, /* boolean*/
406  kControllerSostenuto = 66, /* boolean */
407  kControllerSoftPedal = 67, /* boolean */
408  kControllerReverb = 91,
409  kControllerTremolo = 92,
410  kControllerChorus = 93,
411  kControllerCeleste = 94,
412  kControllerPhaser = 95,
413  kControllerEditPart = 113, /* last 16 controllers 113-128 and above are global
414  controllers which respond on part zero */
415  kControllerMasterTune = 114,
416  kControllerMasterTranspose = 114, /* preferred*/
417  kControllerMasterVolume = 115,
418  kControllerMasterCPULoad = 116,
419  kControllerMasterPolyphony = 117,
420  kControllerMasterFeatures = 118
421  };
422 
423  /* ID's of knobs supported by the QuickTime Music Synthesizer built into
424  * QuickTime*/
425 
426  enum
427  {
428  kQTMSKnobStartID = 0x02000000,
429  kQTMSKnobVolumeAttackTimeID = 0x02000001,
430  kQTMSKnobVolumeDecayTimeID = 0x02000002,
431  kQTMSKnobVolumeSustainLevelID = 0x02000003,
432  kQTMSKnobVolumeRelease1RateID = 0x02000004,
433  kQTMSKnobVolumeDecayKeyScalingID = 0x02000005,
434  kQTMSKnobVolumeReleaseTimeID = 0x02000006,
435  kQTMSKnobVolumeLFODelayID = 0x02000007,
436  kQTMSKnobVolumeLFORampTimeID = 0x02000008,
437  kQTMSKnobVolumeLFOPeriodID = 0x02000009,
438  kQTMSKnobVolumeLFOShapeID = 0x0200000A,
439  kQTMSKnobVolumeLFODepthID = 0x0200000B,
440  kQTMSKnobVolumeOverallID = 0x0200000C,
441  kQTMSKnobVolumeVelocity127ID = 0x0200000D,
442  kQTMSKnobVolumeVelocity96ID = 0x0200000E,
443  kQTMSKnobVolumeVelocity64ID = 0x0200000F,
444  kQTMSKnobVolumeVelocity32ID = 0x02000010,
445  kQTMSKnobVolumeVelocity16ID = 0x02000011, /* Pitch related knobs*/
446  kQTMSKnobPitchTransposeID = 0x02000012,
447  kQTMSKnobPitchLFODelayID = 0x02000013,
448  kQTMSKnobPitchLFORampTimeID = 0x02000014,
449  kQTMSKnobPitchLFOPeriodID = 0x02000015,
450  kQTMSKnobPitchLFOShapeID = 0x02000016,
451  kQTMSKnobPitchLFODepthID = 0x02000017,
452  kQTMSKnobPitchLFOQuantizeID = 0x02000018, /* Stereo related knobs*/
453  kQTMSKnobStereoDefaultPanID = 0x02000019,
454  kQTMSKnobStereoPositionKeyScalingID = 0x0200001A,
455  kQTMSKnobPitchLFOOffsetID = 0x0200001B,
456  kQTMSKnobExclusionGroupID = 0x0200001C, /* Misc knobs, late additions*/
457  kQTMSKnobSustainTimeID = 0x0200001D,
458  kQTMSKnobSustainInfiniteID = 0x0200001E,
459  kQTMSKnobVolumeLFOStereoID = 0x0200001F,
460  kQTMSKnobVelocityLowID = 0x02000020,
461  kQTMSKnobVelocityHighID = 0x02000021,
462  kQTMSKnobVelocitySensitivityID = 0x02000022,
463  kQTMSKnobPitchSensitivityID = 0x02000023,
464  kQTMSKnobVolumeLFODepthFromWheelID = 0x02000024,
465  kQTMSKnobPitchLFODepthFromWheelID = 0x02000025, /* Volume Env again*/
466  kQTMSKnobVolumeExpOptionsID = 0x02000026, /* Env1*/
467  kQTMSKnobEnv1AttackTimeID = 0x02000027,
468  kQTMSKnobEnv1DecayTimeID = 0x02000028,
469  kQTMSKnobEnv1SustainLevelID = 0x02000029,
470  kQTMSKnobEnv1SustainTimeID = 0x0200002A,
471  kQTMSKnobEnv1SustainInfiniteID = 0x0200002B,
472  kQTMSKnobEnv1ReleaseTimeID = 0x0200002C,
473  kQTMSKnobEnv1ExpOptionsID = 0x0200002D, /* Env2*/
474  kQTMSKnobEnv2AttackTimeID = 0x0200002E,
475  kQTMSKnobEnv2DecayTimeID = 0x0200002F,
476  kQTMSKnobEnv2SustainLevelID = 0x02000030,
477  kQTMSKnobEnv2SustainTimeID = 0x02000031,
478  kQTMSKnobEnv2SustainInfiniteID = 0x02000032,
479  kQTMSKnobEnv2ReleaseTimeID = 0x02000033,
480  kQTMSKnobEnv2ExpOptionsID = 0x02000034, /* Pitch Env*/
481  kQTMSKnobPitchEnvelopeID = 0x02000035,
482  kQTMSKnobPitchEnvelopeDepthID = 0x02000036, /* Filter*/
483  kQTMSKnobFilterKeyFollowID = 0x02000037,
484  kQTMSKnobFilterTransposeID = 0x02000038,
485  kQTMSKnobFilterQID = 0x02000039,
486  kQTMSKnobFilterFrequencyEnvelopeID = 0x0200003A,
487  kQTMSKnobFilterFrequencyEnvelopeDepthID = 0x0200003B,
488  kQTMSKnobFilterQEnvelopeID = 0x0200003C,
489  kQTMSKnobFilterQEnvelopeDepthID = 0x0200003D, /* Reverb Threshhold*/
490  kQTMSKnobReverbThresholdID = 0x0200003E,
491  kQTMSKnobVolumeAttackVelScalingID = 0x0200003F,
492  kQTMSKnobLastIDPlus1 = 0x02000040
493  };
494 
495  enum
496  {
497  kControllerMaximum = 0x00007FFF, /* +01111111.11111111 */
498  kControllerMinimum = (long)0xFFFF8000 /* -10000000.00000000 */
499  };
500 
502  {
503  OSType synthesizerType; /* synthesizer type (must be same as component
504  subtype) */
505  Str31 name; /* text name of synthesizer type */
506  unsigned long flags; /* from the above enum */
507  unsigned long voiceCount; /* maximum polyphony */
508 
509  unsigned long partCount; /* maximum multi-timbrality (and midi channels) */
510  unsigned long instrumentCount; /* non gm, built in (rom) instruments only */
511  unsigned long modifiableInstrumentCount; /* plus n-more are user modifiable */
512  unsigned long
513  channelMask; /* (midi device only) which channels device always uses */
514 
515  unsigned long drumPartCount; /* maximum multi-timbrality of drum parts */
516  unsigned long drumCount; /* non gm, built in (rom) drumkits only */
517  unsigned long modifiableDrumCount; /* plus n-more are user modifiable */
518  unsigned long drumChannelMask; /* (midi device only) which channels device
519  always uses */
520 
521  unsigned long outputCount; /* number of audio outputs (usually two) */
522  unsigned long latency; /* response time in ©Sec */
523 
524  unsigned long controllers[4]; /* array of 128 bits */
525  unsigned long gmInstruments[4]; /* array of 128 bits */
526  unsigned long gmDrums[4]; /* array of 128 bits */
527  };
529  enum
530  {
531  kVoiceCountDynamic = -1 /* constant to use to specify dynamic voicing */
532  };
533 
535  {
536  BigEndianOSType synthesizerType; /* synthesizer type */
537  Str31 synthesizerName; /* name of instantiation of synth */
538  Str31 instrumentName; /* preferred name for human use */
539  BigEndianLong instrumentNumber; /* inst-number used if synth-name matches */
540  BigEndianLong gmNumber; /* Best matching general MIDI number */
541  };
542  typedef struct ToneDescription ToneDescription;
543  enum
544  {
545  kFirstGMInstrument = 0x00000001,
546  kLastGMInstrument = 0x00000080,
547  kFirstGSInstrument = 0x00000081,
548  kLastGSInstrument = 0x00003FFF,
549  kFirstDrumkit = 0x00004000, /* (first value is "no drum". instrument numbers
550  from 16384->16384+128 are drumkits, and for GM
551  they are _defined_ drumkits! */
552  kLastDrumkit = 0x00004080,
553  kFirstROMInstrument = 0x00008000,
554  kLastROMInstrument = 0x0000FFFF,
555  kFirstUserInstrument = 0x00010000,
556  kLastUserInstrument = 0x0001FFFF
557  };
558 
559  /* InstrumentMatch*/
560  enum
561  {
562  kInstrumentMatchSynthesizerType = 1,
563  kInstrumentMatchSynthesizerName = 2,
564  kInstrumentMatchName = 4,
565  kInstrumentMatchNumber = 8,
566  kInstrumentMatchGMNumber = 16,
567  kInstrumentMatchGSNumber = 32
568  };
569 
570  /* KnobFlags*/
571  enum
572  {
573  kKnobBasic = 8, /* knob shows up in certain simplified lists of knobs */
574  kKnobReadOnly =
575  16, /* knob value cannot be changed by user or with a SetKnob call */
576  kKnobInterruptUnsafe = 32, /* only alter this knob from foreground task time
577  (may access toolbox) */
578  kKnobKeyrangeOverride = 64, /* knob can be overridden within a single keyrange
579  (software synth only) */
580  kKnobGroupStart = 128, /* knob is first in some logical group of knobs */
581  kKnobFixedPoint8 = 1024,
582  kKnobFixedPoint16 = 2048, /* One of these may be used at a time. */
583  kKnobTypeNumber = 0 << 12,
584  kKnobTypeGroupName =
585  1 << 12, /* "knob" is really a group name for display purposes */
586  kKnobTypeBoolean =
587  2 << 12, /* if range is greater than 1, its a multi-checkbox field */
588  kKnobTypeNote = 3 << 12, /* knob range is equivalent to MIDI keys */
589  kKnobTypePan = 4 << 12, /* range goes left/right (lose this? ) */
590  kKnobTypeInstrument =
591  5 << 12, /* knob value = reference to another instrument number */
592  kKnobTypeSetting = 6 << 12, /* knob value is 1 of n different things (eg, fm
593  algorithms) popup menu */
594  kKnobTypeMilliseconds = 7 << 12, /* knob is a millisecond time range */
595  kKnobTypePercentage = 8 << 12, /* knob range is displayed as a Percentage */
596  kKnobTypeHertz = 9 << 12, /* knob represents frequency */
597  kKnobTypeButton = 10 << 12 /* momentary trigger push button */
598  };
599 
600  enum
601  {
602  kUnknownKnobValue =
603  0x7FFFFFFF, /* a knob with this value means, we don't know it. */
604  kDefaultKnobValue = 0x7FFFFFFE /* used to SET a knob to its default value. */
605  };
606 
608  {
609  Str63 name;
610  long lowValue;
611  long highValue;
612  long defaultValue; /* a default instrument is made of all default values */
613  long flags;
614  long knobID;
615  };
616  typedef struct KnobDescription KnobDescription;
618  {
619  ToneDescription tone;
620  long knobCount;
621  long knob[1];
622  };
623  typedef struct GCInstrumentData GCInstrumentData;
627  {
628  PicHandle p;
629  Str255 author;
630  Str255 copyright;
631  Str255 other;
632  };
634 
635  enum
636  {
637  notImplementedMusicErr = (0x80000000 | (0xFFFF & (notImplementedMusicOSErr))),
638  cantSendToSynthesizerErr =
639  (0x80000000 | (0xFFFF & (cantSendToSynthesizerOSErr))),
640  cantReceiveFromSynthesizerErr =
641  (0x80000000 | (0xFFFF & (cantReceiveFromSynthesizerOSErr))),
642  illegalVoiceAllocationErr =
643  (0x80000000 | (0xFFFF & (illegalVoiceAllocationOSErr))),
644  illegalPartErr = (0x80000000 | (0xFFFF & (illegalPartOSErr))),
645  illegalChannelErr = (0x80000000 | (0xFFFF & (illegalChannelOSErr))),
646  illegalKnobErr = (0x80000000 | (0xFFFF & (illegalKnobOSErr))),
647  illegalKnobValueErr = (0x80000000 | (0xFFFF & (illegalKnobValueOSErr))),
648  illegalInstrumentErr = (0x80000000 | (0xFFFF & (illegalInstrumentOSErr))),
649  illegalControllerErr = (0x80000000 | (0xFFFF & (illegalControllerOSErr))),
650  midiManagerAbsentErr = (0x80000000 | (0xFFFF & (midiManagerAbsentOSErr))),
651  synthesizerNotRespondingErr =
652  (0x80000000 | (0xFFFF & (synthesizerNotRespondingOSErr))),
653  synthesizerErr = (0x80000000 | (0xFFFF & (synthesizerOSErr))),
654  illegalNoteChannelErr = (0x80000000 | (0xFFFF & (illegalNoteChannelOSErr))),
655  noteChannelNotAllocatedErr =
656  (0x80000000 | (0xFFFF & (noteChannelNotAllocatedOSErr))),
657  tunePlayerFullErr = (0x80000000 | (0xFFFF & (tunePlayerFullOSErr))),
658  tuneParseErr = (0x80000000 | (0xFFFF & (tuneParseOSErr)))
659  };
660 
661  enum
662  {
663  kGetAtomicInstNoExpandedSamples = 1 << 0,
664  kGetAtomicInstNoOriginalSamples = 1 << 1,
665  kGetAtomicInstNoSamples =
666  kGetAtomicInstNoExpandedSamples | kGetAtomicInstNoOriginalSamples,
667  kGetAtomicInstNoKnobList = 1 << 2,
668  kGetAtomicInstNoInstrumentInfo = 1 << 3,
669  kGetAtomicInstOriginalKnobList = 1 << 4,
670  kGetAtomicInstAllKnobs = 1 << 5 /* return even those that are set to default*/
671  };
672 
678  enum
679  {
680  kSetAtomicInstKeepOriginalInstrument = 1 << 0,
681  kSetAtomicInstShareAcrossParts = 1
682  << 1, /* inst disappears when app goes away*/
683  kSetAtomicInstCallerTosses = 1 << 2, /* the caller isn't keeping a copy around
684  (for NASetAtomicInstrument)*/
685  kSetAtomicInstCallerGuarantees =
686  1 << 3, /* the caller guarantees a copy is around*/
687  kSetAtomicInstInterruptSafe =
688  1 << 4, /* dont move memory at this time (but process at next task time)*/
689  kSetAtomicInstDontPreprocess =
690  1 << 7 /* perform no further preprocessing because either 1)you know the
691  instrument is digitally clean, or 2) you got it from a
692  GetPartAtomic*/
693  };
694 
695  enum
696  {
697  kInstrumentNamesModifiable = 1,
698  kInstrumentNamesBoth = 2
699  };
700 
705  enum
706  {
707  kGenericMusicComponentSubtype = FOUR_CHAR_CODE('gene')
708  };
709 
711  {
712  KnobDescription kd;
713  long hw1; /* driver defined */
714  long hw2; /* driver defined */
715  long hw3; /* driver defined */
716  long settingsID; /* resource ID list for boolean and popup names */
717  };
720  {
721  long knobCount;
722  GenericKnobDescription knob[1];
723  };
727  /* knobTypes for MusicDerivedSetKnob */
728  enum
729  {
730  kGenericMusicKnob = 1,
731  kGenericMusicInstrumentKnob = 2,
732  kGenericMusicDrumKnob = 3,
733  kGenericMusicGlobalController = 4
734  };
735 
736  enum
737  {
738  kGenericMusicResFirst = 0,
739  kGenericMusicResMiscStringList =
740  1, /* STR# 1: synth name, 2:about author,3:aboutcopyright,4:aboutother */
741  kGenericMusicResMiscLongList = 2, /* Long various params, see list below */
742  kGenericMusicResInstrumentList =
743  3, /* NmLs of names and shorts, categories prefixed by '©©' */
744  kGenericMusicResDrumList = 4, /* NmLs of names and shorts */
745  kGenericMusicResInstrumentKnobDescriptionList = 5, /* Knob */
746  kGenericMusicResDrumKnobDescriptionList = 6, /* Knob */
747  kGenericMusicResKnobDescriptionList = 7, /* Knob */
748  kGenericMusicResBitsLongList = 8, /* Long back to back bitmaps of controllers,
749  gminstruments, and drums */
750  kGenericMusicResModifiableInstrumentHW =
751  9, /* Shrt same as the hw shorts trailing the instrument names, a
752  shortlist */
753  kGenericMusicResGMTranslation =
754  10, /* Long 128 long entries, 1 for each gm inst, of local instrument
755  numbers 1-n (not hw numbers) */
756  kGenericMusicResROMInstrumentData =
757  11, /* knob lists for ROM instruments, so the knob values may be known */
758  kGenericMusicResAboutPICT =
759  12, /* picture for aboutlist. must be present for GetAbout call to work */
760  kGenericMusicResLast = 13
761  };
762 
763  /* elements of the misc long list */
764  enum
765  {
766  kGenericMusicMiscLongFirst = 0,
767  kGenericMusicMiscLongVoiceCount = 1,
768  kGenericMusicMiscLongPartCount = 2,
769  kGenericMusicMiscLongModifiableInstrumentCount = 3,
770  kGenericMusicMiscLongChannelMask = 4,
771  kGenericMusicMiscLongDrumPartCount = 5,
772  kGenericMusicMiscLongModifiableDrumCount = 6,
773  kGenericMusicMiscLongDrumChannelMask = 7,
774  kGenericMusicMiscLongOutputCount = 8,
775  kGenericMusicMiscLongLatency = 9,
776  kGenericMusicMiscLongFlags = 10,
777  kGenericMusicMiscLongFirstGMHW =
778  11, /* number to add to locate GM main instruments */
779  kGenericMusicMiscLongFirstGMDrumHW =
780  12, /* number to add to locate GM drumkits */
781  kGenericMusicMiscLongFirstUserHW =
782  13, /* First hw number of user instruments (presumed sequential) */
783  kGenericMusicMiscLongLast = 14
784  };
785 
786  struct GCPart
787  {
788  long hwInstrumentNumber; /* internal number of recalled instrument */
789  short controller[128]; /* current values for all controllers */
790  long volume; /* ctrl 7 is special case */
791  long polyphony;
792  long midiChannel; /* 1-16 if in use */
793  GCInstrumentData id; /* ToneDescription & knoblist, uncertain length */
794  };
795  typedef struct GCPart GCPart;
799  enum
800  {
801  kMusicGenericRange = 0x0100,
802  kMusicDerivedRange = 0x0200
803  };
804 
808  enum
809  {
810  kGenericMusicDoMIDI = 1 << 0, /* implement normal MIDI messages for note,
811  controllers, and program changes 0-127 */
812  kGenericMusicBank0 =
813  1 << 1, /* implement instrument bank changes on controller 0 */
814  kGenericMusicBank32 =
815  1 << 2, /* implement instrument bank changes on controller 32 */
816  kGenericMusicErsatzMIDI =
817  1
818  << 3, /* construct MIDI packets, but send them to the derived component */
819  kGenericMusicCallKnobs =
820  1 << 4, /* call the derived component with special knob format call */
821  kGenericMusicCallParts =
822  1 << 5, /* call the derived component with special part format call */
823  kGenericMusicCallInstrument =
824  1 << 6, /* call MusicDerivedSetInstrument for MusicSetInstrument calls */
825  kGenericMusicCallNumber = 1 << 7, /* call MusicDerivedSetPartInstrumentNumber
826  for MusicSetPartInstrumentNumber calls, &
827  don't send any C0 or bank stuff */
828  kGenericMusicCallROMInstrument =
829  1 << 8, /* call MusicSetInstrument for MusicSetPartInstrumentNumber for
830  "ROM" instruments, passing params from the ROMi resource */
831  kGenericMusicAllDefaults =
832  1 << 9 /* indicates that when a new instrument is recalled, all knobs are
833  reset to DEFAULT settings. True for GS modules */
834  };
835 
836  typedef CALLBACK_API(ComponentResult, MusicOfflineDataProcPtr)(Ptr SoundData,
837  long numBytes,
838  long myRefCon);
839  typedef STACK_UPP_TYPE(MusicOfflineDataProcPtr) MusicOfflineDataUPP;
841  {
842  unsigned long numChannels; /*number of channels, ie mono = 1*/
843  UnsignedFixed sampleRate; /*sample rate in Apples Fixed point representation*/
844  unsigned short sampleSize; /*number of bits in sample*/
845  };
846  typedef struct OfflineSampleType OfflineSampleType;
848  {
849  long instrumentNumber; /* instrument number (if 0, name is a catagory)*/
850  long flags; /* show in picker, etc.*/
851  long toneNameIndex; /* index in toneNames (1 based)*/
852  long itxtNameAtomID; /* index in itxtNames (itxt/name by index)*/
853  };
856  {
857  long recordCount;
858  Handle toneNames; /* name from tone description*/
859  QTAtomContainer itxtNames; /* itxt/name atoms for instruments*/
860  InstrumentInfoRecord info[1];
861  };
862  typedef struct InstrumentInfoList InstrumentInfoList;
874  ComponentResult
876 
886  ComponentResult
887  MusicGetPart(MusicComponent mc, long part, long *midiChannel, long *polyphony);
888 
898  ComponentResult
899  MusicSetPart(MusicComponent mc, long part, long midiChannel, long polyphony);
900 
910  ComponentResult
912  long instrumentNumber);
913 
914 #if OLDROUTINENAMES
915 #define MusicSetInstrumentNumber(ci, part, instrumentNumber) \
916  MusicSetPartInstrumentNumber(ci, part, instrumentNumber)
917 #endif
918 
928  ComponentResult
930 
940  ComponentResult
941  MusicStorePartInstrument(MusicComponent mc, long part, long instrumentNumber);
942 
952  ComponentResult
953  MusicGetPartAtomicInstrument(MusicComponent mc, long part, AtomicInstrument *ai,
954  long flags);
955 
965  ComponentResult
967  AtomicInstrumentPtr aiP, long flags);
968 
978  ComponentResult
979  MusicGetPartKnob(MusicComponent mc, long part, long knobID);
980 
990  ComponentResult
991  MusicSetPartKnob(MusicComponent mc, long part, long knobID, long knobValue);
992 
1002  ComponentResult
1003  MusicGetKnob(MusicComponent mc, long knobID);
1004 
1014  ComponentResult
1015  MusicSetKnob(MusicComponent mc, long knobID, long knobValue);
1016 
1026  ComponentResult
1028 
1038  ComponentResult
1040 
1050  ComponentResult
1051  MusicFindTone(MusicComponent mc, ToneDescription *td, long *libraryIndexOut,
1052  unsigned long *fit);
1053 
1063  ComponentResult
1064  MusicPlayNote(MusicComponent mc, long part, long pitch, long velocity);
1065 
1075  ComponentResult
1077 
1087  ComponentResult
1089  MusicController controllerNumber, long controllerValue);
1090 
1091 #if OLDROUTINENAMES
1092 #define MusicSetController(ci, part, controllerNumber, controllerValue) \
1093  MusicSetPartController(ci, part, controllerNumber, controllerValue)
1094 #endif
1095 
1105  ComponentResult
1107  MusicController controllerNumber);
1108 
1118  ComponentResult
1119  MusicGetMIDIProc(MusicComponent mc, MusicMIDISendUPP *midiSendProc,
1120  long *refCon);
1121 
1131  ComponentResult
1132  MusicSetMIDIProc(MusicComponent mc, MusicMIDISendUPP midiSendProc, long refCon);
1133 
1143  ComponentResult
1144  MusicGetInstrumentNames(MusicComponent mc, long modifiableInstruments,
1145  Handle *instrumentNames,
1146  Handle *instrumentCategoryLasts,
1147  Handle *instrumentCategoryNames);
1148 
1158  ComponentResult
1159  MusicGetDrumNames(MusicComponent mc, long modifiableInstruments,
1160  Handle *instrumentNumbers, Handle *instrumentNames);
1161 
1171  ComponentResult
1173 
1183  ComponentResult
1184  MusicSetMasterTune(MusicComponent mc, long masterTune);
1185 
1195  ComponentResult
1197  InstrumentAboutInfo *iai);
1198 
1208  ComponentResult
1209  MusicGetDeviceConnection(MusicComponent mc, long index, long *id1, long *id2);
1210 
1220  ComponentResult
1221  MusicUseDeviceConnection(MusicComponent mc, long id1, long id2);
1222 
1232  ComponentResult
1233  MusicGetKnobSettingStrings(MusicComponent mc, long knobIndex, long isGlobal,
1234  Handle *settingsNames, Handle *settingsCategoryLasts,
1235  Handle *settingsCategoryNames);
1236 
1246  ComponentResult
1247  MusicGetMIDIPorts(MusicComponent mc, long *inputPortCount,
1248  long *outputPortCount);
1249 
1259  ComponentResult
1261 
1271  ComponentResult
1272  MusicStartOffline(MusicComponent mc, unsigned long *numChannels,
1273  UnsignedFixed *sampleRate, unsigned short *sampleSize,
1274  MusicOfflineDataUPP dataProc, long dataProcRefCon);
1275 
1285  ComponentResult
1286  MusicSetOfflineTimeTo(MusicComponent mc, long newTimeStamp);
1287 
1297  ComponentResult
1299  KnobDescription *mkd);
1300 
1310  ComponentResult
1312  KnobDescription *mkd);
1313 
1323  ComponentResult
1325 
1335  ComponentResult
1336  MusicGetInfoText(MusicComponent mc, long selector, Handle *textH,
1337  Handle *styleH);
1338 
1339  enum
1340  {
1341  kGetInstrumentInfoNoBuiltIn = 1 << 0,
1342  kGetInstrumentInfoMidiUserInst = 1 << 1,
1343  kGetInstrumentInfoNoIText = 1 << 2
1344  };
1345 
1355  ComponentResult
1356  MusicGetInstrumentInfo(MusicComponent mc, long getInstrumentInfoFlags,
1357  InstrumentInfoListHandle *infoListH);
1358 
1368  ComponentResult
1370 
1380  ComponentResult
1382  long instrumentNumber);
1383 
1393  ComponentResult
1394  MusicSetPartSoundLocalization(MusicComponent mc, long part, Handle data);
1395 
1405  ComponentResult
1406  MusicGenericConfigure(MusicComponent mc, long mode, long flags, long baseResID);
1407 
1417  ComponentResult
1418  MusicGenericGetPart(MusicComponent mc, long partNumber, GCPart **part);
1419 
1429  ComponentResult
1432 
1442  ComponentResult
1444 
1454  ComponentResult
1456 
1466  ComponentResult
1467  MusicDerivedSetKnob(MusicComponent mc, long knobType, long knobNumber,
1468  long knobValue, long partNumber, GCPart *p,
1469  GenericKnobDescription *gkd);
1470 
1480  ComponentResult
1481  MusicDerivedSetPart(MusicComponent mc, long partNumber, GCPart *p);
1482 
1492  ComponentResult
1494 
1504  ComponentResult
1506  GCPart *p);
1507 
1517  ComponentResult
1518  MusicDerivedSetMIDI(MusicComponent mc, MusicMIDISendUPP midiProc, long refcon,
1519  long midiChannel);
1520 
1530  ComponentResult
1532  long instrumentNumber);
1533 
1543  ComponentResult
1545 
1555  ComponentResult
1557 
1558  /*--------------------------
1559  Types
1560  --------------------------*/
1562  enum
1563  {
1564  kNoteRequestNoGM = 1, /* don't degrade to a GM synth */
1565  kNoteRequestNoSynthType =
1566  2, /* don't degrade to another synth of same type but different name */
1567  kNoteRequestSynthMustMatch =
1568  4 /* synthType must be a match, including kGMSynthComponentSubType */
1569  };
1570 
1571  enum
1572  {
1573  kNoteRequestSpecifyMIDIChannel = 0x80
1574  };
1575 
1585  typedef UInt8 NoteRequestMIDIChannel;
1587  {
1588  UInt8 flags; /* kNoteRequest flags, above */
1590  midiChannelAssignment; /* (kNoteRequestSpecifyMIDIChannel | 1->16) as MIDI
1591  Channel assignment or zero - see notes above */
1592  BigEndianShort polyphony; /* Maximum number of voices */
1593  BigEndianFixed typicalPolyphony; /* Hint for level mixing */
1594  };
1595  typedef struct NoteRequestInfo NoteRequestInfo;
1597  {
1598  NoteRequestInfo info;
1599  ToneDescription tone;
1600  };
1601  typedef struct NoteRequest NoteRequest;
1602  typedef struct OpaqueNoteChannel *NoteChannel;
1603 
1604  enum
1605  {
1606  kPickDontMix = 1, /* dont mix instruments with drum sounds */
1607  kPickSameSynth = 2, /* only allow the same device that went in, to come out */
1608  kPickUserInsts = 4, /* show user insts in addition to ROM voices */
1609  kPickEditAllowEdit = 8, /* lets user switch over to edit mode */
1610  kPickEditAllowPick = 16, /* lets the user switch over to pick mode */
1611  kPickEditSynthGlobal = 32, /* edit the global knobs of the synth */
1612  kPickEditControllers = 64 /* edit the controllers of the notechannel */
1613  };
1614 
1615  enum
1616  {
1617  kNoteAllocatorComponentType = FOUR_CHAR_CODE('nota')
1618  };
1619 
1620  /*--------------------------------
1621  Note Allocator Prototypes
1622  --------------------------------*/
1632  ComponentResult
1633  NARegisterMusicDevice(NoteAllocator na, OSType synthType, Str31 name,
1634  SynthesizerConnections *connections);
1635 
1645  ComponentResult
1647 
1657  ComponentResult
1658  NAGetRegisteredMusicDevice(NoteAllocator na, long index, OSType *synthType,
1659  Str31 name, SynthesizerConnections *connections,
1660  MusicComponent *mc);
1661 
1671  ComponentResult
1673 
1683  ComponentResult
1685  NoteChannel *outChannel);
1686 
1696  ComponentResult
1697  NADisposeNoteChannel(NoteAllocator na, NoteChannel noteChannel);
1698 
1708  ComponentResult
1709  NAGetNoteChannelInfo(NoteAllocator na, NoteChannel noteChannel, long *index,
1710  long *part);
1711 
1721  ComponentResult
1722  NAPrerollNoteChannel(NoteAllocator na, NoteChannel noteChannel);
1723 
1733  ComponentResult
1734  NAUnrollNoteChannel(NoteAllocator na, NoteChannel noteChannel);
1735 
1745  ComponentResult
1746  NASetNoteChannelVolume(NoteAllocator na, NoteChannel noteChannel, Fixed volume);
1747 
1757  ComponentResult
1758  NAResetNoteChannel(NoteAllocator na, NoteChannel noteChannel);
1759 
1769  ComponentResult
1770  NAPlayNote(NoteAllocator na, NoteChannel noteChannel, long pitch, long velocity);
1771 
1781  ComponentResult
1782  NASetController(NoteAllocator na, NoteChannel noteChannel,
1783  long controllerNumber, long controllerValue);
1784 
1794  ComponentResult
1795  NASetKnob(NoteAllocator na, NoteChannel noteChannel, long knobNumber,
1796  long knobValue);
1797 
1807  ComponentResult
1808  NAFindNoteChannelTone(NoteAllocator na, NoteChannel noteChannel,
1809  ToneDescription *td, long *instrumentNumber);
1810 
1820  ComponentResult
1821  NASetInstrumentNumber(NoteAllocator na, NoteChannel noteChannel,
1822  long instrumentNumber);
1823 
1824 #if OLDROUTINENAMES
1825 #define NASetNoteChannelInstrument(ci, noteChannel, instrumentNumber) \
1826  NASetInstrumentNumber(ci, noteChannel, instrumentNumber)
1827 #define NASetInstrument(ci, noteChannel, instrumentNumber) \
1828  NASetInstrumentNumber(ci, noteChannel, instrumentNumber)
1829 #endif
1839  ComponentResult
1840  NAPickInstrument(NoteAllocator na, ModalFilterUPP filterProc, StringPtr prompt,
1841  ToneDescription *sd, unsigned long flags, long refCon,
1842  long reserved1, long reserved2);
1843 
1853  ComponentResult
1854  NAPickArrangement(NoteAllocator na, ModalFilterUPP filterProc, StringPtr prompt,
1855  long zero1, long zero2, Track t, StringPtr songName);
1856 
1866  ComponentResult
1868 
1878  ComponentResult
1880  StringPtr copyright, StringPtr other, StringPtr title,
1881  ModalFilterUPP filterProc, long refCon);
1882 
1897  ComponentResult
1898  NAGetIndNoteChannel(NoteAllocator na, long index, NoteChannel *nc, long *seed);
1899 
1909  ComponentResult
1911  QTMIDIPortListHandle *outputPorts);
1912 
1922  ComponentResult
1923  NAGetNoteRequest(NoteAllocator na, NoteChannel noteChannel, NoteRequest *nrOut);
1924 
1934  ComponentResult
1935  NASendMIDI(NoteAllocator na, NoteChannel noteChannel, MusicMIDIPacket *mp);
1936 
1946  ComponentResult
1947  NAPickEditInstrument(NoteAllocator na, ModalFilterUPP filterProc,
1948  StringPtr prompt, long refCon, NoteChannel nc,
1949  AtomicInstrument ai, long flags);
1950 
1960  ComponentResult
1962  AtomicInstrumentPtr instrument, long flags,
1963  NoteChannel *outChannel);
1964 
1974  ComponentResult
1975  NASetAtomicInstrument(NoteAllocator na, NoteChannel noteChannel,
1976  AtomicInstrumentPtr instrument, long flags);
1977 
1987  ComponentResult
1988  NAGetKnob(NoteAllocator na, NoteChannel noteChannel, long knobNumber,
1989  long *knobValue);
1990 
2000  ComponentResult
2002 
2012  ComponentResult
2013  NASetNoteChannelBalance(NoteAllocator na, NoteChannel noteChannel, long balance);
2014 
2024  ComponentResult
2026  long instrumentNumber);
2027 
2037  ComponentResult
2039  Handle data);
2040 
2050  ComponentResult
2051  NAGetController(NoteAllocator na, NoteChannel noteChannel,
2052  long controllerNumber, long *controllerValue);
2053 
2054  enum
2055  {
2056  kTuneQueueDepth = 8 /* Deepest you can queue tune segments */
2057  };
2058 
2059  struct TuneStatus
2060  {
2061  unsigned long *tune; /* currently playing tune */
2062  unsigned long *tunePtr; /* position within currently playing piece */
2063  TimeValue time; /* current tune time */
2064  short queueCount; /* how many pieces queued up? */
2065  short queueSpots; /* How many more tunepieces can be queued */
2066  TimeValue
2067  queueTime; /* How much time is queued up? (can be very inaccurate) */
2068  long reserved[3];
2069  };
2070  typedef struct TuneStatus TuneStatus;
2071  typedef CALLBACK_API(void, TuneCallBackProcPtr)(const TuneStatus *status,
2072  long refCon);
2073  typedef CALLBACK_API(void, TunePlayCallBackProcPtr)(unsigned long *event,
2074  long seed, long refCon);
2075  typedef STACK_UPP_TYPE(TuneCallBackProcPtr) TuneCallBackUPP;
2076  typedef STACK_UPP_TYPE(TunePlayCallBackProcPtr) TunePlayCallBackUPP;
2077 
2078  typedef ComponentInstance TunePlayer;
2079  enum
2080  {
2081  kTunePlayerComponentType = FOUR_CHAR_CODE('tune')
2082  };
2083 
2093  ComponentResult
2094  TuneSetHeader(TunePlayer tp, unsigned long *header);
2095 
2105  ComponentResult
2106  TuneGetTimeBase(TunePlayer tp, TimeBase *tb);
2107 
2117  ComponentResult
2118  TuneSetTimeScale(TunePlayer tp, TimeScale scale);
2119 
2129  ComponentResult
2130  TuneGetTimeScale(TunePlayer tp, TimeScale *scale);
2131 
2141  ComponentResult
2142  TuneGetIndexedNoteChannel(TunePlayer tp, long i, NoteChannel *nc);
2143 
2144  /* Values for when to start. */
2145  enum
2146  {
2147  kTuneStartNow = 1, /* start after buffer is implied */
2148  kTuneDontClipNotes =
2149  2, /* allow notes to finish their durations outside sample */
2150  kTuneExcludeEdgeNotes = 4, /* dont play notes that start at end of tune */
2151  kTuneQuickStart =
2152  8, /* Leave all the controllers where they are, ignore start time */
2153  kTuneLoopUntil =
2154  16, /* loop a queued tune if there's nothing else in the queue*/
2155  kTunePlayDifference = 32, /* by default, the tune difference is skipped*/
2156  kTunePlayConcurrent = 64, /* dont block the next tune sequence with this one*/
2157  kTuneStartNewMaster = 16384
2158  };
2159 
2169  ComponentResult
2170  TuneQueue(TunePlayer tp, unsigned long *tune, Fixed tuneRate,
2171  unsigned long tuneStartPosition, unsigned long tuneStopPosition,
2172  unsigned long queueFlags, TuneCallBackUPP callBackProc, long refCon);
2173 
2183  ComponentResult
2184  TuneInstant(TunePlayer tp, unsigned long *tune, unsigned long tunePosition);
2185 
2195  ComponentResult
2197 
2198  /* Values for stopping. */
2199  enum
2200  {
2201  kTuneStopFade = 1, /* do a quick, synchronous fadeout */
2202  kTuneStopSustain = 2, /* don't silece notes */
2203  kTuneStopInstant = 4, /* silence notes fast (else, decay them) */
2204  kTuneStopReleaseChannels = 8 /* afterwards, let the channels go */
2205  };
2206 
2216  ComponentResult
2217  TuneStop(TunePlayer tp, long stopFlags);
2218 
2228  ComponentResult
2230 
2240  ComponentResult
2242 
2252  ComponentResult
2254 
2264  ComponentResult
2266 
2276  ComponentResult
2277  TuneSetNoteChannels(TunePlayer tp, unsigned long count,
2278  NoteChannel *noteChannelList,
2279  TunePlayCallBackUPP playCallBackProc, long refCon);
2280 
2290  ComponentResult
2291  TuneSetPartTranspose(TunePlayer tp, unsigned long part, long transpose,
2292  long velocityShift);
2293 
2305 
2315  ComponentResult
2316  TuneSetSofter(TunePlayer tp, long softer);
2317 
2327  ComponentResult
2329 
2339  ComponentResult
2340  TuneSetBalance(TunePlayer tp, long balance);
2341 
2351  ComponentResult
2353 
2363  ComponentResult
2364  TuneSetHeaderWithSize(TunePlayer tp, unsigned long *header, unsigned long size);
2365 
2366  /* flags for part mix. */
2367  enum
2368  {
2369  kTuneMixMute = 1, /* disable a part */
2370  kTuneMixSolo = 2 /* if any parts soloed, play only soloed parts */
2371  };
2372 
2382  ComponentResult
2383  TuneSetPartMix(TunePlayer tp, unsigned long partNumber, long volume,
2384  long balance, long mixFlags);
2385 
2395  ComponentResult
2396  TuneGetPartMix(TunePlayer tp, unsigned long partNumber, long *volumeOut,
2397  long *balanceOut, long *mixFlagsOut);
2398 
2399  typedef unsigned long MusicOpWord;
2400  typedef MusicOpWord *MusicOpWordPtr;
2401  /* QuickTime Music Track Event Formats:
2402 
2403  At this time, QuickTime music tracks support 5 different event types -- REST
2404  events, short NOTE events, short CONTROL events, short GENERAL events, Long
2405  NOTE events, long CONTROL events, and variable GENERAL events.
2406 
2407  © REST Event (4 bytes/event):
2408 
2409  (0 0 0) (5-bit UNUSED) (24-bit Rest Duration)
2410 
2411  ©©Short NOTE Events (4 bytes/event):
2412 
2413  (0 0 1) (5-bit Part) (6-bit Pitch) (7-bit Volume) (11-bit Duration)
2414 
2415  where: Pitch is offset by 32 (Actual pitch = pitch field + 32)
2416 
2417  ©©Short CONTROL Events (4 bytes/event):
2418 
2419  (0 1 0) (5-bit Part) (8-bit Controller) (1-bit UNUSED) (1-bit Sign)
2420  (7-bit MSB) (7-bit LSB) ( or 15-bit Signed Value) © Short GENERAL Event (4
2421  bytes/event):
2422 
2423  (0 1 1) (1-bit UNUSED) (12-bit Sub-Type) (16-bit Value)
2424 
2425  © Long NOTE Events (8 bytes/event):
2426 
2427  (1 0 0 1) (12-bit Part) (1-bit UNUSED) (7-bit Pitch) (1-bit UNUSED)
2428  (7-bit Volume) (1 0) (8-bit UNUSED) (22-bit Duration)
2429 
2430  ©©Long CONTROL Event (8 bytes/event):
2431 
2432  (1 0 1 0) (12-bit Part) (16-bit Value MSB)
2433  (1 0) (14-bit Controller) (16-bit Value LSB)
2434 
2435  ©©Long KNOB Event (8 bytes/event):
2436 
2437  (1 0 1 1) (12-bit Sub-Type) (16-bit Value MSB)
2438  (1 0) (14-bit KNOB) (16-bit Value LSB)
2439 
2440  ©©Variable GENERAL Length Events (N bytes/event):
2441 
2442  (1 1 1 1) (12-bit Sub-Type) (16-bit Length)
2443  :
2444  (32-bit Data values)
2445  :
2446  (1 1) (14-bit UNUSED) (16-bit Length)
2447 
2448  where: Length field is the number of LONG words in the record.
2449  Lengths include the first and last long words (Minimum
2450  length = 2)
2451 
2452  The following event type values have not been used yet and are reserved for
2453  future expansion:
2454 
2455  © (1 0 0 0) (8 bytes/event)
2456  © (1 1 0 0) (N bytes/event)
2457  © (1 1 0 1) (N bytes/event)
2458  © (1 1 1 0) (N bytes/event)
2459 
2460  For all events, the following generalizations apply:
2461 
2462  - All duration values are specified in Millisecond units.
2463  - Pitch values are intended to map directly to the MIDI key numbers.
2464  - Controllers from 0 to 127 correspond to the standard MIDI
2465  controllers. Controllers greater than 127 correspond to other controls (i.e.,
2466  Pitch Bend, Key Pressure, and Channel Pressure).
2467  */
2468 
2469  /* Defines for the implemented music event data fields*/
2470  enum
2471  {
2472  kRestEventType = 0x00000000, /* lower 3-bits */
2473  kNoteEventType = 0x00000001, /* lower 3-bits */
2474  kControlEventType = 0x00000002, /* lower 3-bits */
2475  kMarkerEventType = 0x00000003, /* lower 3-bits */
2476  kUndefined1EventType = 0x00000008, /* 4-bits */
2477  kXNoteEventType = 0x00000009, /* 4-bits */
2478  kXControlEventType = 0x0000000A, /* 4-bits */
2479  kKnobEventType = 0x0000000B, /* 4-bits */
2480  kUndefined2EventType = 0x0000000C, /* 4-bits */
2481  kUndefined3EventType = 0x0000000D, /* 4-bits */
2482  kUndefined4EventType = 0x0000000E, /* 4-bits */
2483  kGeneralEventType = 0x0000000F, /* 4-bits */
2484  kXEventLengthBits = 0x00000002, /* 2 bits: indicates 8-byte event record */
2485  kGeneralEventLengthBits =
2486  0x00000003, /* 2 bits: indicates variable length event record */
2487  kEventLen = 1L, /* length of events in long words */
2488  kXEventLen = 2L,
2489  kRestEventLen = kEventLen, /* length of events in long words */
2490  kNoteEventLen = kEventLen,
2491  kControlEventLen = kEventLen,
2492  kMarkerEventLen = kEventLen,
2493  kXNoteEventLen = kXEventLen,
2494  kXControlEventLen = kXEventLen,
2495  kGeneralEventLen = kXEventLen, /* 2 or more, however */
2496  /* Universal Event Defines*/
2497  kEventLengthFieldPos =
2498  30, /* by looking at these two bits of the 1st or last word */
2499  kEventLengthFieldWidth =
2500  2, /* of an event you can determine the event length */
2501  /* length field: 0 & 1 => 1 long; 2 => 2 longs; 3 => variable length */
2502  kEventTypeFieldPos = 29, /* event type field for short events */
2503  kEventTypeFieldWidth = 3, /* short type is 3 bits */
2504  kXEventTypeFieldPos = 28, /* event type field for extended events */
2505  kXEventTypeFieldWidth = 4, /* extended type is 4 bits */
2506  kEventPartFieldPos = 24,
2507  kEventPartFieldWidth = 5,
2508  kXEventPartFieldPos = 16, /* in the 1st long word */
2509  kXEventPartFieldWidth = 12, /* Rest Events*/
2510  kRestEventDurationFieldPos = 0,
2511  kRestEventDurationFieldWidth = 24,
2512  kRestEventDurationMax =
2513  ((1L << kRestEventDurationFieldWidth) - 1), /* Note Events*/
2514  kNoteEventPitchFieldPos = 18,
2515  kNoteEventPitchFieldWidth = 6,
2516  kNoteEventPitchOffset =
2517  32, /* add to value in pitch field to get actual pitch */
2518  kNoteEventVolumeFieldPos = 11,
2519  kNoteEventVolumeFieldWidth = 7,
2520  kNoteEventVolumeOffset =
2521  0, /* add to value in volume field to get actual volume */
2522  kNoteEventDurationFieldPos = 0,
2523  kNoteEventDurationFieldWidth = 11,
2524  kNoteEventDurationMax = ((1L << kNoteEventDurationFieldWidth) - 1),
2525  kXNoteEventPitchFieldPos = 0, /* in the 1st long word */
2526  kXNoteEventPitchFieldWidth = 16,
2527  kXNoteEventDurationFieldPos = 0, /* in the 2nd long word */
2528  kXNoteEventDurationFieldWidth = 22,
2529  kXNoteEventDurationMax = ((1L << kXNoteEventDurationFieldWidth) - 1),
2530  kXNoteEventVolumeFieldPos = 22, /* in the 2nd long word */
2531  kXNoteEventVolumeFieldWidth = 7, /* Control Events*/
2532  kControlEventControllerFieldPos = 16,
2533  kControlEventControllerFieldWidth = 8,
2534  kControlEventValueFieldPos = 0,
2535  kControlEventValueFieldWidth = 16,
2536  kXControlEventControllerFieldPos = 0, /* in the 2nd long word */
2537  kXControlEventControllerFieldWidth = 16,
2538  kXControlEventValueFieldPos = 0, /* in the 1st long word */
2539  kXControlEventValueFieldWidth = 16, /* Knob Events*/
2540  kKnobEventValueHighFieldPos = 0, /* 1st long word */
2541  kKnobEventValueHighFieldWidth = 16,
2542  kKnobEventKnobFieldPos = 16, /* 2nd long word */
2543  kKnobEventKnobFieldWidth = 14,
2544  kKnobEventValueLowFieldPos = 0, /* 2nd long word */
2545  kKnobEventValueLowFieldWidth = 16, /* Marker Events*/
2546  kMarkerEventSubtypeFieldPos = 16,
2547  kMarkerEventSubtypeFieldWidth = 8,
2548  kMarkerEventValueFieldPos = 0,
2549  kMarkerEventValueFieldWidth = 16, /* General Events*/
2550  kGeneralEventSubtypeFieldPos = 16, /* in the last long word */
2551  kGeneralEventSubtypeFieldWidth = 14,
2552  kGeneralEventLengthFieldPos = 0, /* in the 1st & last long words */
2553  kGeneralEventLengthFieldWidth = 16
2554  };
2555 
2556 #if TARGET_RT_LITTLE_ENDIAN
2557  enum
2558  {
2559  kEndMarkerValue = 0x00000060
2560  };
2561 
2562 #else
2563 enum
2564 {
2565  kEndMarkerValue = 0x60000000
2566 };
2567 
2568 #endif /* TARGET_RT_LITTLE_ENDIAN */
2569 
2570  /* macros for extracting various fields from the QuickTime event records*/
2571 
2572 #define qtma_MASK(bitWidth) ((1L << (bitWidth)) - 1)
2573 #define qtma_EXT(val, pos, width) \
2574  ((EndianU32_BtoN(val) >> (pos)) & qtma_MASK(width))
2575 #define qtma_EventLengthForward(xP, ulen) \
2576  { \
2577  unsigned long _ext; \
2578  unsigned long *lP = (unsigned long *)(xP); \
2579  _ext = qtma_EXT(*lP, kEventLengthFieldPos, kEventLengthFieldWidth); \
2580  if (_ext != 3) \
2581  { \
2582  ulen = (_ext < 2) ? 1 : 2; \
2583  } \
2584  else \
2585  { \
2586  ulen = (unsigned short)qtma_EXT(*lP, kGeneralEventLengthFieldPos, \
2587  kGeneralEventLengthFieldWidth); \
2588  if (ulen < 2) \
2589  { \
2590  ulen = lP[1]; \
2591  } \
2592  } \
2593  }
2594 #define qtma_EventLengthBackward(xP, ulen) \
2595  { \
2596  unsigned long _ext; \
2597  unsigned long *lP = (unsigned long *)(xP); \
2598  _ext = qtma_EXT(*lP, kEventLengthFieldPos, kEventLengthFieldWidth); \
2599  if (_ext != 3) \
2600  { \
2601  ulen = (_ext < 2) ? 1 : 2; \
2602  } \
2603  else \
2604  { \
2605  ulen = (unsigned short)qtma_EXT(*lP, kGeneralEventLengthFieldPos, \
2606  kGeneralEventLengthFieldWidth); \
2607  if (ulen < 2) \
2608  { \
2609  ulen = lP[-1]; \
2610  } \
2611  } \
2612  }
2613 #define qtma_EventType(x) \
2614  ((qtma_EXT(x, kEventTypeFieldPos, kEventTypeFieldWidth) > 3) \
2615  ? qtma_EXT(x, kXEventTypeFieldPos, kXEventTypeFieldWidth) \
2616  : qtma_EXT(x, kEventTypeFieldPos, kEventTypeFieldWidth))
2617 #define qtma_RestDuration(x) \
2618  (qtma_EXT(x, kRestEventDurationFieldPos, kRestEventDurationFieldWidth))
2619 #define qtma_Part(x) (qtma_EXT(x, kEventPartFieldPos, kEventPartFieldWidth))
2620 #define qtma_XPart(m, l) \
2621  (qtma_EXT(m, kXEventPartFieldPos, kXEventPartFieldWidth))
2622 #define qtma_NotePitch(x) \
2623  (qtma_EXT(x, kNoteEventPitchFieldPos, kNoteEventPitchFieldWidth) + \
2624  kNoteEventPitchOffset)
2625 #define qtma_NoteVolume(x) \
2626  (qtma_EXT(x, kNoteEventVolumeFieldPos, kNoteEventVolumeFieldWidth) + \
2627  kNoteEventVolumeOffset)
2628 #define qtma_NoteDuration(x) \
2629  (qtma_EXT(x, kNoteEventDurationFieldPos, kNoteEventDurationFieldWidth))
2630 #define qtma_NoteVelocity qtma_NoteVolume
2631 #define qtma_XNotePitch(m, l) \
2632  (qtma_EXT(m, kXNoteEventPitchFieldPos, kXNoteEventPitchFieldWidth))
2633 #define qtma_XNoteVolume(m, l) \
2634  (qtma_EXT(l, kXNoteEventVolumeFieldPos, kXNoteEventVolumeFieldWidth))
2635 #define qtma_XNoteDuration(m, l) \
2636  (qtma_EXT(l, kXNoteEventDurationFieldPos, kXNoteEventDurationFieldWidth))
2637 #define qtma_XNoteVelocity qtma_XNoteVolume
2638 #define qtma_ControlController(x) \
2639  (qtma_EXT(x, kControlEventControllerFieldPos, \
2640  kControlEventControllerFieldWidth))
2641 #define qtma_ControlValue(x) \
2642  (qtma_EXT(x, kControlEventValueFieldPos, kControlEventValueFieldWidth))
2643 #define qtma_XControlController(m, l) \
2644  (qtma_EXT(l, kXControlEventControllerFieldPos, \
2645  kXControlEventControllerFieldWidth))
2646 #define qtma_XControlValue(m, l) \
2647  (qtma_EXT(m, kXControlEventValueFieldPos, kXControlEventValueFieldWidth))
2648 #define qtma_MarkerSubtype(x) \
2649  (qtma_EXT(x, kMarkerEventSubtypeFieldPos, kMarkerEventSubtypeFieldWidth))
2650 #define qtma_MarkerValue(x) \
2651  (qtma_EXT(x, kMarkerEventValueFieldPos, kMarkerEventValueFieldWidth))
2652 
2653 #define qtma_KnobValue(m, l) \
2654  ((qtma_EXT(m, kKnobEventValueHighFieldPos, kKnobEventValueHighFieldWidth) \
2655  << 16) | \
2656  (qtma_EXT(l, kKnobEventValueLowFieldPos, kKnobEventValueLowFieldWidth)))
2657 
2658 #define qtma_KnobKnob(m, l) \
2659  (qtma_EXT(l, kKnobEventKnobFieldPos, kKnobEventKnobFieldWidth))
2660 #define qtma_GeneralSubtype(m, l) \
2661  (qtma_EXT(l, kGeneralEventSubtypeFieldPos, kGeneralEventSubtypeFieldWidth))
2662 #define qtma_GeneralLength(m, l) \
2663  (qtma_EXT(m, kGeneralEventLengthFieldPos, kGeneralEventLengthFieldWidth))
2664 #define qtma_StuffRestEvent(x, duration) \
2665  (x = (kRestEventType << kEventTypeFieldPos) | \
2666  ((long)(duration) << kRestEventDurationFieldPos), \
2667  x = EndianU32_NtoB(x))
2668 #define qtma_StuffNoteEvent(x, part, pitch, volume, duration) \
2669  (x = (kNoteEventType << kEventTypeFieldPos) | \
2670  ((long)(part) << kEventPartFieldPos) | \
2671  (((long)(pitch)-kNoteEventPitchOffset) << kNoteEventPitchFieldPos) | \
2672  (((long)(volume)-kNoteEventVolumeOffset) << kNoteEventVolumeFieldPos) | \
2673  ((long)(duration) << kNoteEventDurationFieldPos), \
2674  x = EndianU32_NtoB(x))
2675 #define qtma_StuffControlEvent(x, part, control, value) \
2676  (x = (kControlEventType << kEventTypeFieldPos) | \
2677  ((long)(part) << kEventPartFieldPos) | \
2678  ((long)(control) << kControlEventControllerFieldPos) | \
2679  ((long)((value) & qtma_MASK(kControlEventValueFieldWidth)) \
2680  << kControlEventValueFieldPos), \
2681  x = EndianU32_NtoB(x))
2682 #define qtma_StuffMarkerEvent(x, markerType, markerValue) \
2683  (x = (kMarkerEventType << kEventTypeFieldPos) | \
2684  ((long)(markerType) << kMarkerEventSubtypeFieldPos) | \
2685  ((long)(markerValue) << kMarkerEventValueFieldPos), \
2686  x = EndianU32_NtoB(x))
2687 #define qtma_StuffXNoteEvent(w1, w2, part, pitch, volume, duration) \
2688  (w1 = (kXNoteEventType << kXEventTypeFieldPos) | \
2689  ((long)(part) << kXEventPartFieldPos) | \
2690  ((long)(pitch) << kXNoteEventPitchFieldPos), \
2691  w1 = EndianU32_NtoB(w1), \
2692  w2 = (kXEventLengthBits << kEventLengthFieldPos) | \
2693  ((long)(duration) << kXNoteEventDurationFieldPos) | \
2694  ((long)(volume) << kXNoteEventVolumeFieldPos), \
2695  w2 = EndianU32_NtoB(w2))
2696 #define qtma_StuffXControlEvent(w1, w2, part, control, value) \
2697  (w1 = (kXControlEventType << kXEventTypeFieldPos) | \
2698  ((long)(part) << kXEventPartFieldPos) | \
2699  ((long)((value) & qtma_MASK(kXControlEventValueFieldWidth)) \
2700  << kXControlEventValueFieldPos), \
2701  w1 = EndianU32_NtoB(w1), \
2702  w2 = (kXEventLengthBits << kEventLengthFieldPos) | \
2703  ((long)(control) << kXControlEventControllerFieldPos), \
2704  w2 = EndianU32_NtoB(w2))
2705 #define qtma_StuffKnobEvent(w1, w2, part, knob, value) \
2706  (w1 = (kKnobEventType << kXEventTypeFieldPos) | \
2707  ((long)(part) << kXEventPartFieldPos) | \
2708  ((long)(value >> 16) << kKnobEventValueLowFieldPos), \
2709  w1 = EndianU32_NtoB(w1), \
2710  w2 = (kXEventLengthBits << kEventLengthFieldPos) | \
2711  ((long)(knob) << kKnobEventKnobFieldPos) | \
2712  ((long)(value & 0xFFFF) << kKnobEventValueLowFieldPos), \
2713  w2 = EndianU32_NtoB(w2))
2714 #define qtma_StuffGeneralEvent(w1, w2, part, subType, length) \
2715  (w1 = (kGeneralEventType << kXEventTypeFieldPos) | \
2716  ((long)(part) << kXEventPartFieldPos) | \
2717  ((long)(length) << kGeneralEventLengthFieldPos), \
2718  w1 = EndianU32_NtoB(w1), \
2719  w2 = (kGeneralEventLengthBits << kEventLengthFieldPos) | \
2720  ((long)(subType) << kGeneralEventSubtypeFieldPos) | \
2721  ((long)(length) << kGeneralEventLengthFieldPos), \
2722  w2 = EndianU32_NtoB(w2))
2723 #define qtma_NeedXGeneralEvent(length) \
2724  (((unsigned long)(length)) > (unsigned long)0xffff)
2725 
2726  /* General Event Defined Types*/
2727  enum
2728  {
2729  kGeneralEventNoteRequest = 1, /* Encapsulates NoteRequest data structure */
2730  kGeneralEventPartKey = 4,
2731  kGeneralEventTuneDifference =
2732  5, /* Contains a standard sequence, with end marker, for the tune
2733  difference of a sequence piece (halts QuickTime 2.0 Music) */
2734  kGeneralEventAtomicInstrument = 6, /* Encapsulates AtomicInstrument record */
2735  kGeneralEventKnob = 7, /* knobID/knobValue pairs; smallest event is 4 longs */
2736  kGeneralEventMIDIChannel = 8, /* used in tune header, one longword identifies
2737  the midi channel it originally came from */
2738  kGeneralEventPartChange =
2739  9, /* used in tune sequence, one longword identifies the tune part which
2740  can now take over this part's note channel (similar to program
2741  change) (halts QuickTime 2.0 Music)*/
2742  kGeneralEventNoOp = 10, /* guaranteed to do nothing and be ignored. (halts
2743  QuickTime 2.0 Music) */
2744  kGeneralEventUsedNotes = 11, /* four longwords specifying which midi notes are
2745  actually used, 0..127 msb to lsb */
2746  kGeneralEventPartMix =
2747  12 /* three longwords: Fixed volume, long balance, long flags */
2748  };
2749 
2750  /* Marker Event Defined Types // marker is 60 ee vv vv in hex, where e =
2751  * event type, and v = value*/
2752  enum
2753  {
2754  kMarkerEventEnd =
2755  0, /* marker type 0 means: value 0 - stop, value != 0 - ignore*/
2756  kMarkerEventBeat = 1, /* value 0 = single beat; anything else is
2757  65536ths-of-a-beat (quarter note)*/
2758  kMarkerEventTempo = 2 /* value same as beat marker, but indicates that a tempo
2759  event should be computed (based on where the next
2760  beat or tempo marker is) and emitted upon export*/
2761  };
2762 
2763  enum
2764  {
2765  kCurrentlyNativeEndian = 1,
2766  kCurrentlyNotNativeEndian = 2
2767  };
2768 
2769  /* UPP call backs */
2778  MusicMIDISendUPP
2779  NewMusicMIDISendUPP(MusicMIDISendProcPtr userRoutine);
2780 #if !OPAQUE_UPP_TYPES
2781  enum
2782  {
2783  uppMusicMIDISendProcInfo = 0x00000FF0
2784  }; /* pascal 4_bytes Func(4_bytes, 4_bytes, 4_bytes) */
2785 #ifdef __cplusplus
2786  inline MusicMIDISendUPP NewMusicMIDISendUPP(MusicMIDISendProcPtr userRoutine)
2787  {
2788  return (MusicMIDISendUPP)NewRoutineDescriptor((ProcPtr)(userRoutine),
2789  uppMusicMIDISendProcInfo,
2790  GetCurrentArchitecture());
2791  }
2792 #else
2793 #define NewMusicMIDISendUPP(userRoutine) \
2794  (MusicMIDISendUPP) \
2795  NewRoutineDescriptor((ProcPtr)(userRoutine), uppMusicMIDISendProcInfo, \
2796  GetCurrentArchitecture())
2797 #endif
2798 #endif
2799 
2808  MusicOfflineDataUPP
2809  NewMusicOfflineDataUPP(MusicOfflineDataProcPtr userRoutine);
2810 #if !OPAQUE_UPP_TYPES
2811  enum
2812  {
2813  uppMusicOfflineDataProcInfo = 0x00000FF0
2814  }; /* pascal 4_bytes Func(4_bytes, 4_bytes, 4_bytes) */
2815 #ifdef __cplusplus
2816  inline MusicOfflineDataUPP
2817  NewMusicOfflineDataUPP(MusicOfflineDataProcPtr userRoutine)
2818  {
2819  return (MusicOfflineDataUPP)NewRoutineDescriptor((ProcPtr)(userRoutine),
2820  uppMusicOfflineDataProcInfo,
2821  GetCurrentArchitecture());
2822  }
2823 #else
2824 #define NewMusicOfflineDataUPP(userRoutine) \
2825  (MusicOfflineDataUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), \
2826  uppMusicOfflineDataProcInfo, \
2827  GetCurrentArchitecture())
2828 #endif
2829 #endif
2830 
2839  TuneCallBackUPP
2840  NewTuneCallBackUPP(TuneCallBackProcPtr userRoutine);
2841 #if !OPAQUE_UPP_TYPES
2842  enum
2843  {
2844  uppTuneCallBackProcInfo = 0x000003C0
2845  }; /* pascal no_return_value Func(4_bytes, 4_bytes) */
2846 #ifdef __cplusplus
2847  inline TuneCallBackUPP NewTuneCallBackUPP(TuneCallBackProcPtr userRoutine)
2848  {
2849  return (TuneCallBackUPP)NewRoutineDescriptor((ProcPtr)(userRoutine),
2850  uppTuneCallBackProcInfo,
2851  GetCurrentArchitecture());
2852  }
2853 #else
2854 #define NewTuneCallBackUPP(userRoutine) \
2855  (TuneCallBackUPP) \
2856  NewRoutineDescriptor((ProcPtr)(userRoutine), uppTuneCallBackProcInfo, \
2857  GetCurrentArchitecture())
2858 #endif
2859 #endif
2860 
2869  TunePlayCallBackUPP
2870  NewTunePlayCallBackUPP(TunePlayCallBackProcPtr userRoutine);
2871 #if !OPAQUE_UPP_TYPES
2872  enum
2873  {
2874  uppTunePlayCallBackProcInfo = 0x00000FC0
2875  }; /* pascal no_return_value Func(4_bytes, 4_bytes, 4_bytes) */
2876 #ifdef __cplusplus
2877  inline TunePlayCallBackUPP
2878  NewTunePlayCallBackUPP(TunePlayCallBackProcPtr userRoutine)
2879  {
2880  return (TunePlayCallBackUPP)NewRoutineDescriptor((ProcPtr)(userRoutine),
2881  uppTunePlayCallBackProcInfo,
2882  GetCurrentArchitecture());
2883  }
2884 #else
2885 #define NewTunePlayCallBackUPP(userRoutine) \
2886  (TunePlayCallBackUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), \
2887  uppTunePlayCallBackProcInfo, \
2888  GetCurrentArchitecture())
2889 #endif
2890 #endif
2891 
2900  void
2901  DisposeMusicMIDISendUPP(MusicMIDISendUPP userUPP);
2902 #if !OPAQUE_UPP_TYPES
2903 #ifdef __cplusplus
2904  inline void DisposeMusicMIDISendUPP(MusicMIDISendUPP userUPP)
2905  {
2906  DisposeRoutineDescriptor((UniversalProcPtr)userUPP);
2907  }
2908 #else
2909 #define DisposeMusicMIDISendUPP(userUPP) DisposeRoutineDescriptor(userUPP)
2910 #endif
2911 #endif
2912 
2921  void
2922  DisposeMusicOfflineDataUPP(MusicOfflineDataUPP userUPP);
2923 #if !OPAQUE_UPP_TYPES
2924 #ifdef __cplusplus
2925  inline void DisposeMusicOfflineDataUPP(MusicOfflineDataUPP userUPP)
2926  {
2927  DisposeRoutineDescriptor((UniversalProcPtr)userUPP);
2928  }
2929 #else
2930 #define DisposeMusicOfflineDataUPP(userUPP) DisposeRoutineDescriptor(userUPP)
2931 #endif
2932 #endif
2933 
2942  void
2943  DisposeTuneCallBackUPP(TuneCallBackUPP userUPP);
2944 #if !OPAQUE_UPP_TYPES
2945 #ifdef __cplusplus
2946  inline void DisposeTuneCallBackUPP(TuneCallBackUPP userUPP)
2947  {
2948  DisposeRoutineDescriptor((UniversalProcPtr)userUPP);
2949  }
2950 #else
2951 #define DisposeTuneCallBackUPP(userUPP) DisposeRoutineDescriptor(userUPP)
2952 #endif
2953 #endif
2954 
2963  void
2964  DisposeTunePlayCallBackUPP(TunePlayCallBackUPP userUPP);
2965 #if !OPAQUE_UPP_TYPES
2966 #ifdef __cplusplus
2967  inline void DisposeTunePlayCallBackUPP(TunePlayCallBackUPP userUPP)
2968  {
2969  DisposeRoutineDescriptor((UniversalProcPtr)userUPP);
2970  }
2971 #else
2972 #define DisposeTunePlayCallBackUPP(userUPP) DisposeRoutineDescriptor(userUPP)
2973 #endif
2974 #endif
2975 
2984  ComponentResult
2986  MusicMIDIPacket *mmp, MusicMIDISendUPP userUPP);
2987 #if !OPAQUE_UPP_TYPES
2988 #ifdef __cplusplus
2989  inline ComponentResult InvokeMusicMIDISendUPP(ComponentInstance self,
2990  long refCon, MusicMIDIPacket *mmp,
2991  MusicMIDISendUPP userUPP)
2992  {
2993  return (ComponentResult)CALL_THREE_PARAMETER_UPP(
2994  userUPP, uppMusicMIDISendProcInfo, self, refCon, mmp);
2995  }
2996 #else
2997 #define InvokeMusicMIDISendUPP(self, refCon, mmp, userUPP) \
2998  (ComponentResult) CALL_THREE_PARAMETER_UPP( \
2999  (userUPP), uppMusicMIDISendProcInfo, (self), (refCon), (mmp))
3000 #endif
3001 #endif
3002 
3011  ComponentResult
3012  InvokeMusicOfflineDataUPP(Ptr SoundData, long numBytes, long myRefCon,
3013  MusicOfflineDataUPP userUPP);
3014 #if !OPAQUE_UPP_TYPES
3015 #ifdef __cplusplus
3016  inline ComponentResult InvokeMusicOfflineDataUPP(Ptr SoundData, long numBytes,
3017  long myRefCon,
3018  MusicOfflineDataUPP userUPP)
3019  {
3020  return (ComponentResult)CALL_THREE_PARAMETER_UPP(
3021  userUPP, uppMusicOfflineDataProcInfo, SoundData, numBytes, myRefCon);
3022  }
3023 #else
3024 #define InvokeMusicOfflineDataUPP(SoundData, numBytes, myRefCon, userUPP) \
3025  (ComponentResult) \
3026  CALL_THREE_PARAMETER_UPP((userUPP), uppMusicOfflineDataProcInfo, \
3027  (SoundData), (numBytes), (myRefCon))
3028 #endif
3029 #endif
3030 
3039  void
3040  InvokeTuneCallBackUPP(const TuneStatus *status, long refCon,
3041  TuneCallBackUPP userUPP);
3042 #if !OPAQUE_UPP_TYPES
3043 #ifdef __cplusplus
3044  inline void InvokeTuneCallBackUPP(const TuneStatus *status, long refCon,
3045  TuneCallBackUPP userUPP)
3046  {
3047  CALL_TWO_PARAMETER_UPP(userUPP, uppTuneCallBackProcInfo, status, refCon);
3048  }
3049 #else
3050 #define InvokeTuneCallBackUPP(status, refCon, userUPP) \
3051  CALL_TWO_PARAMETER_UPP((userUPP), uppTuneCallBackProcInfo, (status), (refCon))
3052 #endif
3053 #endif
3054 
3063  void
3064  InvokeTunePlayCallBackUPP(unsigned long *event, long seed, long refCon,
3065  TunePlayCallBackUPP userUPP);
3066 #if !OPAQUE_UPP_TYPES
3067 #ifdef __cplusplus
3068  inline void InvokeTunePlayCallBackUPP(unsigned long *event, long seed,
3069  long refCon,
3070  TunePlayCallBackUPP userUPP)
3071  {
3072  CALL_THREE_PARAMETER_UPP(userUPP, uppTunePlayCallBackProcInfo, event, seed,
3073  refCon);
3074  }
3075 #else
3076 #define InvokeTunePlayCallBackUPP(event, seed, refCon, userUPP) \
3077  CALL_THREE_PARAMETER_UPP((userUPP), uppTunePlayCallBackProcInfo, (event), \
3078  (seed), (refCon))
3079 #endif
3080 #endif
3081 
3082 #if CALL_NOT_IN_CARBON || OLDROUTINENAMES
3083 /* support for pre-Carbon UPP routines: New...Proc and Call...Proc */
3084 #define NewMusicMIDISendProc(userRoutine) NewMusicMIDISendUPP(userRoutine)
3085 #define NewMusicOfflineDataProc(userRoutine) NewMusicOfflineDataUPP(userRoutine)
3086 #define NewTuneCallBackProc(userRoutine) NewTuneCallBackUPP(userRoutine)
3087 #define NewTunePlayCallBackProc(userRoutine) NewTunePlayCallBackUPP(userRoutine)
3088 #define CallMusicMIDISendProc(userRoutine, self, refCon, mmp) \
3089  InvokeMusicMIDISendUPP(self, refCon, mmp, userRoutine)
3090 #define CallMusicOfflineDataProc(userRoutine, SoundData, numBytes, myRefCon) \
3091  InvokeMusicOfflineDataUPP(SoundData, numBytes, myRefCon, userRoutine)
3092 #define CallTuneCallBackProc(userRoutine, status, refCon) \
3093  InvokeTuneCallBackUPP(status, refCon, userRoutine)
3094 #define CallTunePlayCallBackProc(userRoutine, event, seed, refCon) \
3095  InvokeTunePlayCallBackUPP(event, seed, refCon, userRoutine)
3096 #endif /* CALL_NOT_IN_CARBON */
3097 
3098  /* selectors for component calls */
3099  enum
3100  {
3101  kQTMIDIGetMIDIPortsSelect = 0x0001,
3102  kQTMIDIUseSendPortSelect = 0x0002,
3103  kQTMIDISendMIDISelect = 0x0003,
3104  kMusicGetDescriptionSelect = 0x0001,
3105  kMusicGetPartSelect = 0x0002,
3106  kMusicSetPartSelect = 0x0003,
3107  kMusicSetPartInstrumentNumberSelect = 0x0004,
3108  kMusicGetPartInstrumentNumberSelect = 0x0005,
3109  kMusicStorePartInstrumentSelect = 0x0006,
3110  kMusicGetPartAtomicInstrumentSelect = 0x0009,
3111  kMusicSetPartAtomicInstrumentSelect = 0x000A,
3112  kMusicGetPartKnobSelect = 0x0010,
3113  kMusicSetPartKnobSelect = 0x0011,
3114  kMusicGetKnobSelect = 0x0012,
3115  kMusicSetKnobSelect = 0x0013,
3116  kMusicGetPartNameSelect = 0x0014,
3117  kMusicSetPartNameSelect = 0x0015,
3118  kMusicFindToneSelect = 0x0016,
3119  kMusicPlayNoteSelect = 0x0017,
3120  kMusicResetPartSelect = 0x0018,
3121  kMusicSetPartControllerSelect = 0x0019,
3122  kMusicGetPartControllerSelect = 0x001A,
3123  kMusicGetMIDIProcSelect = 0x001B,
3124  kMusicSetMIDIProcSelect = 0x001C,
3125  kMusicGetInstrumentNamesSelect = 0x001D,
3126  kMusicGetDrumNamesSelect = 0x001E,
3127  kMusicGetMasterTuneSelect = 0x001F,
3128  kMusicSetMasterTuneSelect = 0x0020,
3129  kMusicGetInstrumentAboutInfoSelect = 0x0022,
3130  kMusicGetDeviceConnectionSelect = 0x0023,
3131  kMusicUseDeviceConnectionSelect = 0x0024,
3132  kMusicGetKnobSettingStringsSelect = 0x0025,
3133  kMusicGetMIDIPortsSelect = 0x0026,
3134  kMusicSendMIDISelect = 0x0027,
3135  kMusicStartOfflineSelect = 0x0029,
3136  kMusicSetOfflineTimeToSelect = 0x002A,
3137  kMusicGetInstrumentKnobDescriptionSelect = 0x002B,
3138  kMusicGetDrumKnobDescriptionSelect = 0x002C,
3139  kMusicGetKnobDescriptionSelect = 0x002D,
3140  kMusicGetInfoTextSelect = 0x002E,
3141  kMusicGetInstrumentInfoSelect = 0x002F,
3142  kMusicTaskSelect = 0x0031,
3143  kMusicSetPartInstrumentNumberInterruptSafeSelect = 0x0032,
3144  kMusicSetPartSoundLocalizationSelect = 0x0033,
3145  kMusicGenericConfigureSelect = 0x0100,
3146  kMusicGenericGetPartSelect = 0x0101,
3147  kMusicGenericGetKnobListSelect = 0x0102,
3148  kMusicGenericSetResourceNumbersSelect = 0x0103,
3149  kMusicDerivedMIDISendSelect = 0x0200,
3150  kMusicDerivedSetKnobSelect = 0x0201,
3151  kMusicDerivedSetPartSelect = 0x0202,
3152  kMusicDerivedSetInstrumentSelect = 0x0203,
3153  kMusicDerivedSetPartInstrumentNumberSelect = 0x0204,
3154  kMusicDerivedSetMIDISelect = 0x0205,
3155  kMusicDerivedStorePartInstrumentSelect = 0x0206,
3156  kMusicDerivedOpenResFileSelect = 0x0207,
3157  kMusicDerivedCloseResFileSelect = 0x0208,
3158  kNARegisterMusicDeviceSelect = 0x0000,
3159  kNAUnregisterMusicDeviceSelect = 0x0001,
3160  kNAGetRegisteredMusicDeviceSelect = 0x0002,
3161  kNASaveMusicConfigurationSelect = 0x0003,
3162  kNANewNoteChannelSelect = 0x0004,
3163  kNADisposeNoteChannelSelect = 0x0005,
3164  kNAGetNoteChannelInfoSelect = 0x0006,
3165  kNAPrerollNoteChannelSelect = 0x0007,
3166  kNAUnrollNoteChannelSelect = 0x0008,
3167  kNASetNoteChannelVolumeSelect = 0x000B,
3168  kNAResetNoteChannelSelect = 0x000C,
3169  kNAPlayNoteSelect = 0x000D,
3170  kNASetControllerSelect = 0x000E,
3171  kNASetKnobSelect = 0x000F,
3172  kNAFindNoteChannelToneSelect = 0x0010,
3173  kNASetInstrumentNumberSelect = 0x0011,
3174  kNAPickInstrumentSelect = 0x0012,
3175  kNAPickArrangementSelect = 0x0013,
3176  kNAStuffToneDescriptionSelect = 0x001B,
3177  kNACopyrightDialogSelect = 0x001C,
3178  kNAGetIndNoteChannelSelect = 0x001F,
3179  kNAGetMIDIPortsSelect = 0x0021,
3180  kNAGetNoteRequestSelect = 0x0022,
3181  kNASendMIDISelect = 0x0023,
3182  kNAPickEditInstrumentSelect = 0x0024,
3183  kNANewNoteChannelFromAtomicInstrumentSelect = 0x0025,
3184  kNASetAtomicInstrumentSelect = 0x0026,
3185  kNAGetKnobSelect = 0x0028,
3186  kNATaskSelect = 0x0029,
3187  kNASetNoteChannelBalanceSelect = 0x002A,
3188  kNASetInstrumentNumberInterruptSafeSelect = 0x002B,
3189  kNASetNoteChannelSoundLocalizationSelect = 0x002C,
3190  kNAGetControllerSelect = 0x002D,
3191  kTuneSetHeaderSelect = 0x0004,
3192  kTuneGetTimeBaseSelect = 0x0005,
3193  kTuneSetTimeScaleSelect = 0x0006,
3194  kTuneGetTimeScaleSelect = 0x0007,
3195  kTuneGetIndexedNoteChannelSelect = 0x0008,
3196  kTuneQueueSelect = 0x000A,
3197  kTuneInstantSelect = 0x000B,
3198  kTuneGetStatusSelect = 0x000C,
3199  kTuneStopSelect = 0x000D,
3200  kTuneSetVolumeSelect = 0x0010,
3201  kTuneGetVolumeSelect = 0x0011,
3202  kTunePrerollSelect = 0x0012,
3203  kTuneUnrollSelect = 0x0013,
3204  kTuneSetNoteChannelsSelect = 0x0014,
3205  kTuneSetPartTransposeSelect = 0x0015,
3206  kTuneGetNoteAllocatorSelect = 0x0017,
3207  kTuneSetSofterSelect = 0x0018,
3208  kTuneTaskSelect = 0x0019,
3209  kTuneSetBalanceSelect = 0x001A,
3210  kTuneSetSoundLocalizationSelect = 0x001B,
3211  kTuneSetHeaderWithSizeSelect = 0x001C,
3212  kTuneSetPartMixSelect = 0x001D,
3213  kTuneGetPartMixSelect = 0x001E
3214  };
3215 
3216 #if PRAGMA_STRUCT_ALIGN
3217 #pragma options align = reset
3218 #elif PRAGMA_STRUCT_PACKPUSH
3219 #pragma pack(pop)
3220 #elif PRAGMA_STRUCT_PACK
3221 #pragma pack()
3222 #endif
3223 
3224 #ifdef PRAGMA_IMPORT_OFF
3225 #pragma import off
3226 #elif PRAGMA_IMPORT
3227 #pragma import reset
3228 #endif
3229 
3230 #ifdef __cplusplus
3231 }
3232 #endif
3233 
3234 #endif /* __QUICKTIMEMUSIC__ */
Component Manager Interfaces.
QuickTime Interfaces.
long BigEndianLong
Definition: Endian.h:549
QuickTime Image Compression Interfaces.
Memory Manager Interfaces.
long Fixed
Definition: MacTypes.h:153
unsigned char * StringPtr
Definition: MacTypes.h:477
void DisposeRoutineDescriptor(UniversalProcPtr theUPP)
#define STACK_UPP_TYPE(name)
Definition: MixedMode.h:734
UniversalProcPtr NewRoutineDescriptor(ProcPtr theProc, ProcInfoType theProcInfo, ISAType theISA)
QuickTime Interfaces.
ComponentResult MusicFindTone(MusicComponent mc, ToneDescription *td, long *libraryIndexOut, unsigned long *fit)
ComponentResult NASetNoteChannelVolume(NoteAllocator na, NoteChannel noteChannel, Fixed volume)
ComponentResult QTMIDIUseSendPort(QTMIDIComponent ci, long portIndex, long inUse)
ComponentResult MusicGetPartInstrumentNumber(MusicComponent mc, long part)
ComponentResult InvokeMusicMIDISendUPP(ComponentInstance self, long refCon, MusicMIDIPacket *mmp, MusicMIDISendUPP userUPP)
ComponentResult MusicDerivedSetKnob(MusicComponent mc, long knobType, long knobNumber, long knobValue, long partNumber, GCPart *p, GenericKnobDescription *gkd)
ComponentResult NASetNoteChannelSoundLocalization(NoteAllocator na, NoteChannel noteChannel, Handle data)
ComponentResult NASetInstrumentNumberInterruptSafe(NoteAllocator na, NoteChannel noteChannel, long instrumentNumber)
ComponentResult MusicStartOffline(MusicComponent mc, unsigned long *numChannels, UnsignedFixed *sampleRate, unsigned short *sampleSize, MusicOfflineDataUPP dataProc, long dataProcRefCon)
ComponentResult TuneSetSofter(TunePlayer tp, long softer)
TuneCallBackUPP NewTuneCallBackUPP(TuneCallBackProcPtr userRoutine)
ComponentResult MusicDerivedOpenResFile(MusicComponent mc)
void InvokeTuneCallBackUPP(const TuneStatus *status, long refCon, TuneCallBackUPP userUPP)
ComponentResult NARegisterMusicDevice(NoteAllocator na, OSType synthType, Str31 name, SynthesizerConnections *connections)
MusicOfflineDataUPP NewMusicOfflineDataUPP(MusicOfflineDataProcPtr userRoutine)
ComponentResult MusicDerivedCloseResFile(MusicComponent mc, short resRefNum)
ComponentResult NASetAtomicInstrument(NoteAllocator na, NoteChannel noteChannel, AtomicInstrumentPtr instrument, long flags)
ComponentResult MusicDerivedSetPartInstrumentNumber(MusicComponent mc, long partNumber, GCPart *p)
ComponentResult TuneSetTimeScale(TunePlayer tp, TimeScale scale)
ComponentResult TuneSetSoundLocalization(TunePlayer tp, Handle data)
ComponentResult TuneGetVolume(TunePlayer tp)
ComponentResult NASetNoteChannelBalance(NoteAllocator na, NoteChannel noteChannel, long balance)
ComponentResult MusicGetDescription(MusicComponent mc, SynthesizerDescription *sd)
ComponentResult TuneQueue(TunePlayer tp, unsigned long *tune, Fixed tuneRate, unsigned long tuneStartPosition, unsigned long tuneStopPosition, unsigned long queueFlags, TuneCallBackUPP callBackProc, long refCon)
ComponentResult MusicGetInstrumentAboutInfo(MusicComponent mc, long part, InstrumentAboutInfo *iai)
ComponentResult NAUnregisterMusicDevice(NoteAllocator na, long index)
ComponentResult MusicGetInstrumentInfo(MusicComponent mc, long getInstrumentInfoFlags, InstrumentInfoListHandle *infoListH)
ComponentResult NADisposeNoteChannel(NoteAllocator na, NoteChannel noteChannel)
ComponentResult MusicGetKnobSettingStrings(MusicComponent mc, long knobIndex, long isGlobal, Handle *settingsNames, Handle *settingsCategoryLasts, Handle *settingsCategoryNames)
ComponentResult MusicSendMIDI(MusicComponent mc, long portIndex, MusicMIDIPacket *mp)
ComponentResult TuneGetIndexedNoteChannel(TunePlayer tp, long i, NoteChannel *nc)
ComponentResult NATask(NoteAllocator na)
ComponentResult TuneStop(TunePlayer tp, long stopFlags)
ComponentResult NAGetKnob(NoteAllocator na, NoteChannel noteChannel, long knobNumber, long *knobValue)
ComponentResult MusicSetMIDIProc(MusicComponent mc, MusicMIDISendUPP midiSendProc, long refCon)
ComponentResult NAFindNoteChannelTone(NoteAllocator na, NoteChannel noteChannel, ToneDescription *td, long *instrumentNumber)
MusicMIDISendUPP NewMusicMIDISendUPP(MusicMIDISendProcPtr userRoutine)
ComponentResult NANewNoteChannel(NoteAllocator na, NoteRequest *noteRequest, NoteChannel *outChannel)
ComponentResult MusicGenericGetPart(MusicComponent mc, long partNumber, GCPart **part)
ComponentResult MusicSetMasterTune(MusicComponent mc, long masterTune)
ComponentResult TuneSetPartTranspose(TunePlayer tp, unsigned long part, long transpose, long velocityShift)
ComponentResult NASendMIDI(NoteAllocator na, NoteChannel noteChannel, MusicMIDIPacket *mp)
ComponentResult TuneSetPartMix(TunePlayer tp, unsigned long partNumber, long volume, long balance, long mixFlags)
ComponentResult MusicGenericConfigure(MusicComponent mc, long mode, long flags, long baseResID)
ComponentResult InvokeMusicOfflineDataUPP(Ptr SoundData, long numBytes, long myRefCon, MusicOfflineDataUPP userUPP)
ComponentResult MusicGetPartKnob(MusicComponent mc, long part, long knobID)
ComponentResult TuneTask(TunePlayer tp)
ComponentResult MusicGetPartName(MusicComponent mc, long part, StringPtr name)
ComponentResult NASetController(NoteAllocator na, NoteChannel noteChannel, long controllerNumber, long controllerValue)
ComponentResult MusicSetPart(MusicComponent mc, long part, long midiChannel, long polyphony)
ComponentResult NAGetMIDIPorts(NoteAllocator na, QTMIDIPortListHandle *inputPorts, QTMIDIPortListHandle *outputPorts)
ComponentResult NACopyrightDialog(NoteAllocator na, PicHandle p, StringPtr author, StringPtr copyright, StringPtr other, StringPtr title, ModalFilterUPP filterProc, long refCon)
ComponentResult TuneGetTimeBase(TunePlayer tp, TimeBase *tb)
ComponentResult MusicGetMIDIProc(MusicComponent mc, MusicMIDISendUPP *midiSendProc, long *refCon)
ComponentResult MusicUseDeviceConnection(MusicComponent mc, long id1, long id2)
ComponentResult NAGetIndNoteChannel(NoteAllocator na, long index, NoteChannel *nc, long *seed)
ComponentResult MusicResetPart(MusicComponent mc, long part)
ComponentResult TuneSetHeader(TunePlayer tp, unsigned long *header)
ComponentResult MusicGetInstrumentKnobDescription(MusicComponent mc, long knobIndex, KnobDescription *mkd)
ComponentResult NAPrerollNoteChannel(NoteAllocator na, NoteChannel noteChannel)
ComponentResult QTMIDISendMIDI(QTMIDIComponent ci, long portIndex, MusicMIDIPacket *mp)
ComponentResult NASaveMusicConfiguration(NoteAllocator na)
ComponentResult NAGetRegisteredMusicDevice(NoteAllocator na, long index, OSType *synthType, Str31 name, SynthesizerConnections *connections, MusicComponent *mc)
ComponentResult MusicGetKnobDescription(MusicComponent mc, long knobIndex, KnobDescription *mkd)
ComponentResult MusicSetKnob(MusicComponent mc, long knobID, long knobValue)
ComponentResult MusicSetPartController(MusicComponent mc, long part, MusicController controllerNumber, long controllerValue)
ComponentResult MusicDerivedSetInstrument(MusicComponent mc, long partNumber, GCPart *p)
void DisposeMusicMIDISendUPP(MusicMIDISendUPP userUPP)
ComponentResult MusicDerivedSetMIDI(MusicComponent mc, MusicMIDISendUPP midiProc, long refcon, long midiChannel)
ComponentResult MusicGenericGetKnobList(MusicComponent mc, long knobType, GenericKnobDescriptionListHandle *gkdlH)
ComponentResult NAResetNoteChannel(NoteAllocator na, NoteChannel noteChannel)
ComponentResult MusicGetPartAtomicInstrument(MusicComponent mc, long part, AtomicInstrument *ai, long flags)
ComponentResult TuneInstant(TunePlayer tp, unsigned long *tune, unsigned long tunePosition)
ComponentResult NAUnrollNoteChannel(NoteAllocator na, NoteChannel noteChannel)
ComponentResult NAStuffToneDescription(NoteAllocator na, long gmNumber, ToneDescription *td)
ComponentResult MusicSetPartInstrumentNumber(MusicComponent mc, long part, long instrumentNumber)
ComponentResult NASetInstrumentNumber(NoteAllocator na, NoteChannel noteChannel, long instrumentNumber)
ComponentResult NAPlayNote(NoteAllocator na, NoteChannel noteChannel, long pitch, long velocity)
ComponentResult NAPickEditInstrument(NoteAllocator na, ModalFilterUPP filterProc, StringPtr prompt, long refCon, NoteChannel nc, AtomicInstrument ai, long flags)
ComponentResult NASetKnob(NoteAllocator na, NoteChannel noteChannel, long knobNumber, long knobValue)
ComponentResult MusicGetDrumKnobDescription(MusicComponent mc, long knobIndex, KnobDescription *mkd)
ComponentResult MusicSetOfflineTimeTo(MusicComponent mc, long newTimeStamp)
ComponentResult NAGetNoteChannelInfo(NoteAllocator na, NoteChannel noteChannel, long *index, long *part)
NoteAllocator TuneGetNoteAllocator(TunePlayer tp)
ComponentResult TuneUnroll(TunePlayer tp)
UInt8 NoteRequestMIDIChannel
Definition: QuickTimeMusic.h:1585
ComponentResult MusicSetPartName(MusicComponent mc, long part, StringPtr name)
ComponentResult MusicGetKnob(MusicComponent mc, long knobID)
ComponentResult TunePreroll(TunePlayer tp)
ComponentResult MusicDerivedMIDISend(MusicComponent mc, MusicMIDIPacket *packet)
ComponentResult MusicGetMasterTune(MusicComponent mc)
ComponentResult MusicGenericSetResourceNumbers(MusicComponent mc, Handle resourceIDH)
ComponentResult NANewNoteChannelFromAtomicInstrument(NoteAllocator na, AtomicInstrumentPtr instrument, long flags, NoteChannel *outChannel)
ComponentResult TuneGetStatus(TunePlayer tp, TuneStatus *status)
ComponentResult TuneGetPartMix(TunePlayer tp, unsigned long partNumber, long *volumeOut, long *balanceOut, long *mixFlagsOut)
ComponentResult TuneSetHeaderWithSize(TunePlayer tp, unsigned long *header, unsigned long size)
ComponentResult MusicSetPartAtomicInstrument(MusicComponent mc, long part, AtomicInstrumentPtr aiP, long flags)
ComponentResult MusicDerivedStorePartInstrument(MusicComponent mc, long partNumber, GCPart *p, long instrumentNumber)
ComponentResult NAPickArrangement(NoteAllocator na, ModalFilterUPP filterProc, StringPtr prompt, long zero1, long zero2, Track t, StringPtr songName)
ComponentResult MusicGetMIDIPorts(MusicComponent mc, long *inputPortCount, long *outputPortCount)
ComponentResult MusicGetInfoText(MusicComponent mc, long selector, Handle *textH, Handle *styleH)
ComponentResult NAPickInstrument(NoteAllocator na, ModalFilterUPP filterProc, StringPtr prompt, ToneDescription *sd, unsigned long flags, long refCon, long reserved1, long reserved2)
ComponentResult TuneSetBalance(TunePlayer tp, long balance)
ComponentResult TuneGetTimeScale(TunePlayer tp, TimeScale *scale)
ComponentResult MusicGetDrumNames(MusicComponent mc, long modifiableInstruments, Handle *instrumentNumbers, Handle *instrumentNames)
ComponentResult MusicDerivedSetPart(MusicComponent mc, long partNumber, GCPart *p)
ComponentResult MusicGetInstrumentNames(MusicComponent mc, long modifiableInstruments, Handle *instrumentNames, Handle *instrumentCategoryLasts, Handle *instrumentCategoryNames)
void InvokeTunePlayCallBackUPP(unsigned long *event, long seed, long refCon, TunePlayCallBackUPP userUPP)
ComponentResult QTMIDIGetMIDIPorts(QTMIDIComponent ci, QTMIDIPortListHandle *inputPorts, QTMIDIPortListHandle *outputPorts)
TunePlayCallBackUPP NewTunePlayCallBackUPP(TunePlayCallBackProcPtr userRoutine)
ComponentResult MusicPlayNote(MusicComponent mc, long part, long pitch, long velocity)
ComponentResult MusicStorePartInstrument(MusicComponent mc, long part, long instrumentNumber)
ComponentResult NAGetNoteRequest(NoteAllocator na, NoteChannel noteChannel, NoteRequest *nrOut)
void DisposeTuneCallBackUPP(TuneCallBackUPP userUPP)
ComponentResult MusicGetPart(MusicComponent mc, long part, long *midiChannel, long *polyphony)
ComponentResult MusicSetPartSoundLocalization(MusicComponent mc, long part, Handle data)
ComponentResult MusicSetPartInstrumentNumberInterruptSafe(MusicComponent mc, long part, long instrumentNumber)
ComponentResult MusicTask(MusicComponent mc)
void DisposeTunePlayCallBackUPP(TunePlayCallBackUPP userUPP)
ComponentResult MusicGetPartController(MusicComponent mc, long part, MusicController controllerNumber)
void DisposeMusicOfflineDataUPP(MusicOfflineDataUPP userUPP)
ComponentResult MusicSetPartKnob(MusicComponent mc, long part, long knobID, long knobValue)
ComponentResult TuneSetNoteChannels(TunePlayer tp, unsigned long count, NoteChannel *noteChannelList, TunePlayCallBackUPP playCallBackProc, long refCon)
SInt32 MusicController
Definition: QuickTimeMusic.h:371
ComponentResult NAGetController(NoteAllocator na, NoteChannel noteChannel, long controllerNumber, long *controllerValue)
ComponentResult MusicGetDeviceConnection(MusicComponent mc, long index, long *id1, long *id2)
ComponentResult TuneSetVolume(TunePlayer tp, Fixed volume)
Interface to Quickdraw Graphics.
Sound Manager Interfaces.
Video Driver Interfaces.
Definition: Components.h:220
Definition: Components.h:266
Definition: Events.h:224
Definition: QuickTimeMusic.h:618
Definition: QuickTimeMusic.h:787
Definition: QuickTimeMusic.h:720
Definition: QuickTimeMusic.h:711
Definition: QuickTimeMusic.h:114
Definition: QuickTimeMusic.h:102
Definition: QuickTimeMusic.h:97
Definition: QuickTimeMusic.h:132
Definition: QuickTimeMusic.h:627
Definition: QuickTimeMusic.h:856
Definition: QuickTimeMusic.h:848
Definition: QuickTimeMusic.h:608
Definition: QuickTimeMusic.h:196
Definition: QuickTimeMusic.h:1587
Definition: QuickTimeMusic.h:1597
Definition: QuickTimeMusic.h:841
Definition: Quickdraw.h:326
Definition: PPCToolbox.h:168
Definition: QuickTimeMusic.h:263
Definition: QuickTimeMusic.h:257
Definition: QuickTimeMusic.h:241
Definition: QuickTimeMusic.h:502
Definition: QuickTimeMusic.h:535
Definition: Movies.h:191
Definition: QuickTimeMusic.h:2060
Definition: OpenTransportProtocol.h:205