diff options
author | Jack Jansen <jack.jansen@cwi.nl> | 2001-08-23 14:11:10 (GMT) |
---|---|---|
committer | Jack Jansen <jack.jansen@cwi.nl> | 2001-08-23 14:11:10 (GMT) |
commit | 25a5bd77083a359ea9afccef9de04f2d4fb57362 (patch) | |
tree | da545b510ed6590dc9dd262a0960ccf9a8309fef /Mac/Modules/snd | |
parent | 50ecb0ad835480e6a3446613ceeffa78a7bd2de3 (diff) | |
download | cpython-25a5bd77083a359ea9afccef9de04f2d4fb57362.zip cpython-25a5bd77083a359ea9afccef9de04f2d4fb57362.tar.gz cpython-25a5bd77083a359ea9afccef9de04f2d4fb57362.tar.bz2 |
Renamed.
Diffstat (limited to 'Mac/Modules/snd')
-rw-r--r-- | Mac/Modules/snd/Sndihooks.c | 513 | ||||
-rw-r--r-- | Mac/Modules/snd/Sndmodule.c | 1454 |
2 files changed, 0 insertions, 1967 deletions
diff --git a/Mac/Modules/snd/Sndihooks.c b/Mac/Modules/snd/Sndihooks.c deleted file mode 100644 index a4aa609..0000000 --- a/Mac/Modules/snd/Sndihooks.c +++ /dev/null @@ -1,513 +0,0 @@ -/*********************************************************** -Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, -The Netherlands. - - All Rights Reserved - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the names of Stichting Mathematisch -Centrum or CWI or Corporation for National Research Initiatives or -CNRI not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior -permission. - -While CWI is the initial source for this software, a modified version -is made available by the Corporation for National Research Initiatives -(CNRI) at the Internet address ftp://ftp.python.org. - -STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH -CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL -DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - -******************************************************************/ - -#include "Python.h" -#include "macglue.h" -#include "pymactoolbox.h" -#include <Sound.h> - -#pragma options align=mac68k -struct SampleRateAvailable_arg { - short numrates; - Handle rates; -}; - -struct SampleSizeAvailable_arg { - short numsizes; - Handle sizes; -}; - -#pragma options align=reset - -static PyObject *ErrorObject; - - -/* Convert Python object to unsigned Fixed */ -static int -PyMac_GetUFixed(PyObject *v, Fixed *f) -{ - double d; - unsigned long uns; - - if( !PyArg_Parse(v, "d", &d)) - return 0; - uns = (unsigned long)(d * 0x10000); - *f = (Fixed)uns; - return 1; -} - -/* Convert a Point to a Python object */ -static PyObject * -PyMac_BuildUFixed(Fixed f) -{ - double d; - unsigned long funs; - - funs = (unsigned long)f; - - d = funs; - d = d / 0x10000; - return Py_BuildValue("d", d); -} - - -/* ----------------------------------------------------- */ - -static char sndih_getChannelAvailable__doc__[] = -"" -; - -static PyObject * -sndih_getChannelAvailable(self, args) - PyObject *self; /* Not used */ - PyObject *args; -{ - long inRefNum; - short nchannel; - OSErr err; - - if (!PyArg_ParseTuple(args, "l", &inRefNum)) - return NULL; - - if( (err=SPBGetDeviceInfo(inRefNum, siChannelAvailable, (Ptr)&nchannel)) != noErr ) - return PyMac_Error(err); - return Py_BuildValue("h", nchannel); -} - -static char sndih_getNumberChannels__doc__[] = -"" -; - -static PyObject * -sndih_getNumberChannels(self, args) - PyObject *self; /* Not used */ - PyObject *args; -{ - long inRefNum; - short nchannel; - OSErr err; - - if (!PyArg_ParseTuple(args, "l", &inRefNum)) - return NULL; - - if( (err=SPBGetDeviceInfo(inRefNum, siNumberChannels, (Ptr)&nchannel)) != noErr ) - return PyMac_Error(err); - return Py_BuildValue("h", nchannel); -} - -static char sndih_setNumberChannels__doc__[] = -"" -; - -static PyObject * -sndih_setNumberChannels(self, args) - PyObject *self; /* Not used */ - PyObject *args; -{ - long inRefNum; - short nchannel; - OSErr err; - - if (!PyArg_ParseTuple(args, "lh", &inRefNum, &nchannel)) - return NULL; - - if( (err=SPBSetDeviceInfo(inRefNum, siNumberChannels, (Ptr)&nchannel)) != noErr ) - return PyMac_Error(err); - Py_INCREF(Py_None); - return Py_None; -} - -static char sndih_getContinuous__doc__[] = -"" -; - -static PyObject * -sndih_getContinuous(self, args) - PyObject *self; /* Not used */ - PyObject *args; -{ - long inRefNum; - short onoff; - OSErr err; - - if (!PyArg_ParseTuple(args, "l", &inRefNum)) - return NULL; - - if( (err=SPBGetDeviceInfo(inRefNum, siContinuous, (Ptr)&onoff)) != noErr ) - return PyMac_Error(err); - return Py_BuildValue("h", onoff); -} - -static char sndih_setContinuous__doc__[] = -"" -; - -static PyObject * -sndih_setContinuous(self, args) - PyObject *self; /* Not used */ - PyObject *args; -{ - long inRefNum; - short onoff; - OSErr err; - - if (!PyArg_ParseTuple(args, "lh", &inRefNum, &onoff)) - return NULL; - - if( (err=SPBSetDeviceInfo(inRefNum, siContinuous, (Ptr)&onoff)) != noErr ) - return PyMac_Error(err); - Py_INCREF(Py_None); - return Py_None; -} - -static char sndih_getInputSourceNames__doc__[] = -"" -; - -static PyObject * -sndih_getInputSourceNames(self, args) - PyObject *self; /* Not used */ - PyObject *args; -{ - long inRefNum; - Handle names; - OSErr err; - - if (!PyArg_ParseTuple(args, "l", &inRefNum)) - return NULL; - - if( (err=SPBGetDeviceInfo(inRefNum, siInputSourceNames, (Ptr)&names)) != noErr ) - return PyMac_Error(err); - return Py_BuildValue("O&", ResObj_New, names); -} - -static char sndih_getInputSource__doc__[] = -"" -; - -static PyObject * -sndih_getInputSource(self, args) - PyObject *self; /* Not used */ - PyObject *args; -{ - long inRefNum; - short source; - OSErr err; - - if (!PyArg_ParseTuple(args, "l", &inRefNum)) - return NULL; - - if( (err=SPBGetDeviceInfo(inRefNum, siInputSource, (Ptr)&source)) != noErr ) - return PyMac_Error(err); - return Py_BuildValue("h", source); -} - -static char sndih_setInputSource__doc__[] = -"" -; - -static PyObject * -sndih_setInputSource(self, args) - PyObject *self; /* Not used */ - PyObject *args; -{ - long inRefNum; - short source; - OSErr err; - - if (!PyArg_ParseTuple(args, "lh", &inRefNum, &source)) - return NULL; - - if( (err=SPBSetDeviceInfo(inRefNum, siInputSource, (Ptr)&source)) != noErr ) - return PyMac_Error(err); - Py_INCREF(Py_None); - return Py_None; -} - -static char sndih_getPlayThruOnOff__doc__[] = -"" -; - -static PyObject * -sndih_getPlayThruOnOff(self, args) - PyObject *self; /* Not used */ - PyObject *args; -{ - long inRefNum; - short onoff; - OSErr err; - - if (!PyArg_ParseTuple(args, "l", &inRefNum)) - return NULL; - - if( (err=SPBGetDeviceInfo(inRefNum, siPlayThruOnOff, (Ptr)&onoff)) != noErr ) - return PyMac_Error(err); - return Py_BuildValue("h", onoff); -} - -static char sndih_setPlayThruOnOff__doc__[] = -"" -; - -static PyObject * -sndih_setPlayThruOnOff(self, args) - PyObject *self; /* Not used */ - PyObject *args; -{ - long inRefNum; - short onoff; - OSErr err; - - if (!PyArg_ParseTuple(args, "lh", &inRefNum, &onoff)) - return NULL; - - if( (err=SPBSetDeviceInfo(inRefNum, siPlayThruOnOff, (Ptr)&onoff)) != noErr ) - return PyMac_Error(err); - Py_INCREF(Py_None); - return Py_None; -} - -static char sndih_getSampleRate__doc__[] = -"" -; - -static PyObject * -sndih_getSampleRate(self, args) - PyObject *self; /* Not used */ - PyObject *args; -{ - long inRefNum; - Fixed sample_rate; - OSErr err; - - if (!PyArg_ParseTuple(args, "l", &inRefNum)) - return NULL; - - if( (err=SPBGetDeviceInfo(inRefNum, siSampleRate, (Ptr)&sample_rate)) != noErr ) - return PyMac_Error(err); - return Py_BuildValue("O&", PyMac_BuildUFixed, sample_rate); -} - -static char sndih_setSampleRate__doc__[] = -"" -; - -static PyObject * -sndih_setSampleRate(self, args) - PyObject *self; /* Not used */ - PyObject *args; -{ - long inRefNum; - Fixed sample_rate; - OSErr err; - - if (!PyArg_ParseTuple(args, "lO&", &inRefNum, PyMac_GetUFixed, &sample_rate)) - return NULL; - - if( (err=SPBSetDeviceInfo(inRefNum, siSampleRate, (Ptr)&sample_rate)) != noErr ) - return PyMac_Error(err); - Py_INCREF(Py_None); - return Py_None; -} - -static char sndih_getSampleSize__doc__[] = -"" -; - -static PyObject * -sndih_getSampleSize(self, args) - PyObject *self; /* Not used */ - PyObject *args; -{ - long inRefNum; - short bits; - OSErr err; - - if (!PyArg_ParseTuple(args, "l", &inRefNum)) - return NULL; - - if( (err=SPBGetDeviceInfo(inRefNum, siSampleSize, (Ptr)&bits)) != noErr ) - return PyMac_Error(err); - return Py_BuildValue("h", bits); -} - -static char sndih_setSampleSize__doc__[] = -"" -; - -static PyObject * -sndih_setSampleSize(self, args) - PyObject *self; /* Not used */ - PyObject *args; -{ - long inRefNum; - short size; - OSErr err; - - if (!PyArg_ParseTuple(args, "lh", &inRefNum, &size)) - return NULL; - - if( (err=SPBSetDeviceInfo(inRefNum, siSampleSize, (Ptr)&size)) != noErr ) - return PyMac_Error(err); - Py_INCREF(Py_None); - return Py_None; -} - -static char sndih_getSampleSizeAvailable__doc__[] = -"" -; - -static PyObject * -sndih_getSampleSizeAvailable(self, args) - PyObject *self; /* Not used */ - PyObject *args; -{ - long inRefNum; - struct SampleSizeAvailable_arg arg; - OSErr err; - PyObject *rsizes; - short *fsizes; - int i; - - arg.sizes = NULL; - rsizes = NULL; - if (!PyArg_ParseTuple(args, "l", &inRefNum)) - return NULL; - - if( (err=SPBGetDeviceInfo(inRefNum, siSampleSizeAvailable, (Ptr)&arg)) != noErr ) { - return PyMac_Error(err); - } - fsizes = (short *)*(arg.sizes); - /* Handle contains a list of rates */ - if( (rsizes = PyTuple_New(arg.numsizes)) == NULL) - return NULL; - for( i=0; i<arg.numsizes; i++ ) - PyTuple_SetItem(rsizes, i, PyInt_FromLong((long)fsizes[i])); - return rsizes; -} - -static char sndih_getSampleRateAvailable__doc__[] = -"" -; - -static PyObject * -sndih_getSampleRateAvailable(self, args) - PyObject *self; /* Not used */ - PyObject *args; -{ - long inRefNum; - struct SampleRateAvailable_arg arg; - OSErr err; - PyObject *rrates, *obj; - Fixed *frates; - int i; - - arg.rates = NULL; - rrates = NULL; - if (!PyArg_ParseTuple(args, "l", &inRefNum)) - return NULL; - - if( (err=SPBGetDeviceInfo(inRefNum, siSampleRateAvailable, (Ptr)&arg)) != noErr ) { - return PyMac_Error(err); - } - frates = (Fixed *)*(arg.rates); - if( arg.numrates == 0 ) { - /* The handle contains upper and lowerbound */ - rrates = Py_BuildValue("O&O&", frates[0], frates[1]); - if (rrates == NULL) return NULL; - } else { - /* Handle contains a list of rates */ - if( (rrates = PyTuple_New(arg.numrates)) == NULL) - return NULL; - for( i=0; i<arg.numrates; i++ ) { - if( (obj = Py_BuildValue("O&", PyMac_BuildUFixed, frates[i]))==NULL) - goto out; - PyTuple_SetItem(rrates, i, obj); - } - } - return Py_BuildValue("hO", arg.numrates, rrates); -out: - Py_XDECREF(rrates); - return NULL; -} - -/* List of methods defined in the module */ - -static struct PyMethodDef sndih_methods[] = { - {"getChannelAvailable", (PyCFunction)sndih_getChannelAvailable, METH_VARARGS, sndih_getChannelAvailable__doc__}, - {"getNumberChannels", (PyCFunction)sndih_getNumberChannels, METH_VARARGS, sndih_getNumberChannels__doc__}, - {"setNumberChannels", (PyCFunction)sndih_setNumberChannels, METH_VARARGS, sndih_setNumberChannels__doc__}, - {"getContinuous", (PyCFunction)sndih_getContinuous, METH_VARARGS, sndih_getContinuous__doc__}, - {"setContinuous", (PyCFunction)sndih_setContinuous, METH_VARARGS, sndih_setContinuous__doc__}, - {"getInputSourceNames", (PyCFunction)sndih_getInputSourceNames, METH_VARARGS, sndih_getInputSourceNames__doc__}, - {"getInputSource", (PyCFunction)sndih_getInputSource, METH_VARARGS, sndih_getInputSource__doc__}, - {"setInputSource", (PyCFunction)sndih_setInputSource, METH_VARARGS, sndih_setInputSource__doc__}, - {"getPlayThruOnOff", (PyCFunction)sndih_getPlayThruOnOff, METH_VARARGS, sndih_getPlayThruOnOff__doc__}, - {"setPlayThruOnOff", (PyCFunction)sndih_setPlayThruOnOff, METH_VARARGS, sndih_setPlayThruOnOff__doc__}, - {"getSampleRate", (PyCFunction)sndih_getSampleRate, METH_VARARGS, sndih_getSampleRate__doc__}, - {"setSampleRate", (PyCFunction)sndih_setSampleRate, METH_VARARGS, sndih_setSampleRate__doc__}, - {"getSampleSize", (PyCFunction)sndih_getSampleSize, METH_VARARGS, sndih_getSampleSize__doc__}, - {"setSampleSize", (PyCFunction)sndih_setSampleSize, METH_VARARGS, sndih_setSampleSize__doc__}, - {"getSampleSizeAvailable", (PyCFunction)sndih_getSampleSizeAvailable, METH_VARARGS, sndih_getSampleSizeAvailable__doc__}, - {"getSampleRateAvailable", (PyCFunction)sndih_getSampleRateAvailable, METH_VARARGS, sndih_getSampleRateAvailable__doc__}, - - {NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */ -}; - - -/* Initialization function for the module (*must* be called initSndihooks) */ - -static char Sndihooks_module_documentation[] = -"" -; - -void -initSndihooks() -{ - PyObject *m, *d; - - /* Create the module and add the functions */ - m = Py_InitModule4("Sndihooks", sndih_methods, - Sndihooks_module_documentation, - (PyObject*)NULL,PYTHON_API_VERSION); - - /* Add some symbolic constants to the module */ - d = PyModule_GetDict(m); - ErrorObject = PyString_FromString("Sndihooks.error"); - PyDict_SetItemString(d, "error", ErrorObject); - - /* XXXX Add constants here */ - - /* Check for errors */ - if (PyErr_Occurred()) - Py_FatalError("can't initialize module Sndihooks"); -} - diff --git a/Mac/Modules/snd/Sndmodule.c b/Mac/Modules/snd/Sndmodule.c deleted file mode 100644 index a561a95..0000000 --- a/Mac/Modules/snd/Sndmodule.c +++ /dev/null @@ -1,1454 +0,0 @@ - -/* =========================== Module Snd =========================== */ - -#include "Python.h" - - - -#include "macglue.h" -#include "pymactoolbox.h" - -#ifdef WITHOUT_FRAMEWORKS -#include <Sound.h> -#include <OSUtils.h> /* for Set(Current)A5 */ -#else -#include <Carbon/Carbon.h> -#endif - - -/* Create a SndCommand object (an (int, int, int) tuple) */ -static PyObject * -SndCmd_New(SndCommand *pc) -{ - return Py_BuildValue("hhl", pc->cmd, pc->param1, pc->param2); -} - -/* Convert a SndCommand argument */ -static int -SndCmd_Convert(PyObject *v, SndCommand *pc) -{ - int len; - pc->param1 = 0; - pc->param2 = 0; - if (PyTuple_Check(v)) { - if (PyArg_ParseTuple(v, "h|hl", &pc->cmd, &pc->param1, &pc->param2)) - return 1; - PyErr_Clear(); - return PyArg_ParseTuple(v, "Hhs#", &pc->cmd, &pc->param1, &pc->param2, &len); - } - return PyArg_Parse(v, "H", &pc->cmd); -} - -static pascal void SndCh_UserRoutine(SndChannelPtr chan, SndCommand *cmd); /* Forward */ -static pascal void SPB_completion(SPBPtr my_spb); /* Forward */ -#if !TARGET_API_MAC_CARBON -static pascal void SPB_interrupt(SPBPtr my_spb); /* Forward */ -#endif - -static PyObject *Snd_Error; - -/* --------------------- Object type SndChannel --------------------- */ - -staticforward PyTypeObject SndChannel_Type; - -#define SndCh_Check(x) ((x)->ob_type == &SndChannel_Type) - -typedef struct SndChannelObject { - PyObject_HEAD - SndChannelPtr ob_itself; - /* Members used to implement callbacks: */ - PyObject *ob_callback; - long ob_A5; - SndCommand ob_cmd; -} SndChannelObject; - -static PyObject *SndCh_New(SndChannelPtr itself) -{ - SndChannelObject *it; - it = PyObject_NEW(SndChannelObject, &SndChannel_Type); - if (it == NULL) return NULL; - it->ob_itself = itself; - it->ob_callback = NULL; - it->ob_A5 = SetCurrentA5(); - return (PyObject *)it; -} -static SndCh_Convert(PyObject *v, SndChannelPtr *p_itself) -{ - if (!SndCh_Check(v)) - { - PyErr_SetString(PyExc_TypeError, "SndChannel required"); - return 0; - } - *p_itself = ((SndChannelObject *)v)->ob_itself; - return 1; -} - -static void SndCh_dealloc(SndChannelObject *self) -{ - SndDisposeChannel(self->ob_itself, 1); - Py_XDECREF(self->ob_callback); - PyMem_DEL(self); -} - -static PyObject *SndCh_SndDoCommand(SndChannelObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - SndCommand cmd; - Boolean noWait; - if (!PyArg_ParseTuple(_args, "O&b", - SndCmd_Convert, &cmd, - &noWait)) - return NULL; - _err = SndDoCommand(_self->ob_itself, - &cmd, - noWait); - if (_err != noErr) return PyMac_Error(_err); - Py_INCREF(Py_None); - _res = Py_None; - return _res; -} - -static PyObject *SndCh_SndDoImmediate(SndChannelObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - SndCommand cmd; - if (!PyArg_ParseTuple(_args, "O&", - SndCmd_Convert, &cmd)) - return NULL; - _err = SndDoImmediate(_self->ob_itself, - &cmd); - if (_err != noErr) return PyMac_Error(_err); - Py_INCREF(Py_None); - _res = Py_None; - return _res; -} - -static PyObject *SndCh_SndPlay(SndChannelObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - SndListHandle sndHandle; - Boolean async; - if (!PyArg_ParseTuple(_args, "O&b", - ResObj_Convert, &sndHandle, - &async)) - return NULL; - _err = SndPlay(_self->ob_itself, - sndHandle, - async); - if (_err != noErr) return PyMac_Error(_err); - Py_INCREF(Py_None); - _res = Py_None; - return _res; -} - -#if !TARGET_API_MAC_CARBON - -static PyObject *SndCh_SndStartFilePlay(SndChannelObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - short fRefNum; - short resNum; - long bufferSize; - Boolean async; - if (!PyArg_ParseTuple(_args, "hhlb", - &fRefNum, - &resNum, - &bufferSize, - &async)) - return NULL; - _err = SndStartFilePlay(_self->ob_itself, - fRefNum, - resNum, - bufferSize, - 0, - 0, - 0, - async); - if (_err != noErr) return PyMac_Error(_err); - Py_INCREF(Py_None); - _res = Py_None; - return _res; -} -#endif - -#if !TARGET_API_MAC_CARBON - -static PyObject *SndCh_SndPauseFilePlay(SndChannelObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - if (!PyArg_ParseTuple(_args, "")) - return NULL; - _err = SndPauseFilePlay(_self->ob_itself); - if (_err != noErr) return PyMac_Error(_err); - Py_INCREF(Py_None); - _res = Py_None; - return _res; -} -#endif - -#if !TARGET_API_MAC_CARBON - -static PyObject *SndCh_SndStopFilePlay(SndChannelObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - Boolean quietNow; - if (!PyArg_ParseTuple(_args, "b", - &quietNow)) - return NULL; - _err = SndStopFilePlay(_self->ob_itself, - quietNow); - if (_err != noErr) return PyMac_Error(_err); - Py_INCREF(Py_None); - _res = Py_None; - return _res; -} -#endif - -static PyObject *SndCh_SndChannelStatus(SndChannelObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - short theLength; - SCStatus theStatus__out__; - if (!PyArg_ParseTuple(_args, "h", - &theLength)) - return NULL; - _err = SndChannelStatus(_self->ob_itself, - theLength, - &theStatus__out__); - if (_err != noErr) return PyMac_Error(_err); - _res = Py_BuildValue("s#", - (char *)&theStatus__out__, (int)sizeof(SCStatus)); - theStatus__error__: ; - return _res; -} - -static PyObject *SndCh_SndGetInfo(SndChannelObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - OSType selector; - void * infoPtr; - if (!PyArg_ParseTuple(_args, "O&w", - PyMac_GetOSType, &selector, - &infoPtr)) - return NULL; - _err = SndGetInfo(_self->ob_itself, - selector, - infoPtr); - if (_err != noErr) return PyMac_Error(_err); - Py_INCREF(Py_None); - _res = Py_None; - return _res; -} - -static PyObject *SndCh_SndSetInfo(SndChannelObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - OSType selector; - void * infoPtr; - if (!PyArg_ParseTuple(_args, "O&w", - PyMac_GetOSType, &selector, - &infoPtr)) - return NULL; - _err = SndSetInfo(_self->ob_itself, - selector, - infoPtr); - if (_err != noErr) return PyMac_Error(_err); - Py_INCREF(Py_None); - _res = Py_None; - return _res; -} - -static PyMethodDef SndCh_methods[] = { - {"SndDoCommand", (PyCFunction)SndCh_SndDoCommand, 1, - "(SndCommand cmd, Boolean noWait) -> None"}, - {"SndDoImmediate", (PyCFunction)SndCh_SndDoImmediate, 1, - "(SndCommand cmd) -> None"}, - {"SndPlay", (PyCFunction)SndCh_SndPlay, 1, - "(SndListHandle sndHandle, Boolean async) -> None"}, - -#if !TARGET_API_MAC_CARBON - {"SndStartFilePlay", (PyCFunction)SndCh_SndStartFilePlay, 1, - "(short fRefNum, short resNum, long bufferSize, Boolean async) -> None"}, -#endif - -#if !TARGET_API_MAC_CARBON - {"SndPauseFilePlay", (PyCFunction)SndCh_SndPauseFilePlay, 1, - "() -> None"}, -#endif - -#if !TARGET_API_MAC_CARBON - {"SndStopFilePlay", (PyCFunction)SndCh_SndStopFilePlay, 1, - "(Boolean quietNow) -> None"}, -#endif - {"SndChannelStatus", (PyCFunction)SndCh_SndChannelStatus, 1, - "(short theLength) -> (SCStatus theStatus)"}, - {"SndGetInfo", (PyCFunction)SndCh_SndGetInfo, 1, - "(OSType selector, void * infoPtr) -> None"}, - {"SndSetInfo", (PyCFunction)SndCh_SndSetInfo, 1, - "(OSType selector, void * infoPtr) -> None"}, - {NULL, NULL, 0} -}; - -static PyMethodChain SndCh_chain = { SndCh_methods, NULL }; - -static PyObject *SndCh_getattr(SndChannelObject *self, char *name) -{ - return Py_FindMethodInChain(&SndCh_chain, (PyObject *)self, name); -} - -#define SndCh_setattr NULL - -#define SndCh_compare NULL - -#define SndCh_repr NULL - -#define SndCh_hash NULL - -staticforward PyTypeObject SndChannel_Type = { - PyObject_HEAD_INIT(&PyType_Type) - 0, /*ob_size*/ - "SndChannel", /*tp_name*/ - sizeof(SndChannelObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - (destructor) SndCh_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc) SndCh_getattr, /*tp_getattr*/ - (setattrfunc) SndCh_setattr, /*tp_setattr*/ - (cmpfunc) SndCh_compare, /*tp_compare*/ - (reprfunc) SndCh_repr, /*tp_repr*/ - (PyNumberMethods *)0, /* tp_as_number */ - (PySequenceMethods *)0, /* tp_as_sequence */ - (PyMappingMethods *)0, /* tp_as_mapping */ - (hashfunc) SndCh_hash, /*tp_hash*/ -}; - -/* ------------------- End object type SndChannel ------------------- */ - - -/* ------------------------ Object type SPB ------------------------- */ - -staticforward PyTypeObject SPB_Type; - -#define SPBObj_Check(x) ((x)->ob_type == &SPB_Type) - -typedef struct SPBObject { - PyObject_HEAD - /* Members used to implement callbacks: */ - PyObject *ob_completion; - PyObject *ob_interrupt; - PyObject *ob_thiscallback; - long ob_A5; - SPB ob_spb; -} SPBObject; - -static PyObject *SPBObj_New(void) -{ - SPBObject *it; - it = PyObject_NEW(SPBObject, &SPB_Type); - if (it == NULL) return NULL; - it->ob_completion = NULL; - it->ob_interrupt = NULL; - it->ob_thiscallback = NULL; - it->ob_A5 = SetCurrentA5(); - memset((char *)&it->ob_spb, 0, sizeof(it->ob_spb)); - it->ob_spb.userLong = (long)it; - return (PyObject *)it; -} -static SPBObj_Convert(PyObject *v, SPBPtr *p_itself) -{ - if (!SPBObj_Check(v)) - { - PyErr_SetString(PyExc_TypeError, "SPB required"); - return 0; - } - *p_itself = &((SPBObject *)v)->ob_spb; - return 1; -} - -static void SPBObj_dealloc(SPBObject *self) -{ - /* Cleanup of self->ob_itself goes here */ - self->ob_spb.userLong = 0; - self->ob_thiscallback = 0; - Py_XDECREF(self->ob_completion); - Py_XDECREF(self->ob_interrupt); - PyMem_DEL(self); -} - -static PyMethodDef SPBObj_methods[] = { - {NULL, NULL, 0} -}; - -static PyMethodChain SPBObj_chain = { SPBObj_methods, NULL }; - -static PyObject *SPBObj_getattr(SPBObject *self, char *name) -{ - - if (strcmp(name, "inRefNum") == 0) - return Py_BuildValue("l", self->ob_spb.inRefNum); - else if (strcmp(name, "count") == 0) - return Py_BuildValue("l", self->ob_spb.count); - else if (strcmp(name, "milliseconds") == 0) - return Py_BuildValue("l", self->ob_spb.milliseconds); - else if (strcmp(name, "error") == 0) - return Py_BuildValue("h", self->ob_spb.error); - return Py_FindMethodInChain(&SPBObj_chain, (PyObject *)self, name); -} - -static int SPBObj_setattr(SPBObject *self, char *name, PyObject *value) -{ - - int rv = 0; - - if (strcmp(name, "inRefNum") == 0) - rv = PyArg_Parse(value, "l", &self->ob_spb.inRefNum); - else if (strcmp(name, "count") == 0) - rv = PyArg_Parse(value, "l", &self->ob_spb.count); - else if (strcmp(name, "milliseconds") == 0) - rv = PyArg_Parse(value, "l", &self->ob_spb.milliseconds); - else if (strcmp(name, "buffer") == 0) - rv = PyArg_Parse(value, "w#", &self->ob_spb.bufferPtr, &self->ob_spb.bufferLength); - else if (strcmp(name, "completionRoutine") == 0) { - self->ob_spb.completionRoutine = NewSICompletionUPP(SPB_completion); - self->ob_completion = value; - Py_INCREF(value); - rv = 1; -#if !TARGET_API_MAC_CARBON - } else if (strcmp(name, "interruptRoutine") == 0) { - self->ob_spb.completionRoutine = NewSIInterruptUPP(SPB_interrupt); - self->ob_interrupt = value; - Py_INCREF(value); - rv = 1; -#endif - } - if ( rv ) return 0; - else return -1; -} - -#define SPBObj_compare NULL - -#define SPBObj_repr NULL - -#define SPBObj_hash NULL - -staticforward PyTypeObject SPB_Type = { - PyObject_HEAD_INIT(&PyType_Type) - 0, /*ob_size*/ - "SPB", /*tp_name*/ - sizeof(SPBObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - (destructor) SPBObj_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc) SPBObj_getattr, /*tp_getattr*/ - (setattrfunc) SPBObj_setattr, /*tp_setattr*/ - (cmpfunc) SPBObj_compare, /*tp_compare*/ - (reprfunc) SPBObj_repr, /*tp_repr*/ - (PyNumberMethods *)0, /* tp_as_number */ - (PySequenceMethods *)0, /* tp_as_sequence */ - (PyMappingMethods *)0, /* tp_as_mapping */ - (hashfunc) SPBObj_hash, /*tp_hash*/ -}; - -/* ---------------------- End object type SPB ----------------------- */ - - -static PyObject *Snd_SPB(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - return SPBObj_New(); -} - -static PyObject *Snd_SysBeep(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - short duration; - if (!PyArg_ParseTuple(_args, "h", - &duration)) - return NULL; - SysBeep(duration); - Py_INCREF(Py_None); - _res = Py_None; - return _res; -} - -static PyObject *Snd_SndNewChannel(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - SndChannelPtr chan = 0; - short synth; - long init; - PyObject* userRoutine; - if (!PyArg_ParseTuple(_args, "hlO", - &synth, - &init, - &userRoutine)) - return NULL; - if (userRoutine != Py_None && !PyCallable_Check(userRoutine)) - { - PyErr_SetString(PyExc_TypeError, "callback must be callable"); - goto userRoutine__error__; - } - _err = SndNewChannel(&chan, - synth, - init, - NewSndCallBackUPP(SndCh_UserRoutine)); - if (_err != noErr) return PyMac_Error(_err); - _res = Py_BuildValue("O&", - SndCh_New, chan); - if (_res != NULL && userRoutine != Py_None) - { - SndChannelObject *p = (SndChannelObject *)_res; - p->ob_itself->userInfo = (long)p; - Py_INCREF(userRoutine); - p->ob_callback = userRoutine; - } - userRoutine__error__: ; - return _res; -} - -#if !TARGET_API_MAC_CARBON - -static PyObject *Snd_SndControl(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - short id; - SndCommand cmd; - if (!PyArg_ParseTuple(_args, "h", - &id)) - return NULL; - _err = SndControl(id, - &cmd); - if (_err != noErr) return PyMac_Error(_err); - _res = Py_BuildValue("O&", - SndCmd_New, &cmd); - return _res; -} -#endif - -static PyObject *Snd_SndSoundManagerVersion(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - NumVersion _rv; - if (!PyArg_ParseTuple(_args, "")) - return NULL; - _rv = SndSoundManagerVersion(); - _res = Py_BuildValue("O&", - PyMac_BuildNumVersion, _rv); - return _res; -} - -static PyObject *Snd_SndManagerStatus(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - short theLength; - SMStatus theStatus__out__; - if (!PyArg_ParseTuple(_args, "h", - &theLength)) - return NULL; - _err = SndManagerStatus(theLength, - &theStatus__out__); - if (_err != noErr) return PyMac_Error(_err); - _res = Py_BuildValue("s#", - (char *)&theStatus__out__, (int)sizeof(SMStatus)); - theStatus__error__: ; - return _res; -} - -static PyObject *Snd_SndGetSysBeepState(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - short sysBeepState; - if (!PyArg_ParseTuple(_args, "")) - return NULL; - SndGetSysBeepState(&sysBeepState); - _res = Py_BuildValue("h", - sysBeepState); - return _res; -} - -static PyObject *Snd_SndSetSysBeepState(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - short sysBeepState; - if (!PyArg_ParseTuple(_args, "h", - &sysBeepState)) - return NULL; - _err = SndSetSysBeepState(sysBeepState); - if (_err != noErr) return PyMac_Error(_err); - Py_INCREF(Py_None); - _res = Py_None; - return _res; -} - -#if !TARGET_API_MAC_CARBON - -static PyObject *Snd_MACEVersion(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - NumVersion _rv; - if (!PyArg_ParseTuple(_args, "")) - return NULL; - _rv = MACEVersion(); - _res = Py_BuildValue("O&", - PyMac_BuildNumVersion, _rv); - return _res; -} -#endif - -#if !TARGET_API_MAC_CARBON - -static PyObject *Snd_Comp3to1(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - char *buffer__in__; - char *buffer__out__; - long buffer__len__; - int buffer__in_len__; - StateBlock *state__in__; - StateBlock state__out__; - int state__in_len__; - unsigned long numChannels; - unsigned long whichChannel; - if (!PyArg_ParseTuple(_args, "s#s#ll", - &buffer__in__, &buffer__in_len__, - (char **)&state__in__, &state__in_len__, - &numChannels, - &whichChannel)) - return NULL; - if ((buffer__out__ = malloc(buffer__in_len__)) == NULL) - { - PyErr_NoMemory(); - goto buffer__error__; - } - buffer__len__ = buffer__in_len__; - if (state__in_len__ != sizeof(StateBlock)) - { - PyErr_SetString(PyExc_TypeError, "buffer length should be sizeof(StateBlock)"); - goto state__error__; - } - Comp3to1(buffer__in__, buffer__out__, (long)buffer__len__, - state__in__, &state__out__, - numChannels, - whichChannel); - _res = Py_BuildValue("s#s#", - buffer__out__, (int)buffer__len__, - (char *)&state__out__, (int)sizeof(StateBlock)); - state__error__: ; - free(buffer__out__); - buffer__error__: ; - return _res; -} -#endif - -#if !TARGET_API_MAC_CARBON - -static PyObject *Snd_Exp1to3(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - char *buffer__in__; - char *buffer__out__; - long buffer__len__; - int buffer__in_len__; - StateBlock *state__in__; - StateBlock state__out__; - int state__in_len__; - unsigned long numChannels; - unsigned long whichChannel; - if (!PyArg_ParseTuple(_args, "s#s#ll", - &buffer__in__, &buffer__in_len__, - (char **)&state__in__, &state__in_len__, - &numChannels, - &whichChannel)) - return NULL; - if ((buffer__out__ = malloc(buffer__in_len__)) == NULL) - { - PyErr_NoMemory(); - goto buffer__error__; - } - buffer__len__ = buffer__in_len__; - if (state__in_len__ != sizeof(StateBlock)) - { - PyErr_SetString(PyExc_TypeError, "buffer length should be sizeof(StateBlock)"); - goto state__error__; - } - Exp1to3(buffer__in__, buffer__out__, (long)buffer__len__, - state__in__, &state__out__, - numChannels, - whichChannel); - _res = Py_BuildValue("s#s#", - buffer__out__, (int)buffer__len__, - (char *)&state__out__, (int)sizeof(StateBlock)); - state__error__: ; - free(buffer__out__); - buffer__error__: ; - return _res; -} -#endif - -#if !TARGET_API_MAC_CARBON - -static PyObject *Snd_Comp6to1(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - char *buffer__in__; - char *buffer__out__; - long buffer__len__; - int buffer__in_len__; - StateBlock *state__in__; - StateBlock state__out__; - int state__in_len__; - unsigned long numChannels; - unsigned long whichChannel; - if (!PyArg_ParseTuple(_args, "s#s#ll", - &buffer__in__, &buffer__in_len__, - (char **)&state__in__, &state__in_len__, - &numChannels, - &whichChannel)) - return NULL; - if ((buffer__out__ = malloc(buffer__in_len__)) == NULL) - { - PyErr_NoMemory(); - goto buffer__error__; - } - buffer__len__ = buffer__in_len__; - if (state__in_len__ != sizeof(StateBlock)) - { - PyErr_SetString(PyExc_TypeError, "buffer length should be sizeof(StateBlock)"); - goto state__error__; - } - Comp6to1(buffer__in__, buffer__out__, (long)buffer__len__, - state__in__, &state__out__, - numChannels, - whichChannel); - _res = Py_BuildValue("s#s#", - buffer__out__, (int)buffer__len__, - (char *)&state__out__, (int)sizeof(StateBlock)); - state__error__: ; - free(buffer__out__); - buffer__error__: ; - return _res; -} -#endif - -#if !TARGET_API_MAC_CARBON - -static PyObject *Snd_Exp1to6(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - char *buffer__in__; - char *buffer__out__; - long buffer__len__; - int buffer__in_len__; - StateBlock *state__in__; - StateBlock state__out__; - int state__in_len__; - unsigned long numChannels; - unsigned long whichChannel; - if (!PyArg_ParseTuple(_args, "s#s#ll", - &buffer__in__, &buffer__in_len__, - (char **)&state__in__, &state__in_len__, - &numChannels, - &whichChannel)) - return NULL; - if ((buffer__out__ = malloc(buffer__in_len__)) == NULL) - { - PyErr_NoMemory(); - goto buffer__error__; - } - buffer__len__ = buffer__in_len__; - if (state__in_len__ != sizeof(StateBlock)) - { - PyErr_SetString(PyExc_TypeError, "buffer length should be sizeof(StateBlock)"); - goto state__error__; - } - Exp1to6(buffer__in__, buffer__out__, (long)buffer__len__, - state__in__, &state__out__, - numChannels, - whichChannel); - _res = Py_BuildValue("s#s#", - buffer__out__, (int)buffer__len__, - (char *)&state__out__, (int)sizeof(StateBlock)); - state__error__: ; - free(buffer__out__); - buffer__error__: ; - return _res; -} -#endif - -static PyObject *Snd_GetSysBeepVolume(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - long level; - if (!PyArg_ParseTuple(_args, "")) - return NULL; - _err = GetSysBeepVolume(&level); - if (_err != noErr) return PyMac_Error(_err); - _res = Py_BuildValue("l", - level); - return _res; -} - -static PyObject *Snd_SetSysBeepVolume(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - long level; - if (!PyArg_ParseTuple(_args, "l", - &level)) - return NULL; - _err = SetSysBeepVolume(level); - if (_err != noErr) return PyMac_Error(_err); - Py_INCREF(Py_None); - _res = Py_None; - return _res; -} - -static PyObject *Snd_GetDefaultOutputVolume(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - long level; - if (!PyArg_ParseTuple(_args, "")) - return NULL; - _err = GetDefaultOutputVolume(&level); - if (_err != noErr) return PyMac_Error(_err); - _res = Py_BuildValue("l", - level); - return _res; -} - -static PyObject *Snd_SetDefaultOutputVolume(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - long level; - if (!PyArg_ParseTuple(_args, "l", - &level)) - return NULL; - _err = SetDefaultOutputVolume(level); - if (_err != noErr) return PyMac_Error(_err); - Py_INCREF(Py_None); - _res = Py_None; - return _res; -} - -static PyObject *Snd_GetSoundHeaderOffset(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - SndListHandle sndHandle; - long offset; - if (!PyArg_ParseTuple(_args, "O&", - ResObj_Convert, &sndHandle)) - return NULL; - _err = GetSoundHeaderOffset(sndHandle, - &offset); - if (_err != noErr) return PyMac_Error(_err); - _res = Py_BuildValue("l", - offset); - return _res; -} - -static PyObject *Snd_GetCompressionInfo(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - short compressionID; - OSType format; - short numChannels; - short sampleSize; - CompressionInfo cp__out__; - if (!PyArg_ParseTuple(_args, "hO&hh", - &compressionID, - PyMac_GetOSType, &format, - &numChannels, - &sampleSize)) - return NULL; - _err = GetCompressionInfo(compressionID, - format, - numChannels, - sampleSize, - &cp__out__); - if (_err != noErr) return PyMac_Error(_err); - _res = Py_BuildValue("s#", - (char *)&cp__out__, (int)sizeof(CompressionInfo)); - cp__error__: ; - return _res; -} - -static PyObject *Snd_SetSoundPreference(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - OSType theType; - Str255 name; - Handle settings; - if (!PyArg_ParseTuple(_args, "O&O&", - PyMac_GetOSType, &theType, - ResObj_Convert, &settings)) - return NULL; - _err = SetSoundPreference(theType, - name, - settings); - if (_err != noErr) return PyMac_Error(_err); - _res = Py_BuildValue("O&", - PyMac_BuildStr255, name); - return _res; -} - -static PyObject *Snd_GetSoundPreference(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - OSType theType; - Str255 name; - Handle settings; - if (!PyArg_ParseTuple(_args, "O&O&", - PyMac_GetOSType, &theType, - ResObj_Convert, &settings)) - return NULL; - _err = GetSoundPreference(theType, - name, - settings); - if (_err != noErr) return PyMac_Error(_err); - _res = Py_BuildValue("O&", - PyMac_BuildStr255, name); - return _res; -} - -static PyObject *Snd_GetCompressionName(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - OSType compressionType; - Str255 compressionName; - if (!PyArg_ParseTuple(_args, "O&", - PyMac_GetOSType, &compressionType)) - return NULL; - _err = GetCompressionName(compressionType, - compressionName); - if (_err != noErr) return PyMac_Error(_err); - _res = Py_BuildValue("O&", - PyMac_BuildStr255, compressionName); - return _res; -} - -static PyObject *Snd_SPBVersion(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - NumVersion _rv; - if (!PyArg_ParseTuple(_args, "")) - return NULL; - _rv = SPBVersion(); - _res = Py_BuildValue("O&", - PyMac_BuildNumVersion, _rv); - return _res; -} - -static PyObject *Snd_SPBSignInDevice(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - short deviceRefNum; - Str255 deviceName; - if (!PyArg_ParseTuple(_args, "hO&", - &deviceRefNum, - PyMac_GetStr255, deviceName)) - return NULL; - _err = SPBSignInDevice(deviceRefNum, - deviceName); - if (_err != noErr) return PyMac_Error(_err); - Py_INCREF(Py_None); - _res = Py_None; - return _res; -} - -static PyObject *Snd_SPBSignOutDevice(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - short deviceRefNum; - if (!PyArg_ParseTuple(_args, "h", - &deviceRefNum)) - return NULL; - _err = SPBSignOutDevice(deviceRefNum); - if (_err != noErr) return PyMac_Error(_err); - Py_INCREF(Py_None); - _res = Py_None; - return _res; -} - -static PyObject *Snd_SPBGetIndexedDevice(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - short count; - Str255 deviceName; - Handle deviceIconHandle; - if (!PyArg_ParseTuple(_args, "h", - &count)) - return NULL; - _err = SPBGetIndexedDevice(count, - deviceName, - &deviceIconHandle); - if (_err != noErr) return PyMac_Error(_err); - _res = Py_BuildValue("O&O&", - PyMac_BuildStr255, deviceName, - ResObj_New, deviceIconHandle); - return _res; -} - -static PyObject *Snd_SPBOpenDevice(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - Str255 deviceName; - short permission; - long inRefNum; - if (!PyArg_ParseTuple(_args, "O&h", - PyMac_GetStr255, deviceName, - &permission)) - return NULL; - _err = SPBOpenDevice(deviceName, - permission, - &inRefNum); - if (_err != noErr) return PyMac_Error(_err); - _res = Py_BuildValue("l", - inRefNum); - return _res; -} - -static PyObject *Snd_SPBCloseDevice(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - long inRefNum; - if (!PyArg_ParseTuple(_args, "l", - &inRefNum)) - return NULL; - _err = SPBCloseDevice(inRefNum); - if (_err != noErr) return PyMac_Error(_err); - Py_INCREF(Py_None); - _res = Py_None; - return _res; -} - -static PyObject *Snd_SPBRecord(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - SPBPtr inParamPtr; - Boolean asynchFlag; - if (!PyArg_ParseTuple(_args, "O&b", - SPBObj_Convert, &inParamPtr, - &asynchFlag)) - return NULL; - _err = SPBRecord(inParamPtr, - asynchFlag); - if (_err != noErr) return PyMac_Error(_err); - Py_INCREF(Py_None); - _res = Py_None; - return _res; -} - -#if !TARGET_API_MAC_CARBON - -static PyObject *Snd_SPBRecordToFile(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - short fRefNum; - SPBPtr inParamPtr; - Boolean asynchFlag; - if (!PyArg_ParseTuple(_args, "hO&b", - &fRefNum, - SPBObj_Convert, &inParamPtr, - &asynchFlag)) - return NULL; - _err = SPBRecordToFile(fRefNum, - inParamPtr, - asynchFlag); - if (_err != noErr) return PyMac_Error(_err); - Py_INCREF(Py_None); - _res = Py_None; - return _res; -} -#endif - -static PyObject *Snd_SPBPauseRecording(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - long inRefNum; - if (!PyArg_ParseTuple(_args, "l", - &inRefNum)) - return NULL; - _err = SPBPauseRecording(inRefNum); - if (_err != noErr) return PyMac_Error(_err); - Py_INCREF(Py_None); - _res = Py_None; - return _res; -} - -static PyObject *Snd_SPBResumeRecording(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - long inRefNum; - if (!PyArg_ParseTuple(_args, "l", - &inRefNum)) - return NULL; - _err = SPBResumeRecording(inRefNum); - if (_err != noErr) return PyMac_Error(_err); - Py_INCREF(Py_None); - _res = Py_None; - return _res; -} - -static PyObject *Snd_SPBStopRecording(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - long inRefNum; - if (!PyArg_ParseTuple(_args, "l", - &inRefNum)) - return NULL; - _err = SPBStopRecording(inRefNum); - if (_err != noErr) return PyMac_Error(_err); - Py_INCREF(Py_None); - _res = Py_None; - return _res; -} - -static PyObject *Snd_SPBGetRecordingStatus(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - long inRefNum; - short recordingStatus; - short meterLevel; - unsigned long totalSamplesToRecord; - unsigned long numberOfSamplesRecorded; - unsigned long totalMsecsToRecord; - unsigned long numberOfMsecsRecorded; - if (!PyArg_ParseTuple(_args, "l", - &inRefNum)) - return NULL; - _err = SPBGetRecordingStatus(inRefNum, - &recordingStatus, - &meterLevel, - &totalSamplesToRecord, - &numberOfSamplesRecorded, - &totalMsecsToRecord, - &numberOfMsecsRecorded); - if (_err != noErr) return PyMac_Error(_err); - _res = Py_BuildValue("hhllll", - recordingStatus, - meterLevel, - totalSamplesToRecord, - numberOfSamplesRecorded, - totalMsecsToRecord, - numberOfMsecsRecorded); - return _res; -} - -static PyObject *Snd_SPBGetDeviceInfo(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - long inRefNum; - OSType infoType; - void * infoData; - if (!PyArg_ParseTuple(_args, "lO&w", - &inRefNum, - PyMac_GetOSType, &infoType, - &infoData)) - return NULL; - _err = SPBGetDeviceInfo(inRefNum, - infoType, - infoData); - if (_err != noErr) return PyMac_Error(_err); - Py_INCREF(Py_None); - _res = Py_None; - return _res; -} - -static PyObject *Snd_SPBSetDeviceInfo(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - long inRefNum; - OSType infoType; - void * infoData; - if (!PyArg_ParseTuple(_args, "lO&w", - &inRefNum, - PyMac_GetOSType, &infoType, - &infoData)) - return NULL; - _err = SPBSetDeviceInfo(inRefNum, - infoType, - infoData); - if (_err != noErr) return PyMac_Error(_err); - Py_INCREF(Py_None); - _res = Py_None; - return _res; -} - -static PyObject *Snd_SPBMillisecondsToBytes(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - long inRefNum; - long milliseconds; - if (!PyArg_ParseTuple(_args, "l", - &inRefNum)) - return NULL; - _err = SPBMillisecondsToBytes(inRefNum, - &milliseconds); - if (_err != noErr) return PyMac_Error(_err); - _res = Py_BuildValue("l", - milliseconds); - return _res; -} - -static PyObject *Snd_SPBBytesToMilliseconds(PyObject *_self, PyObject *_args) -{ - PyObject *_res = NULL; - OSErr _err; - long inRefNum; - long byteCount; - if (!PyArg_ParseTuple(_args, "l", - &inRefNum)) - return NULL; - _err = SPBBytesToMilliseconds(inRefNum, - &byteCount); - if (_err != noErr) return PyMac_Error(_err); - _res = Py_BuildValue("l", - byteCount); - return _res; -} - -static PyMethodDef Snd_methods[] = { - {"SPB", (PyCFunction)Snd_SPB, 1, - NULL}, - {"SysBeep", (PyCFunction)Snd_SysBeep, 1, - "(short duration) -> None"}, - {"SndNewChannel", (PyCFunction)Snd_SndNewChannel, 1, - "(short synth, long init, PyObject* userRoutine) -> (SndChannelPtr chan)"}, - -#if !TARGET_API_MAC_CARBON - {"SndControl", (PyCFunction)Snd_SndControl, 1, - "(short id) -> (SndCommand cmd)"}, -#endif - {"SndSoundManagerVersion", (PyCFunction)Snd_SndSoundManagerVersion, 1, - "() -> (NumVersion _rv)"}, - {"SndManagerStatus", (PyCFunction)Snd_SndManagerStatus, 1, - "(short theLength) -> (SMStatus theStatus)"}, - {"SndGetSysBeepState", (PyCFunction)Snd_SndGetSysBeepState, 1, - "() -> (short sysBeepState)"}, - {"SndSetSysBeepState", (PyCFunction)Snd_SndSetSysBeepState, 1, - "(short sysBeepState) -> None"}, - -#if !TARGET_API_MAC_CARBON - {"MACEVersion", (PyCFunction)Snd_MACEVersion, 1, - "() -> (NumVersion _rv)"}, -#endif - -#if !TARGET_API_MAC_CARBON - {"Comp3to1", (PyCFunction)Snd_Comp3to1, 1, - "(Buffer buffer, StateBlock state, unsigned long numChannels, unsigned long whichChannel) -> (Buffer buffer, StateBlock state)"}, -#endif - -#if !TARGET_API_MAC_CARBON - {"Exp1to3", (PyCFunction)Snd_Exp1to3, 1, - "(Buffer buffer, StateBlock state, unsigned long numChannels, unsigned long whichChannel) -> (Buffer buffer, StateBlock state)"}, -#endif - -#if !TARGET_API_MAC_CARBON - {"Comp6to1", (PyCFunction)Snd_Comp6to1, 1, - "(Buffer buffer, StateBlock state, unsigned long numChannels, unsigned long whichChannel) -> (Buffer buffer, StateBlock state)"}, -#endif - -#if !TARGET_API_MAC_CARBON - {"Exp1to6", (PyCFunction)Snd_Exp1to6, 1, - "(Buffer buffer, StateBlock state, unsigned long numChannels, unsigned long whichChannel) -> (Buffer buffer, StateBlock state)"}, -#endif - {"GetSysBeepVolume", (PyCFunction)Snd_GetSysBeepVolume, 1, - "() -> (long level)"}, - {"SetSysBeepVolume", (PyCFunction)Snd_SetSysBeepVolume, 1, - "(long level) -> None"}, - {"GetDefaultOutputVolume", (PyCFunction)Snd_GetDefaultOutputVolume, 1, - "() -> (long level)"}, - {"SetDefaultOutputVolume", (PyCFunction)Snd_SetDefaultOutputVolume, 1, - "(long level) -> None"}, - {"GetSoundHeaderOffset", (PyCFunction)Snd_GetSoundHeaderOffset, 1, - "(SndListHandle sndHandle) -> (long offset)"}, - {"GetCompressionInfo", (PyCFunction)Snd_GetCompressionInfo, 1, - "(short compressionID, OSType format, short numChannels, short sampleSize) -> (CompressionInfo cp)"}, - {"SetSoundPreference", (PyCFunction)Snd_SetSoundPreference, 1, - "(OSType theType, Handle settings) -> (Str255 name)"}, - {"GetSoundPreference", (PyCFunction)Snd_GetSoundPreference, 1, - "(OSType theType, Handle settings) -> (Str255 name)"}, - {"GetCompressionName", (PyCFunction)Snd_GetCompressionName, 1, - "(OSType compressionType) -> (Str255 compressionName)"}, - {"SPBVersion", (PyCFunction)Snd_SPBVersion, 1, - "() -> (NumVersion _rv)"}, - {"SPBSignInDevice", (PyCFunction)Snd_SPBSignInDevice, 1, - "(short deviceRefNum, Str255 deviceName) -> None"}, - {"SPBSignOutDevice", (PyCFunction)Snd_SPBSignOutDevice, 1, - "(short deviceRefNum) -> None"}, - {"SPBGetIndexedDevice", (PyCFunction)Snd_SPBGetIndexedDevice, 1, - "(short count) -> (Str255 deviceName, Handle deviceIconHandle)"}, - {"SPBOpenDevice", (PyCFunction)Snd_SPBOpenDevice, 1, - "(Str255 deviceName, short permission) -> (long inRefNum)"}, - {"SPBCloseDevice", (PyCFunction)Snd_SPBCloseDevice, 1, - "(long inRefNum) -> None"}, - {"SPBRecord", (PyCFunction)Snd_SPBRecord, 1, - "(SPBPtr inParamPtr, Boolean asynchFlag) -> None"}, - -#if !TARGET_API_MAC_CARBON - {"SPBRecordToFile", (PyCFunction)Snd_SPBRecordToFile, 1, - "(short fRefNum, SPBPtr inParamPtr, Boolean asynchFlag) -> None"}, -#endif - {"SPBPauseRecording", (PyCFunction)Snd_SPBPauseRecording, 1, - "(long inRefNum) -> None"}, - {"SPBResumeRecording", (PyCFunction)Snd_SPBResumeRecording, 1, - "(long inRefNum) -> None"}, - {"SPBStopRecording", (PyCFunction)Snd_SPBStopRecording, 1, - "(long inRefNum) -> None"}, - {"SPBGetRecordingStatus", (PyCFunction)Snd_SPBGetRecordingStatus, 1, - "(long inRefNum) -> (short recordingStatus, short meterLevel, unsigned long totalSamplesToRecord, unsigned long numberOfSamplesRecorded, unsigned long totalMsecsToRecord, unsigned long numberOfMsecsRecorded)"}, - {"SPBGetDeviceInfo", (PyCFunction)Snd_SPBGetDeviceInfo, 1, - "(long inRefNum, OSType infoType, void * infoData) -> None"}, - {"SPBSetDeviceInfo", (PyCFunction)Snd_SPBSetDeviceInfo, 1, - "(long inRefNum, OSType infoType, void * infoData) -> None"}, - {"SPBMillisecondsToBytes", (PyCFunction)Snd_SPBMillisecondsToBytes, 1, - "(long inRefNum) -> (long milliseconds)"}, - {"SPBBytesToMilliseconds", (PyCFunction)Snd_SPBBytesToMilliseconds, 1, - "(long inRefNum) -> (long byteCount)"}, - {NULL, NULL, 0} -}; - - - -/* Routine passed to Py_AddPendingCall -- call the Python callback */ -static int -SndCh_CallCallBack(void *arg) -{ - SndChannelObject *p = (SndChannelObject *)arg; - PyObject *args; - PyObject *res; - args = Py_BuildValue("(O(hhl))", - p, p->ob_cmd.cmd, p->ob_cmd.param1, p->ob_cmd.param2); - res = PyEval_CallObject(p->ob_callback, args); - Py_DECREF(args); - if (res == NULL) - return -1; - Py_DECREF(res); - return 0; -} - -/* Routine passed to NewSndChannel -- schedule a call to SndCh_CallCallBack */ -static pascal void -SndCh_UserRoutine(SndChannelPtr chan, SndCommand *cmd) -{ - SndChannelObject *p = (SndChannelObject *)(chan->userInfo); - if (p->ob_callback != NULL) { - long A5 = SetA5(p->ob_A5); - p->ob_cmd = *cmd; - Py_AddPendingCall(SndCh_CallCallBack, (void *)p); - SetA5(A5); - } -} - -/* SPB callbacks - Schedule callbacks to Python */ -static int -SPB_CallCallBack(void *arg) -{ - SPBObject *p = (SPBObject *)arg; - PyObject *args; - PyObject *res; - - if ( p->ob_thiscallback == 0 ) return 0; - args = Py_BuildValue("(O)", p); - res = PyEval_CallObject(p->ob_thiscallback, args); - p->ob_thiscallback = 0; - Py_DECREF(args); - if (res == NULL) - return -1; - Py_DECREF(res); - return 0; -} - -static pascal void -SPB_completion(SPBPtr my_spb) -{ - SPBObject *p = (SPBObject *)(my_spb->userLong); - - if (p && p->ob_completion) { - long A5 = SetA5(p->ob_A5); - p->ob_thiscallback = p->ob_completion; /* Hope we cannot get two at the same time */ - Py_AddPendingCall(SPB_CallCallBack, (void *)p); - SetA5(A5); - } -} - -#if !TARGET_API_MAC_CARBON -static pascal void -SPB_interrupt(SPBPtr my_spb) -{ - SPBObject *p = (SPBObject *)(my_spb->userLong); - - if (p && p->ob_interrupt) { - long A5 = SetA5(p->ob_A5); - p->ob_thiscallback = p->ob_interrupt; /* Hope we cannot get two at the same time */ - Py_AddPendingCall(SPB_CallCallBack, (void *)p); - SetA5(A5); - } -} -#endif - - -void initSnd(void) -{ - PyObject *m; - PyObject *d; - - - - - - m = Py_InitModule("Snd", Snd_methods); - d = PyModule_GetDict(m); - Snd_Error = PyMac_GetOSErrException(); - if (Snd_Error == NULL || - PyDict_SetItemString(d, "Error", Snd_Error) != 0) - return; - SndChannel_Type.ob_type = &PyType_Type; - Py_INCREF(&SndChannel_Type); - if (PyDict_SetItemString(d, "SndChannelType", (PyObject *)&SndChannel_Type) != 0) - Py_FatalError("can't initialize SndChannelType"); - SPB_Type.ob_type = &PyType_Type; - Py_INCREF(&SPB_Type); - if (PyDict_SetItemString(d, "SPBType", (PyObject *)&SPB_Type) != 0) - Py_FatalError("can't initialize SPBType"); -} - -/* ========================= End module Snd ========================= */ - |