ยปCore Development>Code coverage>Mac/Modules/snd/_Sndmodule.c

Python code coverage for Mac/Modules/snd/_Sndmodule.c

#countcontent
1n/a
2n/a/* ========================== Module _Snd =========================== */
3n/a
4n/a#include "Python.h"
5n/a
6n/a#ifndef __LP64__
7n/a
8n/a
9n/a#include "pymactoolbox.h"
10n/a
11n/a/* Macro to test whether a weak-loaded CFM function exists */
12n/a#define PyMac_PRECHECK(rtn) do { if ( &rtn == NULL ) {\
13n/a PyErr_SetString(PyExc_NotImplementedError, \
14n/a "Not available in this shared library/OS version"); \
15n/a return NULL; \
16n/a }} while(0)
17n/a
18n/a
19n/a#include <Carbon/Carbon.h>
20n/a
21n/a/* Convert a SndCommand argument */
22n/astatic int
23n/aSndCmd_Convert(PyObject *v, SndCommand *pc)
24n/a{
25n/a int len;
26n/a pc->param1 = 0;
27n/a pc->param2 = 0;
28n/a if (PyTuple_Check(v)) {
29n/a if (PyArg_ParseTuple(v, "h|hl", &pc->cmd, &pc->param1, &pc->param2))
30n/a return 1;
31n/a PyErr_Clear();
32n/a return PyArg_ParseTuple(v, "Hhs#", &pc->cmd, &pc->param1, &pc->param2, &len);
33n/a }
34n/a return PyArg_Parse(v, "H", &pc->cmd);
35n/a}
36n/a
37n/astatic pascal void SndCh_UserRoutine(SndChannelPtr chan, SndCommand *cmd); /* Forward */
38n/astatic pascal void SPB_completion(SPBPtr my_spb); /* Forward */
39n/a
40n/astatic PyObject *Snd_Error;
41n/a
42n/a/* --------------------- Object type SndChannel --------------------- */
43n/a
44n/astatic PyTypeObject SndChannel_Type;
45n/a
46n/a#define SndCh_Check(x) ((x)->ob_type == &SndChannel_Type || PyObject_TypeCheck((x), &SndChannel_Type))
47n/a
48n/atypedef struct SndChannelObject {
49n/a PyObject_HEAD
50n/a SndChannelPtr ob_itself;
51n/a /* Members used to implement callbacks: */
52n/a PyObject *ob_callback;
53n/a long ob_A5;
54n/a SndCommand ob_cmd;
55n/a} SndChannelObject;
56n/a
57n/astatic PyObject *SndCh_New(SndChannelPtr itself)
58n/a{
59n/a SndChannelObject *it;
60n/a it = PyObject_NEW(SndChannelObject, &SndChannel_Type);
61n/a if (it == NULL) return NULL;
62n/a it->ob_itself = itself;
63n/a it->ob_callback = NULL;
64n/a it->ob_A5 = SetCurrentA5();
65n/a return (PyObject *)it;
66n/a}
67n/a
68n/astatic void SndCh_dealloc(SndChannelObject *self)
69n/a{
70n/a SndDisposeChannel(self->ob_itself, 1);
71n/a Py_XDECREF(self->ob_callback);
72n/a PyObject_Free((PyObject *)self);
73n/a}
74n/a
75n/astatic PyObject *SndCh_SndDoCommand(SndChannelObject *_self, PyObject *_args)
76n/a{
77n/a PyObject *_res = NULL;
78n/a OSErr _err;
79n/a SndCommand cmd;
80n/a Boolean noWait;
81n/a if (!PyArg_ParseTuple(_args, "O&b",
82n/a SndCmd_Convert, &cmd,
83n/a &noWait))
84n/a return NULL;
85n/a _err = SndDoCommand(_self->ob_itself,
86n/a &cmd,
87n/a noWait);
88n/a if (_err != noErr) return PyMac_Error(_err);
89n/a Py_INCREF(Py_None);
90n/a _res = Py_None;
91n/a return _res;
92n/a}
93n/a
94n/astatic PyObject *SndCh_SndDoImmediate(SndChannelObject *_self, PyObject *_args)
95n/a{
96n/a PyObject *_res = NULL;
97n/a OSErr _err;
98n/a SndCommand cmd;
99n/a if (!PyArg_ParseTuple(_args, "O&",
100n/a SndCmd_Convert, &cmd))
101n/a return NULL;
102n/a _err = SndDoImmediate(_self->ob_itself,
103n/a &cmd);
104n/a if (_err != noErr) return PyMac_Error(_err);
105n/a Py_INCREF(Py_None);
106n/a _res = Py_None;
107n/a return _res;
108n/a}
109n/a
110n/astatic PyObject *SndCh_SndPlay(SndChannelObject *_self, PyObject *_args)
111n/a{
112n/a PyObject *_res = NULL;
113n/a OSErr _err;
114n/a SndListHandle sndHandle;
115n/a Boolean async;
116n/a if (!PyArg_ParseTuple(_args, "O&b",
117n/a ResObj_Convert, &sndHandle,
118n/a &async))
119n/a return NULL;
120n/a _err = SndPlay(_self->ob_itself,
121n/a sndHandle,
122n/a async);
123n/a if (_err != noErr) return PyMac_Error(_err);
124n/a Py_INCREF(Py_None);
125n/a _res = Py_None;
126n/a return _res;
127n/a}
128n/a
129n/astatic PyObject *SndCh_SndChannelStatus(SndChannelObject *_self, PyObject *_args)
130n/a{
131n/a PyObject *_res = NULL;
132n/a OSErr _err;
133n/a short theLength;
134n/a SCStatus theStatus__out__;
135n/a if (!PyArg_ParseTuple(_args, "h",
136n/a &theLength))
137n/a return NULL;
138n/a _err = SndChannelStatus(_self->ob_itself,
139n/a theLength,
140n/a &theStatus__out__);
141n/a if (_err != noErr) return PyMac_Error(_err);
142n/a _res = Py_BuildValue("s#",
143n/a (char *)&theStatus__out__, (int)sizeof(SCStatus));
144n/a return _res;
145n/a}
146n/a
147n/astatic PyObject *SndCh_SndGetInfo(SndChannelObject *_self, PyObject *_args)
148n/a{
149n/a PyObject *_res = NULL;
150n/a OSErr _err;
151n/a OSType selector;
152n/a void * infoPtr;
153n/a if (!PyArg_ParseTuple(_args, "O&w",
154n/a PyMac_GetOSType, &selector,
155n/a &infoPtr))
156n/a return NULL;
157n/a _err = SndGetInfo(_self->ob_itself,
158n/a selector,
159n/a infoPtr);
160n/a if (_err != noErr) return PyMac_Error(_err);
161n/a Py_INCREF(Py_None);
162n/a _res = Py_None;
163n/a return _res;
164n/a}
165n/a
166n/astatic PyObject *SndCh_SndSetInfo(SndChannelObject *_self, PyObject *_args)
167n/a{
168n/a PyObject *_res = NULL;
169n/a OSErr _err;
170n/a OSType selector;
171n/a void * infoPtr;
172n/a if (!PyArg_ParseTuple(_args, "O&w",
173n/a PyMac_GetOSType, &selector,
174n/a &infoPtr))
175n/a return NULL;
176n/a _err = SndSetInfo(_self->ob_itself,
177n/a selector,
178n/a infoPtr);
179n/a if (_err != noErr) return PyMac_Error(_err);
180n/a Py_INCREF(Py_None);
181n/a _res = Py_None;
182n/a return _res;
183n/a}
184n/a
185n/astatic PyMethodDef SndCh_methods[] = {
186n/a {"SndDoCommand", (PyCFunction)SndCh_SndDoCommand, 1,
187n/a PyDoc_STR("(SndCommand cmd, Boolean noWait) -> None")},
188n/a {"SndDoImmediate", (PyCFunction)SndCh_SndDoImmediate, 1,
189n/a PyDoc_STR("(SndCommand cmd) -> None")},
190n/a {"SndPlay", (PyCFunction)SndCh_SndPlay, 1,
191n/a PyDoc_STR("(SndListHandle sndHandle, Boolean async) -> None")},
192n/a {"SndChannelStatus", (PyCFunction)SndCh_SndChannelStatus, 1,
193n/a PyDoc_STR("(short theLength) -> (SCStatus theStatus)")},
194n/a {"SndGetInfo", (PyCFunction)SndCh_SndGetInfo, 1,
195n/a PyDoc_STR("(OSType selector, void * infoPtr) -> None")},
196n/a {"SndSetInfo", (PyCFunction)SndCh_SndSetInfo, 1,
197n/a PyDoc_STR("(OSType selector, void * infoPtr) -> None")},
198n/a {NULL, NULL, 0}
199n/a};
200n/a
201n/a#define SndCh_getsetlist NULL
202n/a
203n/a
204n/a#define SndCh_compare NULL
205n/a
206n/a#define SndCh_repr NULL
207n/a
208n/a#define SndCh_hash NULL
209n/a
210n/astatic PyTypeObject SndChannel_Type = {
211n/a PyObject_HEAD_INIT(NULL)
212n/a 0, /*ob_size*/
213n/a "_Snd.SndChannel", /*tp_name*/
214n/a sizeof(SndChannelObject), /*tp_basicsize*/
215n/a 0, /*tp_itemsize*/
216n/a /* methods */
217n/a (destructor) SndCh_dealloc, /*tp_dealloc*/
218n/a 0, /*tp_print*/
219n/a (getattrfunc)0, /*tp_getattr*/
220n/a (setattrfunc)0, /*tp_setattr*/
221n/a (cmpfunc) SndCh_compare, /*tp_compare*/
222n/a (reprfunc) SndCh_repr, /*tp_repr*/
223n/a (PyNumberMethods *)0, /* tp_as_number */
224n/a (PySequenceMethods *)0, /* tp_as_sequence */
225n/a (PyMappingMethods *)0, /* tp_as_mapping */
226n/a (hashfunc) SndCh_hash, /*tp_hash*/
227n/a 0, /*tp_call*/
228n/a 0, /*tp_str*/
229n/a PyObject_GenericGetAttr, /*tp_getattro*/
230n/a PyObject_GenericSetAttr, /*tp_setattro */
231n/a 0, /*tp_as_buffer*/
232n/a Py_TPFLAGS_DEFAULT, /* tp_flags */
233n/a 0, /*tp_doc*/
234n/a 0, /*tp_traverse*/
235n/a 0, /*tp_clear*/
236n/a 0, /*tp_richcompare*/
237n/a 0, /*tp_weaklistoffset*/
238n/a 0, /*tp_iter*/
239n/a 0, /*tp_iternext*/
240n/a SndCh_methods, /* tp_methods */
241n/a 0, /*tp_members*/
242n/a SndCh_getsetlist, /*tp_getset*/
243n/a 0, /*tp_base*/
244n/a 0, /*tp_dict*/
245n/a 0, /*tp_descr_get*/
246n/a 0, /*tp_descr_set*/
247n/a 0, /*tp_dictoffset*/
248n/a 0, /*tp_init*/
249n/a 0, /*tp_alloc*/
250n/a 0, /*tp_new*/
251n/a 0, /*tp_free*/
252n/a};
253n/a
254n/a/* ------------------- End object type SndChannel ------------------- */
255n/a
256n/a
257n/a/* ------------------------ Object type SPB ------------------------- */
258n/a
259n/astatic PyTypeObject SPB_Type;
260n/a
261n/a#define SPBObj_Check(x) ((x)->ob_type == &SPB_Type || PyObject_TypeCheck((x), &SPB_Type))
262n/a
263n/atypedef struct SPBObject {
264n/a PyObject_HEAD
265n/a /* Members used to implement callbacks: */
266n/a PyObject *ob_completion;
267n/a PyObject *ob_interrupt;
268n/a PyObject *ob_thiscallback;
269n/a long ob_A5;
270n/a SPB ob_spb;
271n/a} SPBObject;
272n/a
273n/astatic PyObject *SPBObj_New(void)
274n/a{
275n/a SPBObject *it;
276n/a it = PyObject_NEW(SPBObject, &SPB_Type);
277n/a if (it == NULL) return NULL;
278n/a it->ob_completion = NULL;
279n/a it->ob_interrupt = NULL;
280n/a it->ob_thiscallback = NULL;
281n/a it->ob_A5 = SetCurrentA5();
282n/a memset((char *)&it->ob_spb, 0, sizeof(it->ob_spb));
283n/a it->ob_spb.userLong = (long)it;
284n/a return (PyObject *)it;
285n/a}
286n/astatic int SPBObj_Convert(PyObject *v, SPBPtr *p_itself)
287n/a{
288n/a if (!SPBObj_Check(v))
289n/a {
290n/a PyErr_SetString(PyExc_TypeError, "SPB required");
291n/a return 0;
292n/a }
293n/a *p_itself = &((SPBObject *)v)->ob_spb;
294n/a return 1;
295n/a}
296n/a
297n/astatic void SPBObj_dealloc(SPBObject *self)
298n/a{
299n/a /* Cleanup of self->ob_itself goes here */
300n/a self->ob_spb.userLong = 0;
301n/a self->ob_thiscallback = 0;
302n/a Py_XDECREF(self->ob_completion);
303n/a Py_XDECREF(self->ob_interrupt);
304n/a PyObject_Free((PyObject *)self);
305n/a}
306n/a
307n/astatic PyMethodDef SPBObj_methods[] = {
308n/a {NULL, NULL, 0}
309n/a};
310n/a
311n/astatic PyObject *SPBObj_get_inRefNum(SPBObject *self, void *closure)
312n/a{
313n/a return Py_BuildValue("l", self->ob_spb.inRefNum);
314n/a}
315n/a
316n/astatic int SPBObj_set_inRefNum(SPBObject *self, PyObject *v, void *closure)
317n/a{
318n/a return -1 + PyArg_Parse(v, "l", &self->ob_spb.inRefNum);
319n/a return 0;
320n/a}
321n/a
322n/astatic PyObject *SPBObj_get_count(SPBObject *self, void *closure)
323n/a{
324n/a return Py_BuildValue("l", self->ob_spb.count);
325n/a}
326n/a
327n/astatic int SPBObj_set_count(SPBObject *self, PyObject *v, void *closure)
328n/a{
329n/a return -1 + PyArg_Parse(v, "l", &self->ob_spb.count);
330n/a return 0;
331n/a}
332n/a
333n/astatic PyObject *SPBObj_get_milliseconds(SPBObject *self, void *closure)
334n/a{
335n/a return Py_BuildValue("l", self->ob_spb.milliseconds);
336n/a}
337n/a
338n/astatic int SPBObj_set_milliseconds(SPBObject *self, PyObject *v, void *closure)
339n/a{
340n/a return -1 + PyArg_Parse(v, "l", &self->ob_spb.milliseconds);
341n/a return 0;
342n/a}
343n/a
344n/astatic PyObject *SPBObj_get_error(SPBObject *self, void *closure)
345n/a{
346n/a return Py_BuildValue("h", self->ob_spb.error);
347n/a}
348n/a
349n/a#define SPBObj_set_error NULL
350n/a
351n/a#define SPBObj_get_completionRoutine NULL
352n/a
353n/astatic int SPBObj_set_completionRoutine(SPBObject *self, PyObject *v, void *closure)
354n/a{
355n/a self->ob_spb.completionRoutine = NewSICompletionUPP(SPB_completion);
356n/a self->ob_completion = v;
357n/a Py_INCREF(v);
358n/a return 0;
359n/a return 0;
360n/a}
361n/a
362n/astatic PyGetSetDef SPBObj_getsetlist[] = {
363n/a {"inRefNum", (getter)SPBObj_get_inRefNum, (setter)SPBObj_set_inRefNum, NULL},
364n/a {"count", (getter)SPBObj_get_count, (setter)SPBObj_set_count, NULL},
365n/a {"milliseconds", (getter)SPBObj_get_milliseconds, (setter)SPBObj_set_milliseconds, NULL},
366n/a {"error", (getter)SPBObj_get_error, (setter)SPBObj_set_error, NULL},
367n/a {"completionRoutine", (getter)SPBObj_get_completionRoutine, (setter)SPBObj_set_completionRoutine, NULL},
368n/a {NULL, NULL, NULL, NULL},
369n/a};
370n/a
371n/a
372n/a#define SPBObj_compare NULL
373n/a
374n/a#define SPBObj_repr NULL
375n/a
376n/a#define SPBObj_hash NULL
377n/a
378n/astatic PyTypeObject SPB_Type = {
379n/a PyObject_HEAD_INIT(NULL)
380n/a 0, /*ob_size*/
381n/a "_Snd.SPB", /*tp_name*/
382n/a sizeof(SPBObject), /*tp_basicsize*/
383n/a 0, /*tp_itemsize*/
384n/a /* methods */
385n/a (destructor) SPBObj_dealloc, /*tp_dealloc*/
386n/a 0, /*tp_print*/
387n/a (getattrfunc)0, /*tp_getattr*/
388n/a (setattrfunc)0, /*tp_setattr*/
389n/a (cmpfunc) SPBObj_compare, /*tp_compare*/
390n/a (reprfunc) SPBObj_repr, /*tp_repr*/
391n/a (PyNumberMethods *)0, /* tp_as_number */
392n/a (PySequenceMethods *)0, /* tp_as_sequence */
393n/a (PyMappingMethods *)0, /* tp_as_mapping */
394n/a (hashfunc) SPBObj_hash, /*tp_hash*/
395n/a 0, /*tp_call*/
396n/a 0, /*tp_str*/
397n/a PyObject_GenericGetAttr, /*tp_getattro*/
398n/a PyObject_GenericSetAttr, /*tp_setattro */
399n/a 0, /*tp_as_buffer*/
400n/a Py_TPFLAGS_DEFAULT, /* tp_flags */
401n/a 0, /*tp_doc*/
402n/a 0, /*tp_traverse*/
403n/a 0, /*tp_clear*/
404n/a 0, /*tp_richcompare*/
405n/a 0, /*tp_weaklistoffset*/
406n/a 0, /*tp_iter*/
407n/a 0, /*tp_iternext*/
408n/a SPBObj_methods, /* tp_methods */
409n/a 0, /*tp_members*/
410n/a SPBObj_getsetlist, /*tp_getset*/
411n/a 0, /*tp_base*/
412n/a 0, /*tp_dict*/
413n/a 0, /*tp_descr_get*/
414n/a 0, /*tp_descr_set*/
415n/a 0, /*tp_dictoffset*/
416n/a 0, /*tp_init*/
417n/a 0, /*tp_alloc*/
418n/a 0, /*tp_new*/
419n/a 0, /*tp_free*/
420n/a};
421n/a
422n/a/* ---------------------- End object type SPB ----------------------- */
423n/a
424n/a
425n/astatic PyObject *Snd_SPB(PyObject *_self, PyObject *_args)
426n/a{
427n/a PyObject *_res = NULL;
428n/a _res = SPBObj_New(); return _res;
429n/a}
430n/a
431n/astatic PyObject *Snd_SysBeep(PyObject *_self, PyObject *_args)
432n/a{
433n/a PyObject *_res = NULL;
434n/a short duration;
435n/a if (!PyArg_ParseTuple(_args, "h",
436n/a &duration))
437n/a return NULL;
438n/a SysBeep(duration);
439n/a Py_INCREF(Py_None);
440n/a _res = Py_None;
441n/a return _res;
442n/a}
443n/a
444n/astatic PyObject *Snd_SndNewChannel(PyObject *_self, PyObject *_args)
445n/a{
446n/a PyObject *_res = NULL;
447n/a OSErr _err;
448n/a SndChannelPtr chan = 0;
449n/a short synth;
450n/a long init;
451n/a PyObject* userRoutine;
452n/a if (!PyArg_ParseTuple(_args, "hlO",
453n/a &synth,
454n/a &init,
455n/a &userRoutine))
456n/a return NULL;
457n/a if (userRoutine != Py_None && !PyCallable_Check(userRoutine))
458n/a {
459n/a PyErr_SetString(PyExc_TypeError, "callback must be callable");
460n/a goto userRoutine__error__;
461n/a }
462n/a _err = SndNewChannel(&chan,
463n/a synth,
464n/a init,
465n/a NewSndCallBackUPP(SndCh_UserRoutine));
466n/a if (_err != noErr) return PyMac_Error(_err);
467n/a _res = Py_BuildValue("O&",
468n/a SndCh_New, chan);
469n/a if (_res != NULL && userRoutine != Py_None)
470n/a {
471n/a SndChannelObject *p = (SndChannelObject *)_res;
472n/a p->ob_itself->userInfo = (long)p;
473n/a Py_INCREF(userRoutine);
474n/a p->ob_callback = userRoutine;
475n/a }
476n/a userRoutine__error__: ;
477n/a return _res;
478n/a}
479n/a
480n/astatic PyObject *Snd_SndSoundManagerVersion(PyObject *_self, PyObject *_args)
481n/a{
482n/a PyObject *_res = NULL;
483n/a NumVersion _rv;
484n/a if (!PyArg_ParseTuple(_args, ""))
485n/a return NULL;
486n/a _rv = SndSoundManagerVersion();
487n/a _res = Py_BuildValue("O&",
488n/a PyMac_BuildNumVersion, _rv);
489n/a return _res;
490n/a}
491n/a
492n/astatic PyObject *Snd_SndManagerStatus(PyObject *_self, PyObject *_args)
493n/a{
494n/a PyObject *_res = NULL;
495n/a OSErr _err;
496n/a short theLength;
497n/a SMStatus theStatus__out__;
498n/a if (!PyArg_ParseTuple(_args, "h",
499n/a &theLength))
500n/a return NULL;
501n/a _err = SndManagerStatus(theLength,
502n/a &theStatus__out__);
503n/a if (_err != noErr) return PyMac_Error(_err);
504n/a _res = Py_BuildValue("s#",
505n/a (char *)&theStatus__out__, (int)sizeof(SMStatus));
506n/a return _res;
507n/a}
508n/a
509n/astatic PyObject *Snd_SndGetSysBeepState(PyObject *_self, PyObject *_args)
510n/a{
511n/a PyObject *_res = NULL;
512n/a short sysBeepState;
513n/a if (!PyArg_ParseTuple(_args, ""))
514n/a return NULL;
515n/a SndGetSysBeepState(&sysBeepState);
516n/a _res = Py_BuildValue("h",
517n/a sysBeepState);
518n/a return _res;
519n/a}
520n/a
521n/astatic PyObject *Snd_SndSetSysBeepState(PyObject *_self, PyObject *_args)
522n/a{
523n/a PyObject *_res = NULL;
524n/a OSErr _err;
525n/a short sysBeepState;
526n/a if (!PyArg_ParseTuple(_args, "h",
527n/a &sysBeepState))
528n/a return NULL;
529n/a _err = SndSetSysBeepState(sysBeepState);
530n/a if (_err != noErr) return PyMac_Error(_err);
531n/a Py_INCREF(Py_None);
532n/a _res = Py_None;
533n/a return _res;
534n/a}
535n/a
536n/astatic PyObject *Snd_GetSysBeepVolume(PyObject *_self, PyObject *_args)
537n/a{
538n/a PyObject *_res = NULL;
539n/a OSErr _err;
540n/a long level;
541n/a if (!PyArg_ParseTuple(_args, ""))
542n/a return NULL;
543n/a _err = GetSysBeepVolume(&level);
544n/a if (_err != noErr) return PyMac_Error(_err);
545n/a _res = Py_BuildValue("l",
546n/a level);
547n/a return _res;
548n/a}
549n/a
550n/astatic PyObject *Snd_SetSysBeepVolume(PyObject *_self, PyObject *_args)
551n/a{
552n/a PyObject *_res = NULL;
553n/a OSErr _err;
554n/a long level;
555n/a if (!PyArg_ParseTuple(_args, "l",
556n/a &level))
557n/a return NULL;
558n/a _err = SetSysBeepVolume(level);
559n/a if (_err != noErr) return PyMac_Error(_err);
560n/a Py_INCREF(Py_None);
561n/a _res = Py_None;
562n/a return _res;
563n/a}
564n/a
565n/astatic PyObject *Snd_GetDefaultOutputVolume(PyObject *_self, PyObject *_args)
566n/a{
567n/a PyObject *_res = NULL;
568n/a OSErr _err;
569n/a long level;
570n/a if (!PyArg_ParseTuple(_args, ""))
571n/a return NULL;
572n/a _err = GetDefaultOutputVolume(&level);
573n/a if (_err != noErr) return PyMac_Error(_err);
574n/a _res = Py_BuildValue("l",
575n/a level);
576n/a return _res;
577n/a}
578n/a
579n/astatic PyObject *Snd_SetDefaultOutputVolume(PyObject *_self, PyObject *_args)
580n/a{
581n/a PyObject *_res = NULL;
582n/a OSErr _err;
583n/a long level;
584n/a if (!PyArg_ParseTuple(_args, "l",
585n/a &level))
586n/a return NULL;
587n/a _err = SetDefaultOutputVolume(level);
588n/a if (_err != noErr) return PyMac_Error(_err);
589n/a Py_INCREF(Py_None);
590n/a _res = Py_None;
591n/a return _res;
592n/a}
593n/a
594n/astatic PyObject *Snd_GetSoundHeaderOffset(PyObject *_self, PyObject *_args)
595n/a{
596n/a PyObject *_res = NULL;
597n/a OSErr _err;
598n/a SndListHandle sndHandle;
599n/a long offset;
600n/a if (!PyArg_ParseTuple(_args, "O&",
601n/a ResObj_Convert, &sndHandle))
602n/a return NULL;
603n/a _err = GetSoundHeaderOffset(sndHandle,
604n/a &offset);
605n/a if (_err != noErr) return PyMac_Error(_err);
606n/a _res = Py_BuildValue("l",
607n/a offset);
608n/a return _res;
609n/a}
610n/a
611n/astatic PyObject *Snd_GetCompressionInfo(PyObject *_self, PyObject *_args)
612n/a{
613n/a PyObject *_res = NULL;
614n/a OSErr _err;
615n/a short compressionID;
616n/a OSType format;
617n/a short numChannels;
618n/a short sampleSize;
619n/a CompressionInfo cp__out__;
620n/a if (!PyArg_ParseTuple(_args, "hO&hh",
621n/a &compressionID,
622n/a PyMac_GetOSType, &format,
623n/a &numChannels,
624n/a &sampleSize))
625n/a return NULL;
626n/a _err = GetCompressionInfo(compressionID,
627n/a format,
628n/a numChannels,
629n/a sampleSize,
630n/a &cp__out__);
631n/a if (_err != noErr) return PyMac_Error(_err);
632n/a _res = Py_BuildValue("s#",
633n/a (char *)&cp__out__, (int)sizeof(CompressionInfo));
634n/a return _res;
635n/a}
636n/a
637n/astatic PyObject *Snd_SetSoundPreference(PyObject *_self, PyObject *_args)
638n/a{
639n/a PyObject *_res = NULL;
640n/a OSErr _err;
641n/a OSType theType;
642n/a Str255 name;
643n/a Handle settings;
644n/a if (!PyArg_ParseTuple(_args, "O&O&",
645n/a PyMac_GetOSType, &theType,
646n/a ResObj_Convert, &settings))
647n/a return NULL;
648n/a _err = SetSoundPreference(theType,
649n/a name,
650n/a settings);
651n/a if (_err != noErr) return PyMac_Error(_err);
652n/a _res = Py_BuildValue("O&",
653n/a PyMac_BuildStr255, name);
654n/a return _res;
655n/a}
656n/a
657n/astatic PyObject *Snd_GetSoundPreference(PyObject *_self, PyObject *_args)
658n/a{
659n/a PyObject *_res = NULL;
660n/a OSErr _err;
661n/a OSType theType;
662n/a Str255 name;
663n/a Handle settings;
664n/a if (!PyArg_ParseTuple(_args, "O&O&",
665n/a PyMac_GetOSType, &theType,
666n/a ResObj_Convert, &settings))
667n/a return NULL;
668n/a _err = GetSoundPreference(theType,
669n/a name,
670n/a settings);
671n/a if (_err != noErr) return PyMac_Error(_err);
672n/a _res = Py_BuildValue("O&",
673n/a PyMac_BuildStr255, name);
674n/a return _res;
675n/a}
676n/a
677n/astatic PyObject *Snd_GetCompressionName(PyObject *_self, PyObject *_args)
678n/a{
679n/a PyObject *_res = NULL;
680n/a OSErr _err;
681n/a OSType compressionType;
682n/a Str255 compressionName;
683n/a if (!PyArg_ParseTuple(_args, "O&",
684n/a PyMac_GetOSType, &compressionType))
685n/a return NULL;
686n/a _err = GetCompressionName(compressionType,
687n/a compressionName);
688n/a if (_err != noErr) return PyMac_Error(_err);
689n/a _res = Py_BuildValue("O&",
690n/a PyMac_BuildStr255, compressionName);
691n/a return _res;
692n/a}
693n/a
694n/astatic PyObject *Snd_SPBVersion(PyObject *_self, PyObject *_args)
695n/a{
696n/a PyObject *_res = NULL;
697n/a NumVersion _rv;
698n/a if (!PyArg_ParseTuple(_args, ""))
699n/a return NULL;
700n/a _rv = SPBVersion();
701n/a _res = Py_BuildValue("O&",
702n/a PyMac_BuildNumVersion, _rv);
703n/a return _res;
704n/a}
705n/a
706n/astatic PyObject *Snd_SndRecord(PyObject *_self, PyObject *_args)
707n/a{
708n/a PyObject *_res = NULL;
709n/a OSErr _err;
710n/a Point corner;
711n/a OSType quality;
712n/a SndListHandle sndHandle;
713n/a if (!PyArg_ParseTuple(_args, "O&O&",
714n/a PyMac_GetPoint, &corner,
715n/a PyMac_GetOSType, &quality))
716n/a return NULL;
717n/a _err = SndRecord((ModalFilterUPP)0,
718n/a corner,
719n/a quality,
720n/a &sndHandle);
721n/a if (_err != noErr) return PyMac_Error(_err);
722n/a _res = Py_BuildValue("O&",
723n/a ResObj_New, sndHandle);
724n/a return _res;
725n/a}
726n/a
727n/astatic PyObject *Snd_SPBSignInDevice(PyObject *_self, PyObject *_args)
728n/a{
729n/a PyObject *_res = NULL;
730n/a OSErr _err;
731n/a short deviceRefNum;
732n/a Str255 deviceName;
733n/a if (!PyArg_ParseTuple(_args, "hO&",
734n/a &deviceRefNum,
735n/a PyMac_GetStr255, deviceName))
736n/a return NULL;
737n/a _err = SPBSignInDevice(deviceRefNum,
738n/a deviceName);
739n/a if (_err != noErr) return PyMac_Error(_err);
740n/a Py_INCREF(Py_None);
741n/a _res = Py_None;
742n/a return _res;
743n/a}
744n/a
745n/astatic PyObject *Snd_SPBSignOutDevice(PyObject *_self, PyObject *_args)
746n/a{
747n/a PyObject *_res = NULL;
748n/a OSErr _err;
749n/a short deviceRefNum;
750n/a if (!PyArg_ParseTuple(_args, "h",
751n/a &deviceRefNum))
752n/a return NULL;
753n/a _err = SPBSignOutDevice(deviceRefNum);
754n/a if (_err != noErr) return PyMac_Error(_err);
755n/a Py_INCREF(Py_None);
756n/a _res = Py_None;
757n/a return _res;
758n/a}
759n/a
760n/astatic PyObject *Snd_SPBGetIndexedDevice(PyObject *_self, PyObject *_args)
761n/a{
762n/a PyObject *_res = NULL;
763n/a OSErr _err;
764n/a short count;
765n/a Str255 deviceName;
766n/a Handle deviceIconHandle;
767n/a if (!PyArg_ParseTuple(_args, "h",
768n/a &count))
769n/a return NULL;
770n/a _err = SPBGetIndexedDevice(count,
771n/a deviceName,
772n/a &deviceIconHandle);
773n/a if (_err != noErr) return PyMac_Error(_err);
774n/a _res = Py_BuildValue("O&O&",
775n/a PyMac_BuildStr255, deviceName,
776n/a ResObj_New, deviceIconHandle);
777n/a return _res;
778n/a}
779n/a
780n/astatic PyObject *Snd_SPBOpenDevice(PyObject *_self, PyObject *_args)
781n/a{
782n/a PyObject *_res = NULL;
783n/a OSErr _err;
784n/a Str255 deviceName;
785n/a short permission;
786n/a long inRefNum;
787n/a if (!PyArg_ParseTuple(_args, "O&h",
788n/a PyMac_GetStr255, deviceName,
789n/a &permission))
790n/a return NULL;
791n/a _err = SPBOpenDevice(deviceName,
792n/a permission,
793n/a &inRefNum);
794n/a if (_err != noErr) return PyMac_Error(_err);
795n/a _res = Py_BuildValue("l",
796n/a inRefNum);
797n/a return _res;
798n/a}
799n/a
800n/astatic PyObject *Snd_SPBCloseDevice(PyObject *_self, PyObject *_args)
801n/a{
802n/a PyObject *_res = NULL;
803n/a OSErr _err;
804n/a long inRefNum;
805n/a if (!PyArg_ParseTuple(_args, "l",
806n/a &inRefNum))
807n/a return NULL;
808n/a _err = SPBCloseDevice(inRefNum);
809n/a if (_err != noErr) return PyMac_Error(_err);
810n/a Py_INCREF(Py_None);
811n/a _res = Py_None;
812n/a return _res;
813n/a}
814n/a
815n/astatic PyObject *Snd_SPBRecord(PyObject *_self, PyObject *_args)
816n/a{
817n/a PyObject *_res = NULL;
818n/a OSErr _err;
819n/a SPBPtr inParamPtr;
820n/a Boolean asynchFlag;
821n/a if (!PyArg_ParseTuple(_args, "O&b",
822n/a SPBObj_Convert, &inParamPtr,
823n/a &asynchFlag))
824n/a return NULL;
825n/a _err = SPBRecord(inParamPtr,
826n/a asynchFlag);
827n/a if (_err != noErr) return PyMac_Error(_err);
828n/a Py_INCREF(Py_None);
829n/a _res = Py_None;
830n/a return _res;
831n/a}
832n/a
833n/astatic PyObject *Snd_SPBPauseRecording(PyObject *_self, PyObject *_args)
834n/a{
835n/a PyObject *_res = NULL;
836n/a OSErr _err;
837n/a long inRefNum;
838n/a if (!PyArg_ParseTuple(_args, "l",
839n/a &inRefNum))
840n/a return NULL;
841n/a _err = SPBPauseRecording(inRefNum);
842n/a if (_err != noErr) return PyMac_Error(_err);
843n/a Py_INCREF(Py_None);
844n/a _res = Py_None;
845n/a return _res;
846n/a}
847n/a
848n/astatic PyObject *Snd_SPBResumeRecording(PyObject *_self, PyObject *_args)
849n/a{
850n/a PyObject *_res = NULL;
851n/a OSErr _err;
852n/a long inRefNum;
853n/a if (!PyArg_ParseTuple(_args, "l",
854n/a &inRefNum))
855n/a return NULL;
856n/a _err = SPBResumeRecording(inRefNum);
857n/a if (_err != noErr) return PyMac_Error(_err);
858n/a Py_INCREF(Py_None);
859n/a _res = Py_None;
860n/a return _res;
861n/a}
862n/a
863n/astatic PyObject *Snd_SPBStopRecording(PyObject *_self, PyObject *_args)
864n/a{
865n/a PyObject *_res = NULL;
866n/a OSErr _err;
867n/a long inRefNum;
868n/a if (!PyArg_ParseTuple(_args, "l",
869n/a &inRefNum))
870n/a return NULL;
871n/a _err = SPBStopRecording(inRefNum);
872n/a if (_err != noErr) return PyMac_Error(_err);
873n/a Py_INCREF(Py_None);
874n/a _res = Py_None;
875n/a return _res;
876n/a}
877n/a
878n/astatic PyObject *Snd_SPBGetRecordingStatus(PyObject *_self, PyObject *_args)
879n/a{
880n/a PyObject *_res = NULL;
881n/a OSErr _err;
882n/a long inRefNum;
883n/a short recordingStatus;
884n/a short meterLevel;
885n/a unsigned long totalSamplesToRecord;
886n/a unsigned long numberOfSamplesRecorded;
887n/a unsigned long totalMsecsToRecord;
888n/a unsigned long numberOfMsecsRecorded;
889n/a if (!PyArg_ParseTuple(_args, "l",
890n/a &inRefNum))
891n/a return NULL;
892n/a _err = SPBGetRecordingStatus(inRefNum,
893n/a &recordingStatus,
894n/a &meterLevel,
895n/a &totalSamplesToRecord,
896n/a &numberOfSamplesRecorded,
897n/a &totalMsecsToRecord,
898n/a &numberOfMsecsRecorded);
899n/a if (_err != noErr) return PyMac_Error(_err);
900n/a _res = Py_BuildValue("hhllll",
901n/a recordingStatus,
902n/a meterLevel,
903n/a totalSamplesToRecord,
904n/a numberOfSamplesRecorded,
905n/a totalMsecsToRecord,
906n/a numberOfMsecsRecorded);
907n/a return _res;
908n/a}
909n/a
910n/astatic PyObject *Snd_SPBGetDeviceInfo(PyObject *_self, PyObject *_args)
911n/a{
912n/a PyObject *_res = NULL;
913n/a OSErr _err;
914n/a long inRefNum;
915n/a OSType infoType;
916n/a void * infoData;
917n/a if (!PyArg_ParseTuple(_args, "lO&w",
918n/a &inRefNum,
919n/a PyMac_GetOSType, &infoType,
920n/a &infoData))
921n/a return NULL;
922n/a _err = SPBGetDeviceInfo(inRefNum,
923n/a infoType,
924n/a infoData);
925n/a if (_err != noErr) return PyMac_Error(_err);
926n/a Py_INCREF(Py_None);
927n/a _res = Py_None;
928n/a return _res;
929n/a}
930n/a
931n/astatic PyObject *Snd_SPBSetDeviceInfo(PyObject *_self, PyObject *_args)
932n/a{
933n/a PyObject *_res = NULL;
934n/a OSErr _err;
935n/a long inRefNum;
936n/a OSType infoType;
937n/a void * infoData;
938n/a if (!PyArg_ParseTuple(_args, "lO&w",
939n/a &inRefNum,
940n/a PyMac_GetOSType, &infoType,
941n/a &infoData))
942n/a return NULL;
943n/a _err = SPBSetDeviceInfo(inRefNum,
944n/a infoType,
945n/a infoData);
946n/a if (_err != noErr) return PyMac_Error(_err);
947n/a Py_INCREF(Py_None);
948n/a _res = Py_None;
949n/a return _res;
950n/a}
951n/a
952n/astatic PyObject *Snd_SPBMillisecondsToBytes(PyObject *_self, PyObject *_args)
953n/a{
954n/a PyObject *_res = NULL;
955n/a OSErr _err;
956n/a long inRefNum;
957n/a long milliseconds;
958n/a if (!PyArg_ParseTuple(_args, "l",
959n/a &inRefNum))
960n/a return NULL;
961n/a _err = SPBMillisecondsToBytes(inRefNum,
962n/a &milliseconds);
963n/a if (_err != noErr) return PyMac_Error(_err);
964n/a _res = Py_BuildValue("l",
965n/a milliseconds);
966n/a return _res;
967n/a}
968n/a
969n/astatic PyObject *Snd_SPBBytesToMilliseconds(PyObject *_self, PyObject *_args)
970n/a{
971n/a PyObject *_res = NULL;
972n/a OSErr _err;
973n/a long inRefNum;
974n/a long byteCount;
975n/a if (!PyArg_ParseTuple(_args, "l",
976n/a &inRefNum))
977n/a return NULL;
978n/a _err = SPBBytesToMilliseconds(inRefNum,
979n/a &byteCount);
980n/a if (_err != noErr) return PyMac_Error(_err);
981n/a _res = Py_BuildValue("l",
982n/a byteCount);
983n/a return _res;
984n/a}
985n/a#endif /* __LP64__ */
986n/a
987n/astatic PyMethodDef Snd_methods[] = {
988n/a#ifndef __LP64__
989n/a {"SPB", (PyCFunction)Snd_SPB, 1,
990n/a PyDoc_STR(NULL)},
991n/a {"SysBeep", (PyCFunction)Snd_SysBeep, 1,
992n/a PyDoc_STR("(short duration) -> None")},
993n/a {"SndNewChannel", (PyCFunction)Snd_SndNewChannel, 1,
994n/a PyDoc_STR("(short synth, long init, PyObject* userRoutine) -> (SndChannelPtr chan)")},
995n/a {"SndSoundManagerVersion", (PyCFunction)Snd_SndSoundManagerVersion, 1,
996n/a PyDoc_STR("() -> (NumVersion _rv)")},
997n/a {"SndManagerStatus", (PyCFunction)Snd_SndManagerStatus, 1,
998n/a PyDoc_STR("(short theLength) -> (SMStatus theStatus)")},
999n/a {"SndGetSysBeepState", (PyCFunction)Snd_SndGetSysBeepState, 1,
1000n/a PyDoc_STR("() -> (short sysBeepState)")},
1001n/a {"SndSetSysBeepState", (PyCFunction)Snd_SndSetSysBeepState, 1,
1002n/a PyDoc_STR("(short sysBeepState) -> None")},
1003n/a {"GetSysBeepVolume", (PyCFunction)Snd_GetSysBeepVolume, 1,
1004n/a PyDoc_STR("() -> (long level)")},
1005n/a {"SetSysBeepVolume", (PyCFunction)Snd_SetSysBeepVolume, 1,
1006n/a PyDoc_STR("(long level) -> None")},
1007n/a {"GetDefaultOutputVolume", (PyCFunction)Snd_GetDefaultOutputVolume, 1,
1008n/a PyDoc_STR("() -> (long level)")},
1009n/a {"SetDefaultOutputVolume", (PyCFunction)Snd_SetDefaultOutputVolume, 1,
1010n/a PyDoc_STR("(long level) -> None")},
1011n/a {"GetSoundHeaderOffset", (PyCFunction)Snd_GetSoundHeaderOffset, 1,
1012n/a PyDoc_STR("(SndListHandle sndHandle) -> (long offset)")},
1013n/a {"GetCompressionInfo", (PyCFunction)Snd_GetCompressionInfo, 1,
1014n/a PyDoc_STR("(short compressionID, OSType format, short numChannels, short sampleSize) -> (CompressionInfo cp)")},
1015n/a {"SetSoundPreference", (PyCFunction)Snd_SetSoundPreference, 1,
1016n/a PyDoc_STR("(OSType theType, Handle settings) -> (Str255 name)")},
1017n/a {"GetSoundPreference", (PyCFunction)Snd_GetSoundPreference, 1,
1018n/a PyDoc_STR("(OSType theType, Handle settings) -> (Str255 name)")},
1019n/a {"GetCompressionName", (PyCFunction)Snd_GetCompressionName, 1,
1020n/a PyDoc_STR("(OSType compressionType) -> (Str255 compressionName)")},
1021n/a {"SPBVersion", (PyCFunction)Snd_SPBVersion, 1,
1022n/a PyDoc_STR("() -> (NumVersion _rv)")},
1023n/a {"SndRecord", (PyCFunction)Snd_SndRecord, 1,
1024n/a PyDoc_STR("(Point corner, OSType quality) -> (SndListHandle sndHandle)")},
1025n/a {"SPBSignInDevice", (PyCFunction)Snd_SPBSignInDevice, 1,
1026n/a PyDoc_STR("(short deviceRefNum, Str255 deviceName) -> None")},
1027n/a {"SPBSignOutDevice", (PyCFunction)Snd_SPBSignOutDevice, 1,
1028n/a PyDoc_STR("(short deviceRefNum) -> None")},
1029n/a {"SPBGetIndexedDevice", (PyCFunction)Snd_SPBGetIndexedDevice, 1,
1030n/a PyDoc_STR("(short count) -> (Str255 deviceName, Handle deviceIconHandle)")},
1031n/a {"SPBOpenDevice", (PyCFunction)Snd_SPBOpenDevice, 1,
1032n/a PyDoc_STR("(Str255 deviceName, short permission) -> (long inRefNum)")},
1033n/a {"SPBCloseDevice", (PyCFunction)Snd_SPBCloseDevice, 1,
1034n/a PyDoc_STR("(long inRefNum) -> None")},
1035n/a {"SPBRecord", (PyCFunction)Snd_SPBRecord, 1,
1036n/a PyDoc_STR("(SPBPtr inParamPtr, Boolean asynchFlag) -> None")},
1037n/a {"SPBPauseRecording", (PyCFunction)Snd_SPBPauseRecording, 1,
1038n/a PyDoc_STR("(long inRefNum) -> None")},
1039n/a {"SPBResumeRecording", (PyCFunction)Snd_SPBResumeRecording, 1,
1040n/a PyDoc_STR("(long inRefNum) -> None")},
1041n/a {"SPBStopRecording", (PyCFunction)Snd_SPBStopRecording, 1,
1042n/a PyDoc_STR("(long inRefNum) -> None")},
1043n/a {"SPBGetRecordingStatus", (PyCFunction)Snd_SPBGetRecordingStatus, 1,
1044n/a PyDoc_STR("(long inRefNum) -> (short recordingStatus, short meterLevel, unsigned long totalSamplesToRecord, unsigned long numberOfSamplesRecorded, unsigned long totalMsecsToRecord, unsigned long numberOfMsecsRecorded)")},
1045n/a {"SPBGetDeviceInfo", (PyCFunction)Snd_SPBGetDeviceInfo, 1,
1046n/a PyDoc_STR("(long inRefNum, OSType infoType, void * infoData) -> None")},
1047n/a {"SPBSetDeviceInfo", (PyCFunction)Snd_SPBSetDeviceInfo, 1,
1048n/a PyDoc_STR("(long inRefNum, OSType infoType, void * infoData) -> None")},
1049n/a {"SPBMillisecondsToBytes", (PyCFunction)Snd_SPBMillisecondsToBytes, 1,
1050n/a PyDoc_STR("(long inRefNum) -> (long milliseconds)")},
1051n/a {"SPBBytesToMilliseconds", (PyCFunction)Snd_SPBBytesToMilliseconds, 1,
1052n/a PyDoc_STR("(long inRefNum) -> (long byteCount)")},
1053n/a#endif /* __LP64__ */
1054n/a {NULL, NULL, 0}
1055n/a};
1056n/a
1057n/a
1058n/a#ifndef __LP64__
1059n/a
1060n/a/* Routine passed to Py_AddPendingCall -- call the Python callback */
1061n/astatic int
1062n/aSndCh_CallCallBack(void *arg)
1063n/a{
1064n/a SndChannelObject *p = (SndChannelObject *)arg;
1065n/a PyObject *args;
1066n/a PyObject *res;
1067n/a args = Py_BuildValue("(O(hhl))",
1068n/a p, p->ob_cmd.cmd, p->ob_cmd.param1, p->ob_cmd.param2);
1069n/a res = PyEval_CallObject(p->ob_callback, args);
1070n/a Py_DECREF(args);
1071n/a if (res == NULL)
1072n/a return -1;
1073n/a Py_DECREF(res);
1074n/a return 0;
1075n/a}
1076n/a
1077n/a/* Routine passed to NewSndChannel -- schedule a call to SndCh_CallCallBack */
1078n/astatic pascal void
1079n/aSndCh_UserRoutine(SndChannelPtr chan, SndCommand *cmd)
1080n/a{
1081n/a SndChannelObject *p = (SndChannelObject *)(chan->userInfo);
1082n/a if (p->ob_callback != NULL) {
1083n/a long A5 = SetA5(p->ob_A5);
1084n/a p->ob_cmd = *cmd;
1085n/a Py_AddPendingCall(SndCh_CallCallBack, (void *)p);
1086n/a SetA5(A5);
1087n/a }
1088n/a}
1089n/a
1090n/a/* SPB callbacks - Schedule callbacks to Python */
1091n/astatic int
1092n/aSPB_CallCallBack(void *arg)
1093n/a{
1094n/a SPBObject *p = (SPBObject *)arg;
1095n/a PyObject *args;
1096n/a PyObject *res;
1097n/a
1098n/a if ( p->ob_thiscallback == 0 ) return 0;
1099n/a args = Py_BuildValue("(O)", p);
1100n/a res = PyEval_CallObject(p->ob_thiscallback, args);
1101n/a p->ob_thiscallback = 0;
1102n/a Py_DECREF(args);
1103n/a if (res == NULL)
1104n/a return -1;
1105n/a Py_DECREF(res);
1106n/a return 0;
1107n/a}
1108n/a
1109n/astatic pascal void
1110n/aSPB_completion(SPBPtr my_spb)
1111n/a{
1112n/a SPBObject *p = (SPBObject *)(my_spb->userLong);
1113n/a
1114n/a if (p && p->ob_completion) {
1115n/a long A5 = SetA5(p->ob_A5);
1116n/a p->ob_thiscallback = p->ob_completion; /* Hope we cannot get two at the same time */
1117n/a Py_AddPendingCall(SPB_CallCallBack, (void *)p);
1118n/a SetA5(A5);
1119n/a }
1120n/a}
1121n/a#endif /* __LP64__ */
1122n/a
1123n/a
1124n/a
1125n/avoid init_Snd(void)
1126n/a{
1127n/a PyObject *m;
1128n/a#ifndef __LP64__
1129n/a PyObject *d;
1130n/a#endif /* __LP64__ */
1131n/a
1132n/a
1133n/a
1134n/a
1135n/a
1136n/a m = Py_InitModule("_Snd", Snd_methods);
1137n/a#ifndef __LP64__
1138n/a d = PyModule_GetDict(m);
1139n/a Snd_Error = PyMac_GetOSErrException();
1140n/a if (Snd_Error == NULL ||
1141n/a PyDict_SetItemString(d, "Error", Snd_Error) != 0)
1142n/a return;
1143n/a SndChannel_Type.ob_type = &PyType_Type;
1144n/a if (PyType_Ready(&SndChannel_Type) < 0) return;
1145n/a Py_INCREF(&SndChannel_Type);
1146n/a PyModule_AddObject(m, "SndChannel", (PyObject *)&SndChannel_Type);
1147n/a /* Backward-compatible name */
1148n/a Py_INCREF(&SndChannel_Type);
1149n/a PyModule_AddObject(m, "SndChannelType", (PyObject *)&SndChannel_Type);
1150n/a SPB_Type.ob_type = &PyType_Type;
1151n/a if (PyType_Ready(&SPB_Type) < 0) return;
1152n/a Py_INCREF(&SPB_Type);
1153n/a#if 0
1154n/a PyModule_AddObject(m, "SPB", (PyObject *)&SPB_Type);
1155n/a#endif
1156n/a /* Backward-compatible name */
1157n/a Py_INCREF(&SPB_Type);
1158n/a PyModule_AddObject(m, "SPBType", (PyObject *)&SPB_Type);
1159n/a#endif /* __LP64__ */
1160n/a}
1161n/a
1162n/a/* ======================== End module _Snd ========================= */
1163n/a