⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 almodule.c

📁 python s60 1.4.5版本的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
	Py_INCREF(Py_None);
	return Py_None;
}
#endif /* AL_405 */
	
static struct PyMethodDef alc_methods[] = {
#ifdef AL_NO_ELEM		/* IRIX 6 */
	{"SetWidth",	(PyCFunction)alc_SetWidth,	METH_VARARGS,	alc_SetWidth__doc__},
	{"GetWidth",	(PyCFunction)alc_GetWidth,	METH_VARARGS,	alc_GetWidth__doc__},
	{"SetSampFmt",	(PyCFunction)alc_SetSampFmt,	METH_VARARGS,	alc_SetSampFmt__doc__},
	{"GetSampFmt",	(PyCFunction)alc_GetSampFmt,	METH_VARARGS,	alc_GetSampFmt__doc__},
	{"SetChannels",	(PyCFunction)alc_SetChannels,	METH_VARARGS,	alc_SetChannels__doc__},
	{"GetChannels",	(PyCFunction)alc_GetChannels,	METH_VARARGS,	alc_GetChannels__doc__},
	{"SetFloatMax",	(PyCFunction)alc_SetFloatMax,	METH_VARARGS,	alc_SetFloatMax__doc__},
	{"GetFloatMax",	(PyCFunction)alc_GetFloatMax,	METH_VARARGS,	alc_GetFloatMax__doc__},
	{"SetDevice",	(PyCFunction)alc_SetDevice,	METH_VARARGS,	alc_SetDevice__doc__},
	{"GetDevice",	(PyCFunction)alc_GetDevice,	METH_VARARGS,	alc_GetDevice__doc__},
	{"SetQueueSize",	(PyCFunction)alc_SetQueueSize,	METH_VARARGS,	alc_SetQueueSize__doc__},
	{"GetQueueSize",	(PyCFunction)alc_GetQueueSize,	METH_VARARGS,	alc_GetQueueSize__doc__},
#endif /* AL_NO_ELEM */
	{"getqueuesize",	(PyCFunction)alc_getqueuesize,	METH_VARARGS},
	{"setqueuesize",	(PyCFunction)alc_setqueuesize,	METH_VARARGS},
	{"getwidth",		(PyCFunction)alc_getwidth,	METH_VARARGS},
	{"setwidth",		(PyCFunction)alc_setwidth,	METH_VARARGS},
	{"getchannels",		(PyCFunction)alc_getchannels,	METH_VARARGS},
	{"setchannels",		(PyCFunction)alc_setchannels,	METH_VARARGS},
#ifdef AL_405
	{"getsampfmt",		(PyCFunction)alc_getsampfmt,	METH_VARARGS},
	{"setsampfmt",		(PyCFunction)alc_setsampfmt,	METH_VARARGS},
	{"getfloatmax",		(PyCFunction)alc_getfloatmax,	METH_VARARGS},
	{"setfloatmax",		(PyCFunction)alc_setfloatmax,	METH_VARARGS},
#endif /* AL_405 */

	{NULL,		NULL}		/* sentinel */
};

/* ---------- */


static PyObject *
newalcobject(ALconfig config)
{
	alcobject *self;
	
	self = PyObject_New(alcobject, &Alctype);
	if (self == NULL)
		return NULL;
	/* XXXX Add your own initializers here */
	self->config = config;
	return (PyObject *) self;
}


static void
alc_dealloc(alcobject *self)
{
	/* XXXX Add your own cleanup code here */
#ifdef AL_NO_ELEM		/* IRIX 6 */
	(void) alFreeConfig(self->config);	/* ignore errors */
#else
	(void) ALfreeconfig(self->config);	/* ignore errors */
#endif
	PyObject_Del(self);
}

static PyObject *
alc_getattr(alcobject *self, char *name)
{
	/* XXXX Add your own getattr code here */
	return Py_FindMethod(alc_methods, (PyObject *)self, name);
}

static char Alctype__doc__[] = 
""
;

static PyTypeObject Alctype = {
	PyObject_HEAD_INIT(&PyType_Type)
	0,				/*ob_size*/
	"al.config",			/*tp_name*/
	sizeof(alcobject),		/*tp_basicsize*/
	0,				/*tp_itemsize*/
	/* methods */
	(destructor)alc_dealloc,	/*tp_dealloc*/
	(printfunc)0,		/*tp_print*/
	(getattrfunc)alc_getattr,	/*tp_getattr*/
	(setattrfunc)0,	/*tp_setattr*/
	(cmpfunc)0,		/*tp_compare*/
	(reprfunc)0,		/*tp_repr*/
	0,			/*tp_as_number*/
	0,		/*tp_as_sequence*/
	0,		/*tp_as_mapping*/
	(hashfunc)0,		/*tp_hash*/
	(ternaryfunc)0,		/*tp_call*/
	(reprfunc)0,		/*tp_str*/

	/* Space for future expansion */
	0L,0L,0L,0L,
	Alctype__doc__ /* Documentation string */
};

/* End of code for config objects */
/* ---------------------------------------------------------------- */

#ifdef AL_NO_ELEM		/* IRIX 6 */

static char alp_SetConfig__doc__[] = 
"alSetConfig: set the ALconfig of an audio ALport."
;

static PyObject *
alp_SetConfig(alpobject *self, PyObject *args)
{
	alcobject *config;
	if (!PyArg_ParseTuple(args, "O!:SetConfig", &Alctype, &config))
		return NULL;
	if (alSetConfig(self->port, config->config) < 0)
		return NULL;
	Py_INCREF(Py_None);
	return Py_None;
}


static char alp_GetConfig__doc__[] = 
"alGetConfig: get the ALconfig of an audio ALport."
;

static PyObject *
alp_GetConfig(alpobject *self, PyObject *args)
{
	ALconfig config;
	if (!PyArg_ParseTuple(args, ":GetConfig"))
		return NULL;
	if ((config = alGetConfig(self->port)) == NULL)
		return NULL;
	return newalcobject(config);
}


static char alp_GetResource__doc__[] = 
"alGetResource: get the resource associated with an audio port."
;

static PyObject *
alp_GetResource(alpobject *self, PyObject *args)
{
	int resource;

	if (!PyArg_ParseTuple(args, ":GetResource"))
		return NULL;
	if ((resource = alGetResource(self->port)) == 0)
		return NULL;
	return PyInt_FromLong((long) resource);
}


static char alp_GetFD__doc__[] = 
"alGetFD: get the file descriptor for an audio port."
;

static PyObject *
alp_GetFD(alpobject *self, PyObject *args)
{
	int fd;

	if (!PyArg_ParseTuple(args, ":GetFD"))
		return NULL;

	if ((fd = alGetFD(self->port)) < 0)
		return NULL;

	return PyInt_FromLong((long) fd);
}


static char alp_GetFilled__doc__[] = 
"alGetFilled: return the number of filled sample frames in an audio port."
;

static PyObject *
alp_GetFilled(alpobject *self, PyObject *args)
{
	int filled;

	if (!PyArg_ParseTuple(args, ":GetFilled"))
		return NULL;
	if ((filled = alGetFilled(self->port)) < 0)
		return NULL;
	return PyInt_FromLong((long) filled);
}


static char alp_GetFillable__doc__[] = 
"alGetFillable: report the number of unfilled sample frames in an audio port."
;

static PyObject *
alp_GetFillable(alpobject *self, PyObject *args)
{
	int fillable;

	if (!PyArg_ParseTuple(args, ":GetFillable"))
		return NULL;
	if ((fillable = alGetFillable(self->port)) < 0)
		return NULL;
	return PyInt_FromLong((long) fillable);
}


static char alp_ReadFrames__doc__[] = 
"alReadFrames: read sample frames from an audio port."
;

static PyObject *
alp_ReadFrames(alpobject *self, PyObject *args)
{
	void *samples;
	int framecount;
	PyObject *v;
	int size;
	int ch;
	ALconfig c;

	if (!PyArg_ParseTuple(args, "i:ReadFrames", &framecount))
		return NULL;
	if (framecount < 0) {
		PyErr_SetString(ErrorObject, "negative framecount");
		return NULL;
	}
	c = alGetConfig(self->port);
	switch (alGetSampFmt(c)) {
	case AL_SAMPFMT_TWOSCOMP:
		switch (alGetWidth(c)) {
		case AL_SAMPLE_8:
			size = 1;
			break;
		case AL_SAMPLE_16:
			size = 2;
			break;
		case AL_SAMPLE_24:
			size = 4;
			break;
		default:
			PyErr_SetString(ErrorObject, "can't determine width");
			alFreeConfig(c);
			return NULL;
		}
		break;
	case AL_SAMPFMT_FLOAT:
		size = 4;
		break;
	case AL_SAMPFMT_DOUBLE:
		size = 8;
		break;
	default:
		PyErr_SetString(ErrorObject, "can't determine format");
		alFreeConfig(c);
		return NULL;
	}
	ch = alGetChannels(c);
	alFreeConfig(c);
	if (ch < 0) {
		PyErr_SetString(ErrorObject, "can't determine # of channels");
		return NULL;
	}
	size *= ch;
	v = PyString_FromStringAndSize((char *) NULL, size * framecount);
	if (v == NULL)
		return NULL;

	Py_BEGIN_ALLOW_THREADS
	alReadFrames(self->port, (void *) PyString_AS_STRING(v), framecount);
	Py_END_ALLOW_THREADS

	return v;
}


static char alp_DiscardFrames__doc__[] = 
"alDiscardFrames: discard audio from an audio port."
;

static PyObject *
alp_DiscardFrames(alpobject *self, PyObject *args)
{
	int framecount;

	if (!PyArg_ParseTuple(args, "i:DiscardFrames", &framecount))
		return NULL;

	Py_BEGIN_ALLOW_THREADS
	framecount = alDiscardFrames(self->port, framecount);
	Py_END_ALLOW_THREADS

	if (framecount < 0)
		return NULL;

	return PyInt_FromLong((long) framecount);
}


static char alp_ZeroFrames__doc__[] = 
"alZeroFrames: write zero-valued sample frames to an audio port."
;

static PyObject *
alp_ZeroFrames(alpobject *self, PyObject *args)
{
	int framecount;

	if (!PyArg_ParseTuple(args, "i:ZeroFrames", &framecount))
		return NULL;

	if (framecount < 0) {
		PyErr_SetString(ErrorObject, "negative framecount");
		return NULL;
	}

	Py_BEGIN_ALLOW_THREADS
	alZeroFrames(self->port, framecount);
	Py_END_ALLOW_THREADS

	Py_INCREF(Py_None);
	return Py_None;
}


static char alp_SetFillPoint__doc__[] = 
"alSetFillPoint: set low- or high-water mark for an audio port."
;

static PyObject *
alp_SetFillPoint(alpobject *self, PyObject *args)
{
	int fillpoint;

	if (!PyArg_ParseTuple(args, "i:SetFillPoint", &fillpoint))
		return NULL;

	if (alSetFillPoint(self->port, fillpoint) < 0)
		return NULL;

	Py_INCREF(Py_None);
	return Py_None;
}


static char alp_GetFillPoint__doc__[] = 
"alGetFillPoint: get low- or high-water mark for an audio port."
;

static PyObject *
alp_GetFillPoint(alpobject *self, PyObject *args)
{
	int fillpoint;

	if (!PyArg_ParseTuple(args, ":GetFillPoint"))
		return NULL;

	if ((fillpoint = alGetFillPoint(self->port)) < 0)
		return NULL;

	return PyInt_FromLong((long) fillpoint);
}


static char alp_GetFrameNumber__doc__[] = 
"alGetFrameNumber: get the absolute sample frame number associated with a port."
;

static PyObject *
alp_GetFrameNumber(alpobject *self, PyObject *args)
{
	stamp_t fnum;

	if (!PyArg_ParseTuple(args, ":GetFrameNumber"))
		return NULL;

	if (alGetFrameNumber(self->port, &fnum) < 0)
		return NULL;

	return PyLong_FromLongLong((long long) fnum);
}


static char alp_GetFrameTime__doc__[] = 
"alGetFrameTime: get the time at which a sample frame came in or will go out."
;

static PyObject *
alp_GetFrameTime(alpobject *self, PyObject *args)
{
	stamp_t fnum, time;
	PyObject *ret, *v0, *v1;

	if (!PyArg_ParseTuple(args, ":GetFrameTime"))
		return NULL;
	if (alGetFrameTime(self->port, &fnum, &time) < 0)
		return NULL;
	v0 = PyLong_FromLongLong((long long) fnum);
	v1 = PyLong_FromLongLong((long long) time);
	if (PyErr_Occurred()) {
		Py_XDECREF(v0);
		Py_XDECREF(v1);
		return NULL;
	}
	ret = Py_BuildValue("(OO)", v0, v1);
	Py_DECREF(v0);
	Py_DECREF(v1);
	return ret;
}


static char alp_WriteFrames__doc__[] = 
"alWriteFrames: write sample frames to an audio port."
;

static PyObject *
alp_WriteFrames(alpobject *self, PyObject *args)
{
	char *samples;
	int length;
	int size, ch;
	ALconfig c;

	if (!PyArg_ParseTuple(args, "s#:WriteFrames", &samples, &length))
		return NULL;
	c = alGetConfig(self->port);
	switch (alGetSampFmt(c)) {
	case AL_SAMPFMT_TWOSCOMP:
		switch (alGetWidth(c)) {
		case AL_SAMPLE_8:
			size = 1;
			break;
		case AL_SAMPLE_16:
			size = 2;
			break;
		case AL_SAMPLE_24:
			size = 4;
			break;
		default:
			PyErr_SetString(ErrorObject, "can't determine width");
			alFreeConfig(c);
			return NULL;
		}
		break;
	case AL_SAMPFMT_FLOAT:
		size = 4;
		break;
	case AL_SAMPFMT_DOUBLE:
		size = 8;
		break;
	default:
		PyErr_SetString(ErrorObject, "can't determine format");
		alFreeConfig(c);
		return NULL;
	}
	ch = alGetChannels(c);
	alFreeConfig(c);
	if (ch < 0) {
		PyErr_SetString(ErrorObject, "can't determine # of channels");
		return NULL;
	}
	size *= ch;
	if (length % size != 0) {
		PyErr_SetString(ErrorObject,
				"buffer length not whole number of frames");
		return NULL;
	}

	Py_BEGIN_ALLOW_THREADS
	alWriteFrames(self->port, (void *) samples, length / size);
	Py_END_ALLOW_THREADS

	Py_INCREF(Py_None);
	return Py_None;
}


static char alp_ClosePort__doc__[] = 
"alClosePort: close an audio port."
;

static PyObject *
alp_ClosePort(alpobject *self, PyObject *args)
{
	if (!PyArg_ParseTuple(args, ":ClosePort"))
		return NULL;
	if (alClosePort(self->port) < 0)
		return NULL;
	self->port = NULL;
	Py_INCREF(Py_None);
	return Py_None;
}

#endif /* AL_NO_ELEM */

#ifdef OLD_INTERFACE
static PyObject *
alp_closeport(alpobject *self, PyObject *args)
{
	if (!PyArg_ParseTuple(args, ":ClosePort"))
		return NULL;
	if (ALcloseport(self->port) < 0)
		return NULL;
	self->port = NULL;
	Py_INCREF(Py_None);
	return Py_None;
}

static PyObject *
alp_getfd(alpobject *self, PyObject *args)
{
	int fd;

	if (!PyArg_ParseTuple(args, ":GetFD"))
		return NULL;
	if ((fd = ALgetfd(self-> port)) == -1)
		return NULL;
	return PyInt_FromLong(fd);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -