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

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

#countcontent
1n/a/***********************************************************
2n/aCopyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
3n/aThe Netherlands.
4n/a
5n/a All Rights Reserved
6n/a
7n/aPermission to use, copy, modify, and distribute this software and its
8n/adocumentation for any purpose and without fee is hereby granted,
9n/aprovided that the above copyright notice appear in all copies and that
10n/aboth that copyright notice and this permission notice appear in
11n/asupporting documentation, and that the names of Stichting Mathematisch
12n/aCentrum or CWI or Corporation for National Research Initiatives or
13n/aCNRI not be used in advertising or publicity pertaining to
14n/adistribution of the software without specific, written prior
15n/apermission.
16n/a
17n/aWhile CWI is the initial source for this software, a modified version
18n/ais made available by the Corporation for National Research Initiatives
19n/a(CNRI) at the Internet address ftp://ftp.python.org.
20n/a
21n/aSTICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
22n/aREGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
23n/aMERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
24n/aCENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
25n/aDAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
26n/aPROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
27n/aTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
28n/aPERFORMANCE OF THIS SOFTWARE.
29n/a
30n/a******************************************************************/
31n/a
32n/a#include "Python.h"
33n/a#include "pymactoolbox.h"
34n/a#include <Sound.h>
35n/a
36n/a#pragma options align=mac68k
37n/astruct SampleRateAvailable_arg {
38n/a short numrates;
39n/a Handle rates;
40n/a};
41n/a
42n/astruct SampleSizeAvailable_arg {
43n/a short numsizes;
44n/a Handle sizes;
45n/a};
46n/a
47n/a#pragma options align=reset
48n/a
49n/astatic PyObject *ErrorObject;
50n/a
51n/a
52n/a/* Convert Python object to unsigned Fixed */
53n/astatic int
54n/aPyMac_GetUFixed(PyObject *v, Fixed *f)
55n/a{
56n/a double d;
57n/a unsigned long uns;
58n/a
59n/a if( !PyArg_Parse(v, "d", &d))
60n/a return 0;
61n/a uns = (unsigned long)(d * 0x10000);
62n/a *f = (Fixed)uns;
63n/a return 1;
64n/a}
65n/a
66n/a/* Convert a Point to a Python object */
67n/astatic PyObject *
68n/aPyMac_BuildUFixed(Fixed f)
69n/a{
70n/a double d;
71n/a unsigned long funs;
72n/a
73n/a funs = (unsigned long)f;
74n/a
75n/a d = funs;
76n/a d = d / 0x10000;
77n/a return Py_BuildValue("d", d);
78n/a}
79n/a
80n/a
81n/a/* ----------------------------------------------------- */
82n/a
83n/astatic char sndih_getChannelAvailable__doc__[] =
84n/a""
85n/a;
86n/a
87n/astatic PyObject *
88n/asndih_getChannelAvailable(self, args)
89n/a PyObject *self; /* Not used */
90n/a PyObject *args;
91n/a{
92n/a long inRefNum;
93n/a short nchannel;
94n/a OSErr err;
95n/a
96n/a if (!PyArg_ParseTuple(args, "l", &inRefNum))
97n/a return NULL;
98n/a
99n/a if( (err=SPBGetDeviceInfo(inRefNum, siChannelAvailable, (Ptr)&nchannel)) != noErr )
100n/a return PyMac_Error(err);
101n/a return Py_BuildValue("h", nchannel);
102n/a}
103n/a
104n/astatic char sndih_getNumberChannels__doc__[] =
105n/a""
106n/a;
107n/a
108n/astatic PyObject *
109n/asndih_getNumberChannels(self, args)
110n/a PyObject *self; /* Not used */
111n/a PyObject *args;
112n/a{
113n/a long inRefNum;
114n/a short nchannel;
115n/a OSErr err;
116n/a
117n/a if (!PyArg_ParseTuple(args, "l", &inRefNum))
118n/a return NULL;
119n/a
120n/a if( (err=SPBGetDeviceInfo(inRefNum, siNumberChannels, (Ptr)&nchannel)) != noErr )
121n/a return PyMac_Error(err);
122n/a return Py_BuildValue("h", nchannel);
123n/a}
124n/a
125n/astatic char sndih_setNumberChannels__doc__[] =
126n/a""
127n/a;
128n/a
129n/astatic PyObject *
130n/asndih_setNumberChannels(self, args)
131n/a PyObject *self; /* Not used */
132n/a PyObject *args;
133n/a{
134n/a long inRefNum;
135n/a short nchannel;
136n/a OSErr err;
137n/a
138n/a if (!PyArg_ParseTuple(args, "lh", &inRefNum, &nchannel))
139n/a return NULL;
140n/a
141n/a if( (err=SPBSetDeviceInfo(inRefNum, siNumberChannels, (Ptr)&nchannel)) != noErr )
142n/a return PyMac_Error(err);
143n/a Py_INCREF(Py_None);
144n/a return Py_None;
145n/a}
146n/a
147n/astatic char sndih_getContinuous__doc__[] =
148n/a""
149n/a;
150n/a
151n/astatic PyObject *
152n/asndih_getContinuous(self, args)
153n/a PyObject *self; /* Not used */
154n/a PyObject *args;
155n/a{
156n/a long inRefNum;
157n/a short onoff;
158n/a OSErr err;
159n/a
160n/a if (!PyArg_ParseTuple(args, "l", &inRefNum))
161n/a return NULL;
162n/a
163n/a if( (err=SPBGetDeviceInfo(inRefNum, siContinuous, (Ptr)&onoff)) != noErr )
164n/a return PyMac_Error(err);
165n/a return Py_BuildValue("h", onoff);
166n/a}
167n/a
168n/astatic char sndih_setContinuous__doc__[] =
169n/a""
170n/a;
171n/a
172n/astatic PyObject *
173n/asndih_setContinuous(self, args)
174n/a PyObject *self; /* Not used */
175n/a PyObject *args;
176n/a{
177n/a long inRefNum;
178n/a short onoff;
179n/a OSErr err;
180n/a
181n/a if (!PyArg_ParseTuple(args, "lh", &inRefNum, &onoff))
182n/a return NULL;
183n/a
184n/a if( (err=SPBSetDeviceInfo(inRefNum, siContinuous, (Ptr)&onoff)) != noErr )
185n/a return PyMac_Error(err);
186n/a Py_INCREF(Py_None);
187n/a return Py_None;
188n/a}
189n/a
190n/astatic char sndih_getInputSourceNames__doc__[] =
191n/a""
192n/a;
193n/a
194n/astatic PyObject *
195n/asndih_getInputSourceNames(self, args)
196n/a PyObject *self; /* Not used */
197n/a PyObject *args;
198n/a{
199n/a long inRefNum;
200n/a Handle names;
201n/a OSErr err;
202n/a
203n/a if (!PyArg_ParseTuple(args, "l", &inRefNum))
204n/a return NULL;
205n/a
206n/a if( (err=SPBGetDeviceInfo(inRefNum, siInputSourceNames, (Ptr)&names)) != noErr )
207n/a return PyMac_Error(err);
208n/a return Py_BuildValue("O&", ResObj_New, names);
209n/a}
210n/a
211n/astatic char sndih_getInputSource__doc__[] =
212n/a""
213n/a;
214n/a
215n/astatic PyObject *
216n/asndih_getInputSource(self, args)
217n/a PyObject *self; /* Not used */
218n/a PyObject *args;
219n/a{
220n/a long inRefNum;
221n/a short source;
222n/a OSErr err;
223n/a
224n/a if (!PyArg_ParseTuple(args, "l", &inRefNum))
225n/a return NULL;
226n/a
227n/a if( (err=SPBGetDeviceInfo(inRefNum, siInputSource, (Ptr)&source)) != noErr )
228n/a return PyMac_Error(err);
229n/a return Py_BuildValue("h", source);
230n/a}
231n/a
232n/astatic char sndih_setInputSource__doc__[] =
233n/a""
234n/a;
235n/a
236n/astatic PyObject *
237n/asndih_setInputSource(self, args)
238n/a PyObject *self; /* Not used */
239n/a PyObject *args;
240n/a{
241n/a long inRefNum;
242n/a short source;
243n/a OSErr err;
244n/a
245n/a if (!PyArg_ParseTuple(args, "lh", &inRefNum, &source))
246n/a return NULL;
247n/a
248n/a if( (err=SPBSetDeviceInfo(inRefNum, siInputSource, (Ptr)&source)) != noErr )
249n/a return PyMac_Error(err);
250n/a Py_INCREF(Py_None);
251n/a return Py_None;
252n/a}
253n/a
254n/astatic char sndih_getPlayThruOnOff__doc__[] =
255n/a""
256n/a;
257n/a
258n/astatic PyObject *
259n/asndih_getPlayThruOnOff(self, args)
260n/a PyObject *self; /* Not used */
261n/a PyObject *args;
262n/a{
263n/a long inRefNum;
264n/a short onoff;
265n/a OSErr err;
266n/a
267n/a if (!PyArg_ParseTuple(args, "l", &inRefNum))
268n/a return NULL;
269n/a
270n/a if( (err=SPBGetDeviceInfo(inRefNum, siPlayThruOnOff, (Ptr)&onoff)) != noErr )
271n/a return PyMac_Error(err);
272n/a return Py_BuildValue("h", onoff);
273n/a}
274n/a
275n/astatic char sndih_setPlayThruOnOff__doc__[] =
276n/a""
277n/a;
278n/a
279n/astatic PyObject *
280n/asndih_setPlayThruOnOff(self, args)
281n/a PyObject *self; /* Not used */
282n/a PyObject *args;
283n/a{
284n/a long inRefNum;
285n/a short onoff;
286n/a OSErr err;
287n/a
288n/a if (!PyArg_ParseTuple(args, "lh", &inRefNum, &onoff))
289n/a return NULL;
290n/a
291n/a if( (err=SPBSetDeviceInfo(inRefNum, siPlayThruOnOff, (Ptr)&onoff)) != noErr )
292n/a return PyMac_Error(err);
293n/a Py_INCREF(Py_None);
294n/a return Py_None;
295n/a}
296n/a
297n/astatic char sndih_getSampleRate__doc__[] =
298n/a""
299n/a;
300n/a
301n/astatic PyObject *
302n/asndih_getSampleRate(self, args)
303n/a PyObject *self; /* Not used */
304n/a PyObject *args;
305n/a{
306n/a long inRefNum;
307n/a Fixed sample_rate;
308n/a OSErr err;
309n/a
310n/a if (!PyArg_ParseTuple(args, "l", &inRefNum))
311n/a return NULL;
312n/a
313n/a if( (err=SPBGetDeviceInfo(inRefNum, siSampleRate, (Ptr)&sample_rate)) != noErr )
314n/a return PyMac_Error(err);
315n/a return Py_BuildValue("O&", PyMac_BuildUFixed, sample_rate);
316n/a}
317n/a
318n/astatic char sndih_setSampleRate__doc__[] =
319n/a""
320n/a;
321n/a
322n/astatic PyObject *
323n/asndih_setSampleRate(self, args)
324n/a PyObject *self; /* Not used */
325n/a PyObject *args;
326n/a{
327n/a long inRefNum;
328n/a Fixed sample_rate;
329n/a OSErr err;
330n/a
331n/a if (!PyArg_ParseTuple(args, "lO&", &inRefNum, PyMac_GetUFixed, &sample_rate))
332n/a return NULL;
333n/a
334n/a if( (err=SPBSetDeviceInfo(inRefNum, siSampleRate, (Ptr)&sample_rate)) != noErr )
335n/a return PyMac_Error(err);
336n/a Py_INCREF(Py_None);
337n/a return Py_None;
338n/a}
339n/a
340n/astatic char sndih_getSampleSize__doc__[] =
341n/a""
342n/a;
343n/a
344n/astatic PyObject *
345n/asndih_getSampleSize(self, args)
346n/a PyObject *self; /* Not used */
347n/a PyObject *args;
348n/a{
349n/a long inRefNum;
350n/a short bits;
351n/a OSErr err;
352n/a
353n/a if (!PyArg_ParseTuple(args, "l", &inRefNum))
354n/a return NULL;
355n/a
356n/a if( (err=SPBGetDeviceInfo(inRefNum, siSampleSize, (Ptr)&bits)) != noErr )
357n/a return PyMac_Error(err);
358n/a return Py_BuildValue("h", bits);
359n/a}
360n/a
361n/astatic char sndih_setSampleSize__doc__[] =
362n/a""
363n/a;
364n/a
365n/astatic PyObject *
366n/asndih_setSampleSize(self, args)
367n/a PyObject *self; /* Not used */
368n/a PyObject *args;
369n/a{
370n/a long inRefNum;
371n/a short size;
372n/a OSErr err;
373n/a
374n/a if (!PyArg_ParseTuple(args, "lh", &inRefNum, &size))
375n/a return NULL;
376n/a
377n/a if( (err=SPBSetDeviceInfo(inRefNum, siSampleSize, (Ptr)&size)) != noErr )
378n/a return PyMac_Error(err);
379n/a Py_INCREF(Py_None);
380n/a return Py_None;
381n/a}
382n/a
383n/astatic char sndih_getSampleSizeAvailable__doc__[] =
384n/a""
385n/a;
386n/a
387n/astatic PyObject *
388n/asndih_getSampleSizeAvailable(self, args)
389n/a PyObject *self; /* Not used */
390n/a PyObject *args;
391n/a{
392n/a long inRefNum;
393n/a struct SampleSizeAvailable_arg arg;
394n/a OSErr err;
395n/a PyObject *rsizes;
396n/a short *fsizes;
397n/a int i;
398n/a
399n/a arg.sizes = NULL;
400n/a rsizes = NULL;
401n/a if (!PyArg_ParseTuple(args, "l", &inRefNum))
402n/a return NULL;
403n/a
404n/a if( (err=SPBGetDeviceInfo(inRefNum, siSampleSizeAvailable, (Ptr)&arg)) != noErr ) {
405n/a return PyMac_Error(err);
406n/a }
407n/a fsizes = (short *)*(arg.sizes);
408n/a /* Handle contains a list of rates */
409n/a if( (rsizes = PyTuple_New(arg.numsizes)) == NULL)
410n/a return NULL;
411n/a for( i=0; i<arg.numsizes; i++ )
412n/a PyTuple_SetItem(rsizes, i, PyInt_FromLong((long)fsizes[i]));
413n/a return rsizes;
414n/a}
415n/a
416n/astatic char sndih_getSampleRateAvailable__doc__[] =
417n/a""
418n/a;
419n/a
420n/astatic PyObject *
421n/asndih_getSampleRateAvailable(self, args)
422n/a PyObject *self; /* Not used */
423n/a PyObject *args;
424n/a{
425n/a long inRefNum;
426n/a struct SampleRateAvailable_arg arg;
427n/a OSErr err;
428n/a PyObject *rrates, *obj;
429n/a Fixed *frates;
430n/a int i;
431n/a
432n/a arg.rates = NULL;
433n/a rrates = NULL;
434n/a if (!PyArg_ParseTuple(args, "l", &inRefNum))
435n/a return NULL;
436n/a
437n/a if( (err=SPBGetDeviceInfo(inRefNum, siSampleRateAvailable, (Ptr)&arg)) != noErr ) {
438n/a return PyMac_Error(err);
439n/a }
440n/a frates = (Fixed *)*(arg.rates);
441n/a if( arg.numrates == 0 ) {
442n/a /* The handle contains upper and lowerbound */
443n/a rrates = Py_BuildValue("O&O&", frates[0], frates[1]);
444n/a if (rrates == NULL) return NULL;
445n/a } else {
446n/a /* Handle contains a list of rates */
447n/a if( (rrates = PyTuple_New(arg.numrates)) == NULL)
448n/a return NULL;
449n/a for( i=0; i<arg.numrates; i++ ) {
450n/a if( (obj = Py_BuildValue("O&", PyMac_BuildUFixed, frates[i]))==NULL)
451n/a goto out;
452n/a PyTuple_SetItem(rrates, i, obj);
453n/a }
454n/a }
455n/a return Py_BuildValue("hO", arg.numrates, rrates);
456n/aout:
457n/a Py_XDECREF(rrates);
458n/a return NULL;
459n/a}
460n/a
461n/a/* List of methods defined in the module */
462n/a
463n/astatic struct PyMethodDef sndih_methods[] = {
464n/a {"getChannelAvailable", (PyCFunction)sndih_getChannelAvailable, METH_VARARGS, sndih_getChannelAvailable__doc__},
465n/a {"getNumberChannels", (PyCFunction)sndih_getNumberChannels, METH_VARARGS, sndih_getNumberChannels__doc__},
466n/a {"setNumberChannels", (PyCFunction)sndih_setNumberChannels, METH_VARARGS, sndih_setNumberChannels__doc__},
467n/a {"getContinuous", (PyCFunction)sndih_getContinuous, METH_VARARGS, sndih_getContinuous__doc__},
468n/a {"setContinuous", (PyCFunction)sndih_setContinuous, METH_VARARGS, sndih_setContinuous__doc__},
469n/a {"getInputSourceNames", (PyCFunction)sndih_getInputSourceNames, METH_VARARGS, sndih_getInputSourceNames__doc__},
470n/a {"getInputSource", (PyCFunction)sndih_getInputSource, METH_VARARGS, sndih_getInputSource__doc__},
471n/a {"setInputSource", (PyCFunction)sndih_setInputSource, METH_VARARGS, sndih_setInputSource__doc__},
472n/a {"getPlayThruOnOff", (PyCFunction)sndih_getPlayThruOnOff, METH_VARARGS, sndih_getPlayThruOnOff__doc__},
473n/a {"setPlayThruOnOff", (PyCFunction)sndih_setPlayThruOnOff, METH_VARARGS, sndih_setPlayThruOnOff__doc__},
474n/a {"getSampleRate", (PyCFunction)sndih_getSampleRate, METH_VARARGS, sndih_getSampleRate__doc__},
475n/a {"setSampleRate", (PyCFunction)sndih_setSampleRate, METH_VARARGS, sndih_setSampleRate__doc__},
476n/a {"getSampleSize", (PyCFunction)sndih_getSampleSize, METH_VARARGS, sndih_getSampleSize__doc__},
477n/a {"setSampleSize", (PyCFunction)sndih_setSampleSize, METH_VARARGS, sndih_setSampleSize__doc__},
478n/a {"getSampleSizeAvailable", (PyCFunction)sndih_getSampleSizeAvailable, METH_VARARGS, sndih_getSampleSizeAvailable__doc__},
479n/a {"getSampleRateAvailable", (PyCFunction)sndih_getSampleRateAvailable, METH_VARARGS, sndih_getSampleRateAvailable__doc__},
480n/a
481n/a {NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */
482n/a};
483n/a
484n/a
485n/a/* Initialization function for the module (*must* be called initSndihooks) */
486n/a
487n/astatic char Sndihooks_module_documentation[] =
488n/a""
489n/a;
490n/a
491n/avoid
492n/ainit_Sndihooks()
493n/a{
494n/a PyObject *m, *d;
495n/a
496n/a /* Create the module and add the functions */
497n/a m = Py_InitModule4("_Sndihooks", sndih_methods,
498n/a Sndihooks_module_documentation,
499n/a (PyObject*)NULL,PYTHON_API_VERSION);
500n/a
501n/a /* Add some symbolic constants to the module */
502n/a d = PyModule_GetDict(m);
503n/a ErrorObject = PyString_FromString("Sndihooks.error");
504n/a PyDict_SetItemString(d, "error", ErrorObject);
505n/a
506n/a /* XXXX Add constants here */
507n/a
508n/a /* Check for errors */
509n/a if (PyErr_Occurred())
510n/a Py_FatalError("can't initialize module Sndihooks");
511n/a}
512n/a