mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	
		
			
	
	
		
			514 lines
		
	
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			514 lines
		
	
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/***********************************************************
							 | 
						||
| 
								 | 
							
								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
							 | 
						||
| 
								 | 
							
								init_Sndihooks()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									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");
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 |