Added support for APIs in QuickTimeMusic.h. This one is a bit dodgy:
the header file seems to be hand-written and missing the "const" keywords
for input parameters passed by reference.
diff --git a/Mac/Modules/qt/_Qtmodule.c b/Mac/Modules/qt/_Qtmodule.c
index 74121af..b201021 100644
--- a/Mac/Modules/qt/_Qtmodule.c
+++ b/Mac/Modules/qt/_Qtmodule.c
@@ -78,6 +78,16 @@
 	return 1;
 }
 
+static int
+QtMusicMIDIPacket_Convert(PyObject *v, MusicMIDIPacket *p_itself)
+{
+	int dummy;
+	
+	if( !PyArg_ParseTuple(v, "hls#", &p_itself->length, &p_itself->reserved, p_itself->data, dummy) )
+		return 0;
+	return 1;
+}
+
 
 
 
@@ -24794,6 +24804,1427 @@
 	return _res;
 }
 
+static PyObject *Qt_QTMIDIGetMIDIPorts(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	QTMIDIComponent ci;
+	QTMIDIPortListHandle inputPorts;
+	QTMIDIPortListHandle outputPorts;
+#ifndef QTMIDIGetMIDIPorts
+	PyMac_PRECHECK(QTMIDIGetMIDIPorts);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &ci))
+		return NULL;
+	_rv = QTMIDIGetMIDIPorts(ci,
+	                         &inputPorts,
+	                         &outputPorts);
+	_res = Py_BuildValue("lO&O&",
+	                     _rv,
+	                     ResObj_New, inputPorts,
+	                     ResObj_New, outputPorts);
+	return _res;
+}
+
+static PyObject *Qt_QTMIDIUseSendPort(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	QTMIDIComponent ci;
+	long portIndex;
+	long inUse;
+#ifndef QTMIDIUseSendPort
+	PyMac_PRECHECK(QTMIDIUseSendPort);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&ll",
+	                      CmpInstObj_Convert, &ci,
+	                      &portIndex,
+	                      &inUse))
+		return NULL;
+	_rv = QTMIDIUseSendPort(ci,
+	                        portIndex,
+	                        inUse);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_QTMIDISendMIDI(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	QTMIDIComponent ci;
+	long portIndex;
+	MusicMIDIPacket mp;
+#ifndef QTMIDISendMIDI
+	PyMac_PRECHECK(QTMIDISendMIDI);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&lO&",
+	                      CmpInstObj_Convert, &ci,
+	                      &portIndex,
+	                      QtMusicMIDIPacket_Convert, &mp))
+		return NULL;
+	_rv = QTMIDISendMIDI(ci,
+	                     portIndex,
+	                     &mp);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MusicGetPart(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long part;
+	long midiChannel;
+	long polyphony;
+#ifndef MusicGetPart
+	PyMac_PRECHECK(MusicGetPart);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &mc,
+	                      &part))
+		return NULL;
+	_rv = MusicGetPart(mc,
+	                   part,
+	                   &midiChannel,
+	                   &polyphony);
+	_res = Py_BuildValue("lll",
+	                     _rv,
+	                     midiChannel,
+	                     polyphony);
+	return _res;
+}
+
+static PyObject *Qt_MusicSetPart(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long part;
+	long midiChannel;
+	long polyphony;
+#ifndef MusicSetPart
+	PyMac_PRECHECK(MusicSetPart);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&lll",
+	                      CmpInstObj_Convert, &mc,
+	                      &part,
+	                      &midiChannel,
+	                      &polyphony))
+		return NULL;
+	_rv = MusicSetPart(mc,
+	                   part,
+	                   midiChannel,
+	                   polyphony);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MusicSetPartInstrumentNumber(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long part;
+	long instrumentNumber;
+#ifndef MusicSetPartInstrumentNumber
+	PyMac_PRECHECK(MusicSetPartInstrumentNumber);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&ll",
+	                      CmpInstObj_Convert, &mc,
+	                      &part,
+	                      &instrumentNumber))
+		return NULL;
+	_rv = MusicSetPartInstrumentNumber(mc,
+	                                   part,
+	                                   instrumentNumber);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MusicGetPartInstrumentNumber(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long part;
+#ifndef MusicGetPartInstrumentNumber
+	PyMac_PRECHECK(MusicGetPartInstrumentNumber);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &mc,
+	                      &part))
+		return NULL;
+	_rv = MusicGetPartInstrumentNumber(mc,
+	                                   part);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MusicStorePartInstrument(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long part;
+	long instrumentNumber;
+#ifndef MusicStorePartInstrument
+	PyMac_PRECHECK(MusicStorePartInstrument);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&ll",
+	                      CmpInstObj_Convert, &mc,
+	                      &part,
+	                      &instrumentNumber))
+		return NULL;
+	_rv = MusicStorePartInstrument(mc,
+	                               part,
+	                               instrumentNumber);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MusicGetPartAtomicInstrument(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long part;
+	AtomicInstrument ai;
+	long flags;
+#ifndef MusicGetPartAtomicInstrument
+	PyMac_PRECHECK(MusicGetPartAtomicInstrument);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&ll",
+	                      CmpInstObj_Convert, &mc,
+	                      &part,
+	                      &flags))
+		return NULL;
+	_rv = MusicGetPartAtomicInstrument(mc,
+	                                   part,
+	                                   &ai,
+	                                   flags);
+	_res = Py_BuildValue("lO&",
+	                     _rv,
+	                     ResObj_New, ai);
+	return _res;
+}
+
+static PyObject *Qt_MusicSetPartAtomicInstrument(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long part;
+	AtomicInstrumentPtr aiP;
+	long flags;
+#ifndef MusicSetPartAtomicInstrument
+	PyMac_PRECHECK(MusicSetPartAtomicInstrument);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&lsl",
+	                      CmpInstObj_Convert, &mc,
+	                      &part,
+	                      &aiP,
+	                      &flags))
+		return NULL;
+	_rv = MusicSetPartAtomicInstrument(mc,
+	                                   part,
+	                                   aiP,
+	                                   flags);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MusicGetPartKnob(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long part;
+	long knobID;
+#ifndef MusicGetPartKnob
+	PyMac_PRECHECK(MusicGetPartKnob);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&ll",
+	                      CmpInstObj_Convert, &mc,
+	                      &part,
+	                      &knobID))
+		return NULL;
+	_rv = MusicGetPartKnob(mc,
+	                       part,
+	                       knobID);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MusicSetPartKnob(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long part;
+	long knobID;
+	long knobValue;
+#ifndef MusicSetPartKnob
+	PyMac_PRECHECK(MusicSetPartKnob);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&lll",
+	                      CmpInstObj_Convert, &mc,
+	                      &part,
+	                      &knobID,
+	                      &knobValue))
+		return NULL;
+	_rv = MusicSetPartKnob(mc,
+	                       part,
+	                       knobID,
+	                       knobValue);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MusicGetKnob(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long knobID;
+#ifndef MusicGetKnob
+	PyMac_PRECHECK(MusicGetKnob);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &mc,
+	                      &knobID))
+		return NULL;
+	_rv = MusicGetKnob(mc,
+	                   knobID);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MusicSetKnob(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long knobID;
+	long knobValue;
+#ifndef MusicSetKnob
+	PyMac_PRECHECK(MusicSetKnob);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&ll",
+	                      CmpInstObj_Convert, &mc,
+	                      &knobID,
+	                      &knobValue))
+		return NULL;
+	_rv = MusicSetKnob(mc,
+	                   knobID,
+	                   knobValue);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MusicGetPartName(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long part;
+	StringPtr name;
+#ifndef MusicGetPartName
+	PyMac_PRECHECK(MusicGetPartName);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&ls",
+	                      CmpInstObj_Convert, &mc,
+	                      &part,
+	                      &name))
+		return NULL;
+	_rv = MusicGetPartName(mc,
+	                       part,
+	                       name);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MusicSetPartName(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long part;
+	StringPtr name;
+#ifndef MusicSetPartName
+	PyMac_PRECHECK(MusicSetPartName);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&ls",
+	                      CmpInstObj_Convert, &mc,
+	                      &part,
+	                      &name))
+		return NULL;
+	_rv = MusicSetPartName(mc,
+	                       part,
+	                       name);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MusicPlayNote(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long part;
+	long pitch;
+	long velocity;
+#ifndef MusicPlayNote
+	PyMac_PRECHECK(MusicPlayNote);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&lll",
+	                      CmpInstObj_Convert, &mc,
+	                      &part,
+	                      &pitch,
+	                      &velocity))
+		return NULL;
+	_rv = MusicPlayNote(mc,
+	                    part,
+	                    pitch,
+	                    velocity);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MusicResetPart(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long part;
+#ifndef MusicResetPart
+	PyMac_PRECHECK(MusicResetPart);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &mc,
+	                      &part))
+		return NULL;
+	_rv = MusicResetPart(mc,
+	                     part);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MusicSetPartController(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long part;
+	MusicController controllerNumber;
+	long controllerValue;
+#ifndef MusicSetPartController
+	PyMac_PRECHECK(MusicSetPartController);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&lll",
+	                      CmpInstObj_Convert, &mc,
+	                      &part,
+	                      &controllerNumber,
+	                      &controllerValue))
+		return NULL;
+	_rv = MusicSetPartController(mc,
+	                             part,
+	                             controllerNumber,
+	                             controllerValue);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MusicGetPartController(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long part;
+	MusicController controllerNumber;
+#ifndef MusicGetPartController
+	PyMac_PRECHECK(MusicGetPartController);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&ll",
+	                      CmpInstObj_Convert, &mc,
+	                      &part,
+	                      &controllerNumber))
+		return NULL;
+	_rv = MusicGetPartController(mc,
+	                             part,
+	                             controllerNumber);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MusicGetInstrumentNames(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long modifiableInstruments;
+	Handle instrumentNames;
+	Handle instrumentCategoryLasts;
+	Handle instrumentCategoryNames;
+#ifndef MusicGetInstrumentNames
+	PyMac_PRECHECK(MusicGetInstrumentNames);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &mc,
+	                      &modifiableInstruments))
+		return NULL;
+	_rv = MusicGetInstrumentNames(mc,
+	                              modifiableInstruments,
+	                              &instrumentNames,
+	                              &instrumentCategoryLasts,
+	                              &instrumentCategoryNames);
+	_res = Py_BuildValue("lO&O&O&",
+	                     _rv,
+	                     ResObj_New, instrumentNames,
+	                     ResObj_New, instrumentCategoryLasts,
+	                     ResObj_New, instrumentCategoryNames);
+	return _res;
+}
+
+static PyObject *Qt_MusicGetDrumNames(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long modifiableInstruments;
+	Handle instrumentNumbers;
+	Handle instrumentNames;
+#ifndef MusicGetDrumNames
+	PyMac_PRECHECK(MusicGetDrumNames);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &mc,
+	                      &modifiableInstruments))
+		return NULL;
+	_rv = MusicGetDrumNames(mc,
+	                        modifiableInstruments,
+	                        &instrumentNumbers,
+	                        &instrumentNames);
+	_res = Py_BuildValue("lO&O&",
+	                     _rv,
+	                     ResObj_New, instrumentNumbers,
+	                     ResObj_New, instrumentNames);
+	return _res;
+}
+
+static PyObject *Qt_MusicGetMasterTune(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+#ifndef MusicGetMasterTune
+	PyMac_PRECHECK(MusicGetMasterTune);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &mc))
+		return NULL;
+	_rv = MusicGetMasterTune(mc);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MusicSetMasterTune(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long masterTune;
+#ifndef MusicSetMasterTune
+	PyMac_PRECHECK(MusicSetMasterTune);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &mc,
+	                      &masterTune))
+		return NULL;
+	_rv = MusicSetMasterTune(mc,
+	                         masterTune);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MusicGetDeviceConnection(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long index;
+	long id1;
+	long id2;
+#ifndef MusicGetDeviceConnection
+	PyMac_PRECHECK(MusicGetDeviceConnection);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &mc,
+	                      &index))
+		return NULL;
+	_rv = MusicGetDeviceConnection(mc,
+	                               index,
+	                               &id1,
+	                               &id2);
+	_res = Py_BuildValue("lll",
+	                     _rv,
+	                     id1,
+	                     id2);
+	return _res;
+}
+
+static PyObject *Qt_MusicUseDeviceConnection(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long id1;
+	long id2;
+#ifndef MusicUseDeviceConnection
+	PyMac_PRECHECK(MusicUseDeviceConnection);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&ll",
+	                      CmpInstObj_Convert, &mc,
+	                      &id1,
+	                      &id2))
+		return NULL;
+	_rv = MusicUseDeviceConnection(mc,
+	                               id1,
+	                               id2);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MusicGetKnobSettingStrings(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long knobIndex;
+	long isGlobal;
+	Handle settingsNames;
+	Handle settingsCategoryLasts;
+	Handle settingsCategoryNames;
+#ifndef MusicGetKnobSettingStrings
+	PyMac_PRECHECK(MusicGetKnobSettingStrings);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&ll",
+	                      CmpInstObj_Convert, &mc,
+	                      &knobIndex,
+	                      &isGlobal))
+		return NULL;
+	_rv = MusicGetKnobSettingStrings(mc,
+	                                 knobIndex,
+	                                 isGlobal,
+	                                 &settingsNames,
+	                                 &settingsCategoryLasts,
+	                                 &settingsCategoryNames);
+	_res = Py_BuildValue("lO&O&O&",
+	                     _rv,
+	                     ResObj_New, settingsNames,
+	                     ResObj_New, settingsCategoryLasts,
+	                     ResObj_New, settingsCategoryNames);
+	return _res;
+}
+
+static PyObject *Qt_MusicGetMIDIPorts(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long inputPortCount;
+	long outputPortCount;
+#ifndef MusicGetMIDIPorts
+	PyMac_PRECHECK(MusicGetMIDIPorts);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &mc))
+		return NULL;
+	_rv = MusicGetMIDIPorts(mc,
+	                        &inputPortCount,
+	                        &outputPortCount);
+	_res = Py_BuildValue("lll",
+	                     _rv,
+	                     inputPortCount,
+	                     outputPortCount);
+	return _res;
+}
+
+static PyObject *Qt_MusicSendMIDI(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long portIndex;
+	MusicMIDIPacket mp;
+#ifndef MusicSendMIDI
+	PyMac_PRECHECK(MusicSendMIDI);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&lO&",
+	                      CmpInstObj_Convert, &mc,
+	                      &portIndex,
+	                      QtMusicMIDIPacket_Convert, &mp))
+		return NULL;
+	_rv = MusicSendMIDI(mc,
+	                    portIndex,
+	                    &mp);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MusicSetOfflineTimeTo(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long newTimeStamp;
+#ifndef MusicSetOfflineTimeTo
+	PyMac_PRECHECK(MusicSetOfflineTimeTo);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &mc,
+	                      &newTimeStamp))
+		return NULL;
+	_rv = MusicSetOfflineTimeTo(mc,
+	                            newTimeStamp);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MusicGetInfoText(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long selector;
+	Handle textH;
+	Handle styleH;
+#ifndef MusicGetInfoText
+	PyMac_PRECHECK(MusicGetInfoText);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &mc,
+	                      &selector))
+		return NULL;
+	_rv = MusicGetInfoText(mc,
+	                       selector,
+	                       &textH,
+	                       &styleH);
+	_res = Py_BuildValue("lO&O&",
+	                     _rv,
+	                     ResObj_New, textH,
+	                     ResObj_New, styleH);
+	return _res;
+}
+
+static PyObject *Qt_MusicGetInstrumentInfo(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long getInstrumentInfoFlags;
+	InstrumentInfoListHandle infoListH;
+#ifndef MusicGetInstrumentInfo
+	PyMac_PRECHECK(MusicGetInstrumentInfo);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &mc,
+	                      &getInstrumentInfoFlags))
+		return NULL;
+	_rv = MusicGetInstrumentInfo(mc,
+	                             getInstrumentInfoFlags,
+	                             &infoListH);
+	_res = Py_BuildValue("lO&",
+	                     _rv,
+	                     ResObj_New, infoListH);
+	return _res;
+}
+
+static PyObject *Qt_MusicTask(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+#ifndef MusicTask
+	PyMac_PRECHECK(MusicTask);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &mc))
+		return NULL;
+	_rv = MusicTask(mc);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MusicSetPartInstrumentNumberInterruptSafe(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long part;
+	long instrumentNumber;
+#ifndef MusicSetPartInstrumentNumberInterruptSafe
+	PyMac_PRECHECK(MusicSetPartInstrumentNumberInterruptSafe);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&ll",
+	                      CmpInstObj_Convert, &mc,
+	                      &part,
+	                      &instrumentNumber))
+		return NULL;
+	_rv = MusicSetPartInstrumentNumberInterruptSafe(mc,
+	                                                part,
+	                                                instrumentNumber);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MusicSetPartSoundLocalization(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long part;
+	Handle data;
+#ifndef MusicSetPartSoundLocalization
+	PyMac_PRECHECK(MusicSetPartSoundLocalization);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&lO&",
+	                      CmpInstObj_Convert, &mc,
+	                      &part,
+	                      ResObj_Convert, &data))
+		return NULL;
+	_rv = MusicSetPartSoundLocalization(mc,
+	                                    part,
+	                                    data);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MusicGenericConfigure(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long mode;
+	long flags;
+	long baseResID;
+#ifndef MusicGenericConfigure
+	PyMac_PRECHECK(MusicGenericConfigure);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&lll",
+	                      CmpInstObj_Convert, &mc,
+	                      &mode,
+	                      &flags,
+	                      &baseResID))
+		return NULL;
+	_rv = MusicGenericConfigure(mc,
+	                            mode,
+	                            flags,
+	                            baseResID);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MusicGenericGetKnobList(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	long knobType;
+	GenericKnobDescriptionListHandle gkdlH;
+#ifndef MusicGenericGetKnobList
+	PyMac_PRECHECK(MusicGenericGetKnobList);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &mc,
+	                      &knobType))
+		return NULL;
+	_rv = MusicGenericGetKnobList(mc,
+	                              knobType,
+	                              &gkdlH);
+	_res = Py_BuildValue("lO&",
+	                     _rv,
+	                     ResObj_New, gkdlH);
+	return _res;
+}
+
+static PyObject *Qt_MusicGenericSetResourceNumbers(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	Handle resourceIDH;
+#ifndef MusicGenericSetResourceNumbers
+	PyMac_PRECHECK(MusicGenericSetResourceNumbers);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&",
+	                      CmpInstObj_Convert, &mc,
+	                      ResObj_Convert, &resourceIDH))
+		return NULL;
+	_rv = MusicGenericSetResourceNumbers(mc,
+	                                     resourceIDH);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MusicDerivedMIDISend(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	MusicMIDIPacket packet;
+#ifndef MusicDerivedMIDISend
+	PyMac_PRECHECK(MusicDerivedMIDISend);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&",
+	                      CmpInstObj_Convert, &mc,
+	                      QtMusicMIDIPacket_Convert, &packet))
+		return NULL;
+	_rv = MusicDerivedMIDISend(mc,
+	                           &packet);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MusicDerivedOpenResFile(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+#ifndef MusicDerivedOpenResFile
+	PyMac_PRECHECK(MusicDerivedOpenResFile);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &mc))
+		return NULL;
+	_rv = MusicDerivedOpenResFile(mc);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MusicDerivedCloseResFile(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MusicComponent mc;
+	short resRefNum;
+#ifndef MusicDerivedCloseResFile
+	PyMac_PRECHECK(MusicDerivedCloseResFile);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&h",
+	                      CmpInstObj_Convert, &mc,
+	                      &resRefNum))
+		return NULL;
+	_rv = MusicDerivedCloseResFile(mc,
+	                               resRefNum);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_NAUnregisterMusicDevice(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	NoteAllocator na;
+	long index;
+#ifndef NAUnregisterMusicDevice
+	PyMac_PRECHECK(NAUnregisterMusicDevice);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &na,
+	                      &index))
+		return NULL;
+	_rv = NAUnregisterMusicDevice(na,
+	                              index);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_NASaveMusicConfiguration(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	NoteAllocator na;
+#ifndef NASaveMusicConfiguration
+	PyMac_PRECHECK(NASaveMusicConfiguration);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &na))
+		return NULL;
+	_rv = NASaveMusicConfiguration(na);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_NAGetMIDIPorts(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	NoteAllocator na;
+	QTMIDIPortListHandle inputPorts;
+	QTMIDIPortListHandle outputPorts;
+#ifndef NAGetMIDIPorts
+	PyMac_PRECHECK(NAGetMIDIPorts);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &na))
+		return NULL;
+	_rv = NAGetMIDIPorts(na,
+	                     &inputPorts,
+	                     &outputPorts);
+	_res = Py_BuildValue("lO&O&",
+	                     _rv,
+	                     ResObj_New, inputPorts,
+	                     ResObj_New, outputPorts);
+	return _res;
+}
+
+static PyObject *Qt_NATask(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	NoteAllocator na;
+#ifndef NATask
+	PyMac_PRECHECK(NATask);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &na))
+		return NULL;
+	_rv = NATask(na);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_TuneSetHeader(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	TunePlayer tp;
+	unsigned long header;
+#ifndef TuneSetHeader
+	PyMac_PRECHECK(TuneSetHeader);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &tp))
+		return NULL;
+	_rv = TuneSetHeader(tp,
+	                    &header);
+	_res = Py_BuildValue("ll",
+	                     _rv,
+	                     header);
+	return _res;
+}
+
+static PyObject *Qt_TuneGetTimeBase(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	TunePlayer tp;
+	TimeBase tb;
+#ifndef TuneGetTimeBase
+	PyMac_PRECHECK(TuneGetTimeBase);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &tp))
+		return NULL;
+	_rv = TuneGetTimeBase(tp,
+	                      &tb);
+	_res = Py_BuildValue("lO&",
+	                     _rv,
+	                     TimeBaseObj_New, tb);
+	return _res;
+}
+
+static PyObject *Qt_TuneSetTimeScale(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	TunePlayer tp;
+	TimeScale scale;
+#ifndef TuneSetTimeScale
+	PyMac_PRECHECK(TuneSetTimeScale);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &tp,
+	                      &scale))
+		return NULL;
+	_rv = TuneSetTimeScale(tp,
+	                       scale);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_TuneGetTimeScale(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	TunePlayer tp;
+	TimeScale scale;
+#ifndef TuneGetTimeScale
+	PyMac_PRECHECK(TuneGetTimeScale);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &tp))
+		return NULL;
+	_rv = TuneGetTimeScale(tp,
+	                       &scale);
+	_res = Py_BuildValue("ll",
+	                     _rv,
+	                     scale);
+	return _res;
+}
+
+static PyObject *Qt_TuneInstant(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	TunePlayer tp;
+	unsigned long tune;
+	unsigned long tunePosition;
+#ifndef TuneInstant
+	PyMac_PRECHECK(TuneInstant);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &tp,
+	                      &tunePosition))
+		return NULL;
+	_rv = TuneInstant(tp,
+	                  &tune,
+	                  tunePosition);
+	_res = Py_BuildValue("ll",
+	                     _rv,
+	                     tune);
+	return _res;
+}
+
+static PyObject *Qt_TuneStop(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	TunePlayer tp;
+	long stopFlags;
+#ifndef TuneStop
+	PyMac_PRECHECK(TuneStop);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &tp,
+	                      &stopFlags))
+		return NULL;
+	_rv = TuneStop(tp,
+	               stopFlags);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_TuneSetVolume(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	TunePlayer tp;
+	Fixed volume;
+#ifndef TuneSetVolume
+	PyMac_PRECHECK(TuneSetVolume);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&",
+	                      CmpInstObj_Convert, &tp,
+	                      PyMac_GetFixed, &volume))
+		return NULL;
+	_rv = TuneSetVolume(tp,
+	                    volume);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_TuneGetVolume(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	TunePlayer tp;
+#ifndef TuneGetVolume
+	PyMac_PRECHECK(TuneGetVolume);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &tp))
+		return NULL;
+	_rv = TuneGetVolume(tp);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_TunePreroll(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	TunePlayer tp;
+#ifndef TunePreroll
+	PyMac_PRECHECK(TunePreroll);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &tp))
+		return NULL;
+	_rv = TunePreroll(tp);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_TuneUnroll(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	TunePlayer tp;
+#ifndef TuneUnroll
+	PyMac_PRECHECK(TuneUnroll);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &tp))
+		return NULL;
+	_rv = TuneUnroll(tp);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_TuneSetPartTranspose(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	TunePlayer tp;
+	unsigned long part;
+	long transpose;
+	long velocityShift;
+#ifndef TuneSetPartTranspose
+	PyMac_PRECHECK(TuneSetPartTranspose);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&lll",
+	                      CmpInstObj_Convert, &tp,
+	                      &part,
+	                      &transpose,
+	                      &velocityShift))
+		return NULL;
+	_rv = TuneSetPartTranspose(tp,
+	                           part,
+	                           transpose,
+	                           velocityShift);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_TuneGetNoteAllocator(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	NoteAllocator _rv;
+	TunePlayer tp;
+#ifndef TuneGetNoteAllocator
+	PyMac_PRECHECK(TuneGetNoteAllocator);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &tp))
+		return NULL;
+	_rv = TuneGetNoteAllocator(tp);
+	_res = Py_BuildValue("O&",
+	                     CmpInstObj_New, _rv);
+	return _res;
+}
+
+static PyObject *Qt_TuneSetSofter(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	TunePlayer tp;
+	long softer;
+#ifndef TuneSetSofter
+	PyMac_PRECHECK(TuneSetSofter);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &tp,
+	                      &softer))
+		return NULL;
+	_rv = TuneSetSofter(tp,
+	                    softer);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_TuneTask(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	TunePlayer tp;
+#ifndef TuneTask
+	PyMac_PRECHECK(TuneTask);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &tp))
+		return NULL;
+	_rv = TuneTask(tp);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_TuneSetBalance(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	TunePlayer tp;
+	long balance;
+#ifndef TuneSetBalance
+	PyMac_PRECHECK(TuneSetBalance);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &tp,
+	                      &balance))
+		return NULL;
+	_rv = TuneSetBalance(tp,
+	                     balance);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_TuneSetSoundLocalization(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	TunePlayer tp;
+	Handle data;
+#ifndef TuneSetSoundLocalization
+	PyMac_PRECHECK(TuneSetSoundLocalization);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&",
+	                      CmpInstObj_Convert, &tp,
+	                      ResObj_Convert, &data))
+		return NULL;
+	_rv = TuneSetSoundLocalization(tp,
+	                               data);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_TuneSetHeaderWithSize(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	TunePlayer tp;
+	unsigned long header;
+	unsigned long size;
+#ifndef TuneSetHeaderWithSize
+	PyMac_PRECHECK(TuneSetHeaderWithSize);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &tp,
+	                      &size))
+		return NULL;
+	_rv = TuneSetHeaderWithSize(tp,
+	                            &header,
+	                            size);
+	_res = Py_BuildValue("ll",
+	                     _rv,
+	                     header);
+	return _res;
+}
+
+static PyObject *Qt_TuneSetPartMix(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	TunePlayer tp;
+	unsigned long partNumber;
+	long volume;
+	long balance;
+	long mixFlags;
+#ifndef TuneSetPartMix
+	PyMac_PRECHECK(TuneSetPartMix);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&llll",
+	                      CmpInstObj_Convert, &tp,
+	                      &partNumber,
+	                      &volume,
+	                      &balance,
+	                      &mixFlags))
+		return NULL;
+	_rv = TuneSetPartMix(tp,
+	                     partNumber,
+	                     volume,
+	                     balance,
+	                     mixFlags);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_TuneGetPartMix(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	TunePlayer tp;
+	unsigned long partNumber;
+	long volumeOut;
+	long balanceOut;
+	long mixFlagsOut;
+#ifndef TuneGetPartMix
+	PyMac_PRECHECK(TuneGetPartMix);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &tp,
+	                      &partNumber))
+		return NULL;
+	_rv = TuneGetPartMix(tp,
+	                     partNumber,
+	                     &volumeOut,
+	                     &balanceOut,
+	                     &mixFlagsOut);
+	_res = Py_BuildValue("llll",
+	                     _rv,
+	                     volumeOut,
+	                     balanceOut,
+	                     mixFlagsOut);
+	return _res;
+}
+
 static PyObject *Qt_AlignWindow(PyObject *_self, PyObject *_args)
 {
 	PyObject *_res = NULL;
@@ -26415,6 +27846,134 @@
 	 PyDoc_STR("(MediaHandler mh) -> (ComponentResult _rv, IdleManager pim)")},
 	{"MediaGSetIdleManager", (PyCFunction)Qt_MediaGSetIdleManager, 1,
 	 PyDoc_STR("(MediaHandler mh, IdleManager im) -> (ComponentResult _rv)")},
+	{"QTMIDIGetMIDIPorts", (PyCFunction)Qt_QTMIDIGetMIDIPorts, 1,
+	 PyDoc_STR("(QTMIDIComponent ci) -> (ComponentResult _rv, QTMIDIPortListHandle inputPorts, QTMIDIPortListHandle outputPorts)")},
+	{"QTMIDIUseSendPort", (PyCFunction)Qt_QTMIDIUseSendPort, 1,
+	 PyDoc_STR("(QTMIDIComponent ci, long portIndex, long inUse) -> (ComponentResult _rv)")},
+	{"QTMIDISendMIDI", (PyCFunction)Qt_QTMIDISendMIDI, 1,
+	 PyDoc_STR("(QTMIDIComponent ci, long portIndex, MusicMIDIPacket mp) -> (ComponentResult _rv)")},
+	{"MusicGetPart", (PyCFunction)Qt_MusicGetPart, 1,
+	 PyDoc_STR("(MusicComponent mc, long part) -> (ComponentResult _rv, long midiChannel, long polyphony)")},
+	{"MusicSetPart", (PyCFunction)Qt_MusicSetPart, 1,
+	 PyDoc_STR("(MusicComponent mc, long part, long midiChannel, long polyphony) -> (ComponentResult _rv)")},
+	{"MusicSetPartInstrumentNumber", (PyCFunction)Qt_MusicSetPartInstrumentNumber, 1,
+	 PyDoc_STR("(MusicComponent mc, long part, long instrumentNumber) -> (ComponentResult _rv)")},
+	{"MusicGetPartInstrumentNumber", (PyCFunction)Qt_MusicGetPartInstrumentNumber, 1,
+	 PyDoc_STR("(MusicComponent mc, long part) -> (ComponentResult _rv)")},
+	{"MusicStorePartInstrument", (PyCFunction)Qt_MusicStorePartInstrument, 1,
+	 PyDoc_STR("(MusicComponent mc, long part, long instrumentNumber) -> (ComponentResult _rv)")},
+	{"MusicGetPartAtomicInstrument", (PyCFunction)Qt_MusicGetPartAtomicInstrument, 1,
+	 PyDoc_STR("(MusicComponent mc, long part, long flags) -> (ComponentResult _rv, AtomicInstrument ai)")},
+	{"MusicSetPartAtomicInstrument", (PyCFunction)Qt_MusicSetPartAtomicInstrument, 1,
+	 PyDoc_STR("(MusicComponent mc, long part, AtomicInstrumentPtr aiP, long flags) -> (ComponentResult _rv)")},
+	{"MusicGetPartKnob", (PyCFunction)Qt_MusicGetPartKnob, 1,
+	 PyDoc_STR("(MusicComponent mc, long part, long knobID) -> (ComponentResult _rv)")},
+	{"MusicSetPartKnob", (PyCFunction)Qt_MusicSetPartKnob, 1,
+	 PyDoc_STR("(MusicComponent mc, long part, long knobID, long knobValue) -> (ComponentResult _rv)")},
+	{"MusicGetKnob", (PyCFunction)Qt_MusicGetKnob, 1,
+	 PyDoc_STR("(MusicComponent mc, long knobID) -> (ComponentResult _rv)")},
+	{"MusicSetKnob", (PyCFunction)Qt_MusicSetKnob, 1,
+	 PyDoc_STR("(MusicComponent mc, long knobID, long knobValue) -> (ComponentResult _rv)")},
+	{"MusicGetPartName", (PyCFunction)Qt_MusicGetPartName, 1,
+	 PyDoc_STR("(MusicComponent mc, long part, StringPtr name) -> (ComponentResult _rv)")},
+	{"MusicSetPartName", (PyCFunction)Qt_MusicSetPartName, 1,
+	 PyDoc_STR("(MusicComponent mc, long part, StringPtr name) -> (ComponentResult _rv)")},
+	{"MusicPlayNote", (PyCFunction)Qt_MusicPlayNote, 1,
+	 PyDoc_STR("(MusicComponent mc, long part, long pitch, long velocity) -> (ComponentResult _rv)")},
+	{"MusicResetPart", (PyCFunction)Qt_MusicResetPart, 1,
+	 PyDoc_STR("(MusicComponent mc, long part) -> (ComponentResult _rv)")},
+	{"MusicSetPartController", (PyCFunction)Qt_MusicSetPartController, 1,
+	 PyDoc_STR("(MusicComponent mc, long part, MusicController controllerNumber, long controllerValue) -> (ComponentResult _rv)")},
+	{"MusicGetPartController", (PyCFunction)Qt_MusicGetPartController, 1,
+	 PyDoc_STR("(MusicComponent mc, long part, MusicController controllerNumber) -> (ComponentResult _rv)")},
+	{"MusicGetInstrumentNames", (PyCFunction)Qt_MusicGetInstrumentNames, 1,
+	 PyDoc_STR("(MusicComponent mc, long modifiableInstruments) -> (ComponentResult _rv, Handle instrumentNames, Handle instrumentCategoryLasts, Handle instrumentCategoryNames)")},
+	{"MusicGetDrumNames", (PyCFunction)Qt_MusicGetDrumNames, 1,
+	 PyDoc_STR("(MusicComponent mc, long modifiableInstruments) -> (ComponentResult _rv, Handle instrumentNumbers, Handle instrumentNames)")},
+	{"MusicGetMasterTune", (PyCFunction)Qt_MusicGetMasterTune, 1,
+	 PyDoc_STR("(MusicComponent mc) -> (ComponentResult _rv)")},
+	{"MusicSetMasterTune", (PyCFunction)Qt_MusicSetMasterTune, 1,
+	 PyDoc_STR("(MusicComponent mc, long masterTune) -> (ComponentResult _rv)")},
+	{"MusicGetDeviceConnection", (PyCFunction)Qt_MusicGetDeviceConnection, 1,
+	 PyDoc_STR("(MusicComponent mc, long index) -> (ComponentResult _rv, long id1, long id2)")},
+	{"MusicUseDeviceConnection", (PyCFunction)Qt_MusicUseDeviceConnection, 1,
+	 PyDoc_STR("(MusicComponent mc, long id1, long id2) -> (ComponentResult _rv)")},
+	{"MusicGetKnobSettingStrings", (PyCFunction)Qt_MusicGetKnobSettingStrings, 1,
+	 PyDoc_STR("(MusicComponent mc, long knobIndex, long isGlobal) -> (ComponentResult _rv, Handle settingsNames, Handle settingsCategoryLasts, Handle settingsCategoryNames)")},
+	{"MusicGetMIDIPorts", (PyCFunction)Qt_MusicGetMIDIPorts, 1,
+	 PyDoc_STR("(MusicComponent mc) -> (ComponentResult _rv, long inputPortCount, long outputPortCount)")},
+	{"MusicSendMIDI", (PyCFunction)Qt_MusicSendMIDI, 1,
+	 PyDoc_STR("(MusicComponent mc, long portIndex, MusicMIDIPacket mp) -> (ComponentResult _rv)")},
+	{"MusicSetOfflineTimeTo", (PyCFunction)Qt_MusicSetOfflineTimeTo, 1,
+	 PyDoc_STR("(MusicComponent mc, long newTimeStamp) -> (ComponentResult _rv)")},
+	{"MusicGetInfoText", (PyCFunction)Qt_MusicGetInfoText, 1,
+	 PyDoc_STR("(MusicComponent mc, long selector) -> (ComponentResult _rv, Handle textH, Handle styleH)")},
+	{"MusicGetInstrumentInfo", (PyCFunction)Qt_MusicGetInstrumentInfo, 1,
+	 PyDoc_STR("(MusicComponent mc, long getInstrumentInfoFlags) -> (ComponentResult _rv, InstrumentInfoListHandle infoListH)")},
+	{"MusicTask", (PyCFunction)Qt_MusicTask, 1,
+	 PyDoc_STR("(MusicComponent mc) -> (ComponentResult _rv)")},
+	{"MusicSetPartInstrumentNumberInterruptSafe", (PyCFunction)Qt_MusicSetPartInstrumentNumberInterruptSafe, 1,
+	 PyDoc_STR("(MusicComponent mc, long part, long instrumentNumber) -> (ComponentResult _rv)")},
+	{"MusicSetPartSoundLocalization", (PyCFunction)Qt_MusicSetPartSoundLocalization, 1,
+	 PyDoc_STR("(MusicComponent mc, long part, Handle data) -> (ComponentResult _rv)")},
+	{"MusicGenericConfigure", (PyCFunction)Qt_MusicGenericConfigure, 1,
+	 PyDoc_STR("(MusicComponent mc, long mode, long flags, long baseResID) -> (ComponentResult _rv)")},
+	{"MusicGenericGetKnobList", (PyCFunction)Qt_MusicGenericGetKnobList, 1,
+	 PyDoc_STR("(MusicComponent mc, long knobType) -> (ComponentResult _rv, GenericKnobDescriptionListHandle gkdlH)")},
+	{"MusicGenericSetResourceNumbers", (PyCFunction)Qt_MusicGenericSetResourceNumbers, 1,
+	 PyDoc_STR("(MusicComponent mc, Handle resourceIDH) -> (ComponentResult _rv)")},
+	{"MusicDerivedMIDISend", (PyCFunction)Qt_MusicDerivedMIDISend, 1,
+	 PyDoc_STR("(MusicComponent mc, MusicMIDIPacket packet) -> (ComponentResult _rv)")},
+	{"MusicDerivedOpenResFile", (PyCFunction)Qt_MusicDerivedOpenResFile, 1,
+	 PyDoc_STR("(MusicComponent mc) -> (ComponentResult _rv)")},
+	{"MusicDerivedCloseResFile", (PyCFunction)Qt_MusicDerivedCloseResFile, 1,
+	 PyDoc_STR("(MusicComponent mc, short resRefNum) -> (ComponentResult _rv)")},
+	{"NAUnregisterMusicDevice", (PyCFunction)Qt_NAUnregisterMusicDevice, 1,
+	 PyDoc_STR("(NoteAllocator na, long index) -> (ComponentResult _rv)")},
+	{"NASaveMusicConfiguration", (PyCFunction)Qt_NASaveMusicConfiguration, 1,
+	 PyDoc_STR("(NoteAllocator na) -> (ComponentResult _rv)")},
+	{"NAGetMIDIPorts", (PyCFunction)Qt_NAGetMIDIPorts, 1,
+	 PyDoc_STR("(NoteAllocator na) -> (ComponentResult _rv, QTMIDIPortListHandle inputPorts, QTMIDIPortListHandle outputPorts)")},
+	{"NATask", (PyCFunction)Qt_NATask, 1,
+	 PyDoc_STR("(NoteAllocator na) -> (ComponentResult _rv)")},
+	{"TuneSetHeader", (PyCFunction)Qt_TuneSetHeader, 1,
+	 PyDoc_STR("(TunePlayer tp) -> (ComponentResult _rv, unsigned long header)")},
+	{"TuneGetTimeBase", (PyCFunction)Qt_TuneGetTimeBase, 1,
+	 PyDoc_STR("(TunePlayer tp) -> (ComponentResult _rv, TimeBase tb)")},
+	{"TuneSetTimeScale", (PyCFunction)Qt_TuneSetTimeScale, 1,
+	 PyDoc_STR("(TunePlayer tp, TimeScale scale) -> (ComponentResult _rv)")},
+	{"TuneGetTimeScale", (PyCFunction)Qt_TuneGetTimeScale, 1,
+	 PyDoc_STR("(TunePlayer tp) -> (ComponentResult _rv, TimeScale scale)")},
+	{"TuneInstant", (PyCFunction)Qt_TuneInstant, 1,
+	 PyDoc_STR("(TunePlayer tp, unsigned long tunePosition) -> (ComponentResult _rv, unsigned long tune)")},
+	{"TuneStop", (PyCFunction)Qt_TuneStop, 1,
+	 PyDoc_STR("(TunePlayer tp, long stopFlags) -> (ComponentResult _rv)")},
+	{"TuneSetVolume", (PyCFunction)Qt_TuneSetVolume, 1,
+	 PyDoc_STR("(TunePlayer tp, Fixed volume) -> (ComponentResult _rv)")},
+	{"TuneGetVolume", (PyCFunction)Qt_TuneGetVolume, 1,
+	 PyDoc_STR("(TunePlayer tp) -> (ComponentResult _rv)")},
+	{"TunePreroll", (PyCFunction)Qt_TunePreroll, 1,
+	 PyDoc_STR("(TunePlayer tp) -> (ComponentResult _rv)")},
+	{"TuneUnroll", (PyCFunction)Qt_TuneUnroll, 1,
+	 PyDoc_STR("(TunePlayer tp) -> (ComponentResult _rv)")},
+	{"TuneSetPartTranspose", (PyCFunction)Qt_TuneSetPartTranspose, 1,
+	 PyDoc_STR("(TunePlayer tp, unsigned long part, long transpose, long velocityShift) -> (ComponentResult _rv)")},
+	{"TuneGetNoteAllocator", (PyCFunction)Qt_TuneGetNoteAllocator, 1,
+	 PyDoc_STR("(TunePlayer tp) -> (NoteAllocator _rv)")},
+	{"TuneSetSofter", (PyCFunction)Qt_TuneSetSofter, 1,
+	 PyDoc_STR("(TunePlayer tp, long softer) -> (ComponentResult _rv)")},
+	{"TuneTask", (PyCFunction)Qt_TuneTask, 1,
+	 PyDoc_STR("(TunePlayer tp) -> (ComponentResult _rv)")},
+	{"TuneSetBalance", (PyCFunction)Qt_TuneSetBalance, 1,
+	 PyDoc_STR("(TunePlayer tp, long balance) -> (ComponentResult _rv)")},
+	{"TuneSetSoundLocalization", (PyCFunction)Qt_TuneSetSoundLocalization, 1,
+	 PyDoc_STR("(TunePlayer tp, Handle data) -> (ComponentResult _rv)")},
+	{"TuneSetHeaderWithSize", (PyCFunction)Qt_TuneSetHeaderWithSize, 1,
+	 PyDoc_STR("(TunePlayer tp, unsigned long size) -> (ComponentResult _rv, unsigned long header)")},
+	{"TuneSetPartMix", (PyCFunction)Qt_TuneSetPartMix, 1,
+	 PyDoc_STR("(TunePlayer tp, unsigned long partNumber, long volume, long balance, long mixFlags) -> (ComponentResult _rv)")},
+	{"TuneGetPartMix", (PyCFunction)Qt_TuneGetPartMix, 1,
+	 PyDoc_STR("(TunePlayer tp, unsigned long partNumber) -> (ComponentResult _rv, long volumeOut, long balanceOut, long mixFlagsOut)")},
 	{"AlignWindow", (PyCFunction)Qt_AlignWindow, 1,
 	 PyDoc_STR("(WindowPtr wp, Boolean front) -> None")},
 	{"DragAlignedWindow", (PyCFunction)Qt_DragAlignedWindow, 1,
diff --git a/Mac/Modules/qt/qtscan.py b/Mac/Modules/qt/qtscan.py
index b32fc6b..175a220 100644
--- a/Mac/Modules/qt/qtscan.py
+++ b/Mac/Modules/qt/qtscan.py
@@ -13,7 +13,11 @@
 	"ImageCompression.h", 
 	"QuickTimeComponents.h",
 #	"ImageCodec.h"  -- seems not too useful, and difficult.
-	"MediaHandlers.h"
+	"MediaHandlers.h",
+#	"QTML.h", -- Windows only, needs separate module
+#	"QuickTimeStreaming.h", -- Difficult
+#	"QTStreamingComponents.h", -- Needs QTStreaming
+	"QuickTimeMusic.h",
 	)
 OBJECTS = ("Movie", "Track", "Media", "UserData", "TimeBase", "MovieController", 
 	"IdleManager", "SGOutput")
@@ -47,6 +51,24 @@
 	def writeinitialdefs(self):
 		self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n")
 		self.defsfile.write("xmlIdentifierUnrecognized = -1\n")
+		self.defsfile.write("kControllerMinimum = -0xf777\n")
+		self.defsfile.write("notImplementedMusicOSErr      = -2071\n")
+		self.defsfile.write("cantSendToSynthesizerOSErr    = -2072\n")
+		self.defsfile.write("cantReceiveFromSynthesizerOSErr = -2073\n")
+		self.defsfile.write("illegalVoiceAllocationOSErr   = -2074\n")
+		self.defsfile.write("illegalPartOSErr              = -2075\n")
+		self.defsfile.write("illegalChannelOSErr           = -2076\n")
+		self.defsfile.write("illegalKnobOSErr              = -2077\n")
+		self.defsfile.write("illegalKnobValueOSErr         = -2078\n")
+		self.defsfile.write("illegalInstrumentOSErr        = -2079\n")
+		self.defsfile.write("illegalControllerOSErr        = -2080\n")
+		self.defsfile.write("midiManagerAbsentOSErr        = -2081\n")
+		self.defsfile.write("synthesizerNotRespondingOSErr = -2082\n")
+		self.defsfile.write("synthesizerOSErr              = -2083\n")
+		self.defsfile.write("illegalNoteChannelOSErr       = -2084\n")
+		self.defsfile.write("noteChannelNotAllocatedOSErr  = -2085\n")
+		self.defsfile.write("tunePlayerFullOSErr           = -2086\n")
+		self.defsfile.write("tuneParseOSErr                = -2087\n")
 
 	def makeblacklistnames(self):
 		return [
@@ -100,6 +122,15 @@
 			# MediaHandlers
 			"MediaMakeMediaTimeTable", # just lazy
 			"MediaGetSampleDataPointer", # funny output pointer
+			
+			# QuickTimeMusic
+			"kControllerMinimum",
+			# These are artefacts of a macro definition
+			"ulen",
+			"_ext",
+			"x",
+			"w1",
+			"w2",
 			]
 
 	def makeblacklisttypes(self):
@@ -223,6 +254,23 @@
             "GetMovieCompleteParams", # Immense struct
             "LevelMeterInfoPtr", # Lazy. Also: can be an output parameter!!
             "MediaEQSpectrumBandsRecordPtr", # ditto
+            
+            # From QuickTimeMusic
+            "MusicMIDISendUPP",
+            "MusicOfflineDataUPP",
+            "TuneCallBackUPP",
+            "TunePlayCallBackUPP",
+            "GCPart", # Struct with lots of fields
+            "GCPart_ptr",
+            "GenericKnobDescription", # Struct with lots of fields
+            "KnobDescription",  # Struct with lots of fields
+            "InstrumentAboutInfo", # Struct, not too difficult
+            "NoteChannel", # XXXX Lazy. Could be opaque, I think
+            "NoteRequest", # XXXX Lazy. Not-too-difficult struct
+            "SynthesizerConnections", # Struct with lots of fields
+            "SynthesizerDescription", # Struct with lots of fields
+            "TuneStatus", # Struct with lots of fields
+            
 			]
 
 	def makerepairinstructions(self):
@@ -254,6 +302,10 @@
 			([('char_ptr', '*', 'InMode')], [('stringptr', '*', 'InMode')]),
 			([('FSSpecPtr', '*', 'InMode')], [('FSSpec_ptr', '*', 'InMode')]),
 			([('unsigned_char', 'swfVersion', 'OutMode')], [('UInt8', 'swfVersion', 'OutMode')]),
+			
+			# It seems MusicMIDIPacket if never flagged with const but always used
+			# for sending only. If that ever changes this needs to be fixed.
+			([('MusicMIDIPacket', '*', 'OutMode')], [('MusicMIDIPacket_ptr', '*', 'InMode')]),
 			]
 			
 if __name__ == "__main__":
diff --git a/Mac/Modules/qt/qtsupport.py b/Mac/Modules/qt/qtsupport.py
index c2dd024..098d30d 100644
--- a/Mac/Modules/qt/qtsupport.py
+++ b/Mac/Modules/qt/qtsupport.py
@@ -88,6 +88,16 @@
 	return 1;
 }
 
+static int
+QtMusicMIDIPacket_Convert(PyObject *v, MusicMIDIPacket *p_itself)
+{
+	int dummy;
+	
+	if( !PyArg_ParseTuple(v, "hls#", &p_itself->length, &p_itself->reserved, p_itself->data, dummy) )
+		return 0;
+	return 1;
+}
+
 
 
 """
@@ -143,6 +153,10 @@
 MediaHandler = OpaqueByValueType('MediaHandler', 'CmpInstObj')
 DataHandler = OpaqueByValueType('DataHandler', 'CmpInstObj')
 SGChannel = OpaqueByValueType('SGChannel', 'CmpInstObj')
+TunePlayer = OpaqueByValueType('TunePlayer', 'CmpInstObj')
+MusicComponent = OpaqueByValueType('MusicComponent', 'CmpInstObj')
+NoteAllocator = OpaqueByValueType('NoteAllocator', 'CmpInstObj')
+QTMIDIComponent = OpaqueByValueType('QTMIDIComponent', 'CmpInstObj')
 
 ConstFSSpecPtr = FSSpec_ptr
 GrafPtr = OpaqueByValueType("GrafPtr", "GrafObj")
@@ -164,6 +178,9 @@
 VDCompressionListHandle = OpaqueByValueType("VDCompressionListHandle", "ResObj")
 TimeCodeDescriptionHandle = OpaqueByValueType("TimeCodeDescriptionHandle", "ResObj")
 DataHFileTypeOrderingHandle = OpaqueByValueType("DataHFileTypeOrderingHandle", "ResObj")
+QTMIDIPortListHandle = OpaqueByValueType("QTMIDIPortListHandle", "ResObj")
+GenericKnobDescriptionListHandle =  OpaqueByValueType("GenericKnobDescriptionListHandle", "ResObj")
+InstrumentInfoListHandle = OpaqueByValueType("InstrumentInfoListHandle", "ResObj")
 # Silly Apple, passing an OStype by reference...
 OSType_ptr = OpaqueType("OSType", "PyMac_BuildOSType", "PyMac_GetOSType")
 # And even sillier: passing floats by address
@@ -173,6 +190,8 @@
 RGBColor_ptr = RGBColor
 TimeRecord = OpaqueType("TimeRecord", "QtTimeRecord")
 TimeRecord_ptr = TimeRecord
+MusicMIDIPacket = OpaqueType("MusicMIDIPacket", "QtMusicMIDIPacket")
+MusicMIDIPacket_ptr = MusicMIDIPacket
 
 # Non-opaque types, mostly integer-ish
 TimeValue = Type("TimeValue", "l")
@@ -200,11 +219,16 @@
 GWorldPtr = OpaqueByValueType("GWorldPtr", "GWorldObj")
 QTFloatSingle = Type("QTFloatSingle", "f")
 CodecQ = Type("CodecQ", "l")
+MusicController = Type("MusicController", "l")
 
 # Could-not-be-bothered-types (NewMovieFromFile)
 dummyshortptr = FakeType('(short *)0')
 dummyStringPtr = FakeType('(StringPtr)0')
 
+# Not-quite-sure-this-is-okay types
+AtomicInstrument = OpaqueByValueType("AtomicInstrument", "ResObj")
+AtomicInstrumentPtr = InputOnlyType("AtomicInstrumentPtr", "s")
+
 # XXXX Need to override output_tp_newBody() to allow for None initializer.
 class QtGlobalObjectDefinition(PEP253Mixin, GlobalObjectDefinition):
 	def outputCheckNewArg(self):