2014-01-25 05:57:59 -04:00
|
|
|
/*[clinic input]
|
|
|
|
preserve
|
|
|
|
[clinic start generated code]*/
|
|
|
|
|
|
|
|
PyDoc_STRVAR(audioop_getsample__doc__,
|
2014-02-09 02:15:29 -04:00
|
|
|
"getsample($module, fragment, width, index, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
2014-01-25 05:57:59 -04:00
|
|
|
"Return the value of sample index from the fragment.");
|
|
|
|
|
|
|
|
#define AUDIOOP_GETSAMPLE_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"getsample", (PyCFunction)(void(*)(void))audioop_getsample, METH_FASTCALL, audioop_getsample__doc__},
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
audioop_getsample_impl(PyObject *module, Py_buffer *fragment, int width,
|
2015-04-14 19:07:59 -03:00
|
|
|
Py_ssize_t index);
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
audioop_getsample(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2014-01-25 05:57:59 -04:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
Py_buffer fragment = {NULL, NULL};
|
|
|
|
int width;
|
|
|
|
Py_ssize_t index;
|
|
|
|
|
2019-01-11 10:01:14 -04:00
|
|
|
if (!_PyArg_CheckPositional("getsample", nargs, 3, 3)) {
|
2017-01-16 20:35:17 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2019-01-11 10:01:14 -04:00
|
|
|
if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!PyBuffer_IsContiguous(&fragment, 'C')) {
|
|
|
|
_PyArg_BadArgument("getsample", 1, "contiguous buffer", args[0]);
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[1])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
width = _PyLong_AsInt(args[1]);
|
|
|
|
if (width == -1 && PyErr_Occurred()) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[2])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
{
|
|
|
|
Py_ssize_t ival = -1;
|
|
|
|
PyObject *iobj = PyNumber_Index(args[2]);
|
|
|
|
if (iobj != NULL) {
|
|
|
|
ival = PyLong_AsSsize_t(iobj);
|
|
|
|
Py_DECREF(iobj);
|
|
|
|
}
|
|
|
|
if (ival == -1 && PyErr_Occurred()) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
index = ival;
|
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
return_value = audioop_getsample_impl(module, &fragment, width, index);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
/* Cleanup for fragment */
|
2016-06-09 10:16:06 -03:00
|
|
|
if (fragment.obj) {
|
2014-01-25 05:57:59 -04:00
|
|
|
PyBuffer_Release(&fragment);
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(audioop_max__doc__,
|
2014-02-09 02:15:29 -04:00
|
|
|
"max($module, fragment, width, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
2014-01-25 05:57:59 -04:00
|
|
|
"Return the maximum of the absolute value of all samples in a fragment.");
|
|
|
|
|
|
|
|
#define AUDIOOP_MAX_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"max", (PyCFunction)(void(*)(void))audioop_max, METH_FASTCALL, audioop_max__doc__},
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
audioop_max_impl(PyObject *module, Py_buffer *fragment, int width);
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
audioop_max(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2014-01-25 05:57:59 -04:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
Py_buffer fragment = {NULL, NULL};
|
|
|
|
int width;
|
|
|
|
|
2019-01-11 10:01:14 -04:00
|
|
|
if (!_PyArg_CheckPositional("max", nargs, 2, 2)) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!PyBuffer_IsContiguous(&fragment, 'C')) {
|
|
|
|
_PyArg_BadArgument("max", 1, "contiguous buffer", args[0]);
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[1])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
width = _PyLong_AsInt(args[1]);
|
|
|
|
if (width == -1 && PyErr_Occurred()) {
|
2017-01-16 20:35:17 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
return_value = audioop_max_impl(module, &fragment, width);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
/* Cleanup for fragment */
|
2016-06-09 10:16:06 -03:00
|
|
|
if (fragment.obj) {
|
2014-01-25 05:57:59 -04:00
|
|
|
PyBuffer_Release(&fragment);
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(audioop_minmax__doc__,
|
2014-02-09 02:15:29 -04:00
|
|
|
"minmax($module, fragment, width, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
2014-01-25 05:57:59 -04:00
|
|
|
"Return the minimum and maximum values of all samples in the sound fragment.");
|
|
|
|
|
|
|
|
#define AUDIOOP_MINMAX_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"minmax", (PyCFunction)(void(*)(void))audioop_minmax, METH_FASTCALL, audioop_minmax__doc__},
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
audioop_minmax_impl(PyObject *module, Py_buffer *fragment, int width);
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
audioop_minmax(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2014-01-25 05:57:59 -04:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
Py_buffer fragment = {NULL, NULL};
|
|
|
|
int width;
|
|
|
|
|
2019-01-11 10:01:14 -04:00
|
|
|
if (!_PyArg_CheckPositional("minmax", nargs, 2, 2)) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!PyBuffer_IsContiguous(&fragment, 'C')) {
|
|
|
|
_PyArg_BadArgument("minmax", 1, "contiguous buffer", args[0]);
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[1])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
width = _PyLong_AsInt(args[1]);
|
|
|
|
if (width == -1 && PyErr_Occurred()) {
|
2017-01-16 20:35:17 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
return_value = audioop_minmax_impl(module, &fragment, width);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
/* Cleanup for fragment */
|
2016-06-09 10:16:06 -03:00
|
|
|
if (fragment.obj) {
|
2014-01-25 05:57:59 -04:00
|
|
|
PyBuffer_Release(&fragment);
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(audioop_avg__doc__,
|
2014-02-09 02:15:29 -04:00
|
|
|
"avg($module, fragment, width, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
2014-01-25 05:57:59 -04:00
|
|
|
"Return the average over all samples in the fragment.");
|
|
|
|
|
|
|
|
#define AUDIOOP_AVG_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"avg", (PyCFunction)(void(*)(void))audioop_avg, METH_FASTCALL, audioop_avg__doc__},
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
audioop_avg_impl(PyObject *module, Py_buffer *fragment, int width);
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
audioop_avg(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2014-01-25 05:57:59 -04:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
Py_buffer fragment = {NULL, NULL};
|
|
|
|
int width;
|
|
|
|
|
2019-01-11 10:01:14 -04:00
|
|
|
if (!_PyArg_CheckPositional("avg", nargs, 2, 2)) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!PyBuffer_IsContiguous(&fragment, 'C')) {
|
|
|
|
_PyArg_BadArgument("avg", 1, "contiguous buffer", args[0]);
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[1])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
width = _PyLong_AsInt(args[1]);
|
|
|
|
if (width == -1 && PyErr_Occurred()) {
|
2017-01-16 20:35:17 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
return_value = audioop_avg_impl(module, &fragment, width);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
/* Cleanup for fragment */
|
2016-06-09 10:16:06 -03:00
|
|
|
if (fragment.obj) {
|
2014-01-25 05:57:59 -04:00
|
|
|
PyBuffer_Release(&fragment);
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(audioop_rms__doc__,
|
2014-02-09 02:15:29 -04:00
|
|
|
"rms($module, fragment, width, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
2014-01-25 05:57:59 -04:00
|
|
|
"Return the root-mean-square of the fragment, i.e. sqrt(sum(S_i^2)/n).");
|
|
|
|
|
|
|
|
#define AUDIOOP_RMS_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"rms", (PyCFunction)(void(*)(void))audioop_rms, METH_FASTCALL, audioop_rms__doc__},
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
audioop_rms_impl(PyObject *module, Py_buffer *fragment, int width);
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
audioop_rms(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2014-01-25 05:57:59 -04:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
Py_buffer fragment = {NULL, NULL};
|
|
|
|
int width;
|
|
|
|
|
2019-01-11 10:01:14 -04:00
|
|
|
if (!_PyArg_CheckPositional("rms", nargs, 2, 2)) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!PyBuffer_IsContiguous(&fragment, 'C')) {
|
|
|
|
_PyArg_BadArgument("rms", 1, "contiguous buffer", args[0]);
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[1])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
width = _PyLong_AsInt(args[1]);
|
|
|
|
if (width == -1 && PyErr_Occurred()) {
|
2017-01-16 20:35:17 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
return_value = audioop_rms_impl(module, &fragment, width);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
/* Cleanup for fragment */
|
2016-06-09 10:16:06 -03:00
|
|
|
if (fragment.obj) {
|
2014-01-25 05:57:59 -04:00
|
|
|
PyBuffer_Release(&fragment);
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(audioop_findfit__doc__,
|
2014-02-09 02:15:29 -04:00
|
|
|
"findfit($module, fragment, reference, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
2014-01-25 05:57:59 -04:00
|
|
|
"Try to match reference as well as possible to a portion of fragment.");
|
|
|
|
|
|
|
|
#define AUDIOOP_FINDFIT_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"findfit", (PyCFunction)(void(*)(void))audioop_findfit, METH_FASTCALL, audioop_findfit__doc__},
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
audioop_findfit_impl(PyObject *module, Py_buffer *fragment,
|
2015-04-14 19:07:59 -03:00
|
|
|
Py_buffer *reference);
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
audioop_findfit(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2014-01-25 05:57:59 -04:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
Py_buffer fragment = {NULL, NULL};
|
|
|
|
Py_buffer reference = {NULL, NULL};
|
|
|
|
|
2019-01-11 10:01:14 -04:00
|
|
|
if (!_PyArg_CheckPositional("findfit", nargs, 2, 2)) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!PyBuffer_IsContiguous(&fragment, 'C')) {
|
|
|
|
_PyArg_BadArgument("findfit", 1, "contiguous buffer", args[0]);
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyObject_GetBuffer(args[1], &reference, PyBUF_SIMPLE) != 0) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!PyBuffer_IsContiguous(&reference, 'C')) {
|
|
|
|
_PyArg_BadArgument("findfit", 2, "contiguous buffer", args[1]);
|
2017-01-16 20:35:17 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
return_value = audioop_findfit_impl(module, &fragment, &reference);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
/* Cleanup for fragment */
|
2016-06-09 10:16:06 -03:00
|
|
|
if (fragment.obj) {
|
2014-01-25 05:57:59 -04:00
|
|
|
PyBuffer_Release(&fragment);
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
/* Cleanup for reference */
|
2016-06-09 10:16:06 -03:00
|
|
|
if (reference.obj) {
|
2014-01-25 05:57:59 -04:00
|
|
|
PyBuffer_Release(&reference);
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(audioop_findfactor__doc__,
|
2014-02-09 02:15:29 -04:00
|
|
|
"findfactor($module, fragment, reference, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
2014-01-25 05:57:59 -04:00
|
|
|
"Return a factor F such that rms(add(fragment, mul(reference, -F))) is minimal.");
|
|
|
|
|
|
|
|
#define AUDIOOP_FINDFACTOR_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"findfactor", (PyCFunction)(void(*)(void))audioop_findfactor, METH_FASTCALL, audioop_findfactor__doc__},
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
audioop_findfactor_impl(PyObject *module, Py_buffer *fragment,
|
2015-04-14 19:07:59 -03:00
|
|
|
Py_buffer *reference);
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
audioop_findfactor(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2014-01-25 05:57:59 -04:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
Py_buffer fragment = {NULL, NULL};
|
|
|
|
Py_buffer reference = {NULL, NULL};
|
|
|
|
|
2019-01-11 10:01:14 -04:00
|
|
|
if (!_PyArg_CheckPositional("findfactor", nargs, 2, 2)) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!PyBuffer_IsContiguous(&fragment, 'C')) {
|
|
|
|
_PyArg_BadArgument("findfactor", 1, "contiguous buffer", args[0]);
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyObject_GetBuffer(args[1], &reference, PyBUF_SIMPLE) != 0) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!PyBuffer_IsContiguous(&reference, 'C')) {
|
|
|
|
_PyArg_BadArgument("findfactor", 2, "contiguous buffer", args[1]);
|
2017-01-16 20:35:17 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
return_value = audioop_findfactor_impl(module, &fragment, &reference);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
/* Cleanup for fragment */
|
2016-06-09 10:16:06 -03:00
|
|
|
if (fragment.obj) {
|
2014-01-25 05:57:59 -04:00
|
|
|
PyBuffer_Release(&fragment);
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
/* Cleanup for reference */
|
2016-06-09 10:16:06 -03:00
|
|
|
if (reference.obj) {
|
2014-01-25 05:57:59 -04:00
|
|
|
PyBuffer_Release(&reference);
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(audioop_findmax__doc__,
|
2014-02-09 02:15:29 -04:00
|
|
|
"findmax($module, fragment, length, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
2014-01-25 05:57:59 -04:00
|
|
|
"Search fragment for a slice of specified number of samples with maximum energy.");
|
|
|
|
|
|
|
|
#define AUDIOOP_FINDMAX_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"findmax", (PyCFunction)(void(*)(void))audioop_findmax, METH_FASTCALL, audioop_findmax__doc__},
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
audioop_findmax_impl(PyObject *module, Py_buffer *fragment,
|
2015-04-14 19:07:59 -03:00
|
|
|
Py_ssize_t length);
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
audioop_findmax(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2014-01-25 05:57:59 -04:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
Py_buffer fragment = {NULL, NULL};
|
|
|
|
Py_ssize_t length;
|
|
|
|
|
2019-01-11 10:01:14 -04:00
|
|
|
if (!_PyArg_CheckPositional("findmax", nargs, 2, 2)) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!PyBuffer_IsContiguous(&fragment, 'C')) {
|
|
|
|
_PyArg_BadArgument("findmax", 1, "contiguous buffer", args[0]);
|
2017-01-16 20:35:17 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2019-01-11 10:01:14 -04:00
|
|
|
if (PyFloat_Check(args[1])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
{
|
|
|
|
Py_ssize_t ival = -1;
|
|
|
|
PyObject *iobj = PyNumber_Index(args[1]);
|
|
|
|
if (iobj != NULL) {
|
|
|
|
ival = PyLong_AsSsize_t(iobj);
|
|
|
|
Py_DECREF(iobj);
|
|
|
|
}
|
|
|
|
if (ival == -1 && PyErr_Occurred()) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
length = ival;
|
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
return_value = audioop_findmax_impl(module, &fragment, length);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
/* Cleanup for fragment */
|
2016-06-09 10:16:06 -03:00
|
|
|
if (fragment.obj) {
|
2014-01-25 05:57:59 -04:00
|
|
|
PyBuffer_Release(&fragment);
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(audioop_avgpp__doc__,
|
2014-02-09 02:15:29 -04:00
|
|
|
"avgpp($module, fragment, width, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
2014-01-25 05:57:59 -04:00
|
|
|
"Return the average peak-peak value over all samples in the fragment.");
|
|
|
|
|
|
|
|
#define AUDIOOP_AVGPP_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"avgpp", (PyCFunction)(void(*)(void))audioop_avgpp, METH_FASTCALL, audioop_avgpp__doc__},
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
audioop_avgpp_impl(PyObject *module, Py_buffer *fragment, int width);
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
audioop_avgpp(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2014-01-25 05:57:59 -04:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
Py_buffer fragment = {NULL, NULL};
|
|
|
|
int width;
|
|
|
|
|
2019-01-11 10:01:14 -04:00
|
|
|
if (!_PyArg_CheckPositional("avgpp", nargs, 2, 2)) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!PyBuffer_IsContiguous(&fragment, 'C')) {
|
|
|
|
_PyArg_BadArgument("avgpp", 1, "contiguous buffer", args[0]);
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[1])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
width = _PyLong_AsInt(args[1]);
|
|
|
|
if (width == -1 && PyErr_Occurred()) {
|
2017-01-16 20:35:17 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
return_value = audioop_avgpp_impl(module, &fragment, width);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
/* Cleanup for fragment */
|
2016-06-09 10:16:06 -03:00
|
|
|
if (fragment.obj) {
|
2014-01-25 05:57:59 -04:00
|
|
|
PyBuffer_Release(&fragment);
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(audioop_maxpp__doc__,
|
2014-02-09 02:15:29 -04:00
|
|
|
"maxpp($module, fragment, width, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
2014-01-25 05:57:59 -04:00
|
|
|
"Return the maximum peak-peak value in the sound fragment.");
|
|
|
|
|
|
|
|
#define AUDIOOP_MAXPP_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"maxpp", (PyCFunction)(void(*)(void))audioop_maxpp, METH_FASTCALL, audioop_maxpp__doc__},
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
audioop_maxpp_impl(PyObject *module, Py_buffer *fragment, int width);
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
audioop_maxpp(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2014-01-25 05:57:59 -04:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
Py_buffer fragment = {NULL, NULL};
|
|
|
|
int width;
|
|
|
|
|
2019-01-11 10:01:14 -04:00
|
|
|
if (!_PyArg_CheckPositional("maxpp", nargs, 2, 2)) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!PyBuffer_IsContiguous(&fragment, 'C')) {
|
|
|
|
_PyArg_BadArgument("maxpp", 1, "contiguous buffer", args[0]);
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[1])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
width = _PyLong_AsInt(args[1]);
|
|
|
|
if (width == -1 && PyErr_Occurred()) {
|
2017-01-16 20:35:17 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
return_value = audioop_maxpp_impl(module, &fragment, width);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
/* Cleanup for fragment */
|
2016-06-09 10:16:06 -03:00
|
|
|
if (fragment.obj) {
|
2014-01-25 05:57:59 -04:00
|
|
|
PyBuffer_Release(&fragment);
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(audioop_cross__doc__,
|
2014-02-09 02:15:29 -04:00
|
|
|
"cross($module, fragment, width, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
2014-01-25 05:57:59 -04:00
|
|
|
"Return the number of zero crossings in the fragment passed as an argument.");
|
|
|
|
|
|
|
|
#define AUDIOOP_CROSS_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"cross", (PyCFunction)(void(*)(void))audioop_cross, METH_FASTCALL, audioop_cross__doc__},
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
audioop_cross_impl(PyObject *module, Py_buffer *fragment, int width);
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
audioop_cross(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2014-01-25 05:57:59 -04:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
Py_buffer fragment = {NULL, NULL};
|
|
|
|
int width;
|
|
|
|
|
2019-01-11 10:01:14 -04:00
|
|
|
if (!_PyArg_CheckPositional("cross", nargs, 2, 2)) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!PyBuffer_IsContiguous(&fragment, 'C')) {
|
|
|
|
_PyArg_BadArgument("cross", 1, "contiguous buffer", args[0]);
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[1])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
width = _PyLong_AsInt(args[1]);
|
|
|
|
if (width == -1 && PyErr_Occurred()) {
|
2017-01-16 20:35:17 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
return_value = audioop_cross_impl(module, &fragment, width);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
/* Cleanup for fragment */
|
2016-06-09 10:16:06 -03:00
|
|
|
if (fragment.obj) {
|
2014-01-25 05:57:59 -04:00
|
|
|
PyBuffer_Release(&fragment);
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(audioop_mul__doc__,
|
2014-02-09 02:15:29 -04:00
|
|
|
"mul($module, fragment, width, factor, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
2014-01-25 05:57:59 -04:00
|
|
|
"Return a fragment that has all samples in the original fragment multiplied by the floating-point value factor.");
|
|
|
|
|
|
|
|
#define AUDIOOP_MUL_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"mul", (PyCFunction)(void(*)(void))audioop_mul, METH_FASTCALL, audioop_mul__doc__},
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
audioop_mul_impl(PyObject *module, Py_buffer *fragment, int width,
|
2015-04-14 19:07:59 -03:00
|
|
|
double factor);
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
audioop_mul(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2014-01-25 05:57:59 -04:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
Py_buffer fragment = {NULL, NULL};
|
|
|
|
int width;
|
|
|
|
double factor;
|
|
|
|
|
2019-01-11 10:01:14 -04:00
|
|
|
if (!_PyArg_CheckPositional("mul", nargs, 3, 3)) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!PyBuffer_IsContiguous(&fragment, 'C')) {
|
|
|
|
_PyArg_BadArgument("mul", 1, "contiguous buffer", args[0]);
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[1])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
width = _PyLong_AsInt(args[1]);
|
|
|
|
if (width == -1 && PyErr_Occurred()) {
|
|
|
|
goto exit;
|
|
|
|
}
|
2019-08-24 23:45:12 -03:00
|
|
|
if (PyFloat_CheckExact(args[2])) {
|
|
|
|
factor = PyFloat_AS_DOUBLE(args[2]);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
factor = PyFloat_AsDouble(args[2]);
|
|
|
|
if (factor == -1.0 && PyErr_Occurred()) {
|
|
|
|
goto exit;
|
|
|
|
}
|
2017-01-16 20:35:17 -04:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
return_value = audioop_mul_impl(module, &fragment, width, factor);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
/* Cleanup for fragment */
|
2016-06-09 10:16:06 -03:00
|
|
|
if (fragment.obj) {
|
2014-01-25 05:57:59 -04:00
|
|
|
PyBuffer_Release(&fragment);
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(audioop_tomono__doc__,
|
2014-02-09 02:15:29 -04:00
|
|
|
"tomono($module, fragment, width, lfactor, rfactor, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
2014-01-25 05:57:59 -04:00
|
|
|
"Convert a stereo fragment to a mono fragment.");
|
|
|
|
|
|
|
|
#define AUDIOOP_TOMONO_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"tomono", (PyCFunction)(void(*)(void))audioop_tomono, METH_FASTCALL, audioop_tomono__doc__},
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
audioop_tomono_impl(PyObject *module, Py_buffer *fragment, int width,
|
2015-04-14 19:07:59 -03:00
|
|
|
double lfactor, double rfactor);
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
audioop_tomono(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2014-01-25 05:57:59 -04:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
Py_buffer fragment = {NULL, NULL};
|
|
|
|
int width;
|
|
|
|
double lfactor;
|
|
|
|
double rfactor;
|
|
|
|
|
2019-01-11 10:01:14 -04:00
|
|
|
if (!_PyArg_CheckPositional("tomono", nargs, 4, 4)) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!PyBuffer_IsContiguous(&fragment, 'C')) {
|
|
|
|
_PyArg_BadArgument("tomono", 1, "contiguous buffer", args[0]);
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[1])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
width = _PyLong_AsInt(args[1]);
|
|
|
|
if (width == -1 && PyErr_Occurred()) {
|
|
|
|
goto exit;
|
|
|
|
}
|
2019-08-24 23:45:12 -03:00
|
|
|
if (PyFloat_CheckExact(args[2])) {
|
|
|
|
lfactor = PyFloat_AS_DOUBLE(args[2]);
|
2019-01-11 10:01:14 -04:00
|
|
|
}
|
2019-08-24 23:45:12 -03:00
|
|
|
else
|
|
|
|
{
|
|
|
|
lfactor = PyFloat_AsDouble(args[2]);
|
|
|
|
if (lfactor == -1.0 && PyErr_Occurred()) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (PyFloat_CheckExact(args[3])) {
|
|
|
|
rfactor = PyFloat_AS_DOUBLE(args[3]);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
rfactor = PyFloat_AsDouble(args[3]);
|
|
|
|
if (rfactor == -1.0 && PyErr_Occurred()) {
|
|
|
|
goto exit;
|
|
|
|
}
|
2017-01-16 20:35:17 -04:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
return_value = audioop_tomono_impl(module, &fragment, width, lfactor, rfactor);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
/* Cleanup for fragment */
|
2016-06-09 10:16:06 -03:00
|
|
|
if (fragment.obj) {
|
2014-01-25 05:57:59 -04:00
|
|
|
PyBuffer_Release(&fragment);
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(audioop_tostereo__doc__,
|
2014-02-09 02:15:29 -04:00
|
|
|
"tostereo($module, fragment, width, lfactor, rfactor, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
2014-01-25 05:57:59 -04:00
|
|
|
"Generate a stereo fragment from a mono fragment.");
|
|
|
|
|
|
|
|
#define AUDIOOP_TOSTEREO_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"tostereo", (PyCFunction)(void(*)(void))audioop_tostereo, METH_FASTCALL, audioop_tostereo__doc__},
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
audioop_tostereo_impl(PyObject *module, Py_buffer *fragment, int width,
|
2015-04-14 19:07:59 -03:00
|
|
|
double lfactor, double rfactor);
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
audioop_tostereo(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2014-01-25 05:57:59 -04:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
Py_buffer fragment = {NULL, NULL};
|
|
|
|
int width;
|
|
|
|
double lfactor;
|
|
|
|
double rfactor;
|
|
|
|
|
2019-01-11 10:01:14 -04:00
|
|
|
if (!_PyArg_CheckPositional("tostereo", nargs, 4, 4)) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!PyBuffer_IsContiguous(&fragment, 'C')) {
|
|
|
|
_PyArg_BadArgument("tostereo", 1, "contiguous buffer", args[0]);
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[1])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
width = _PyLong_AsInt(args[1]);
|
|
|
|
if (width == -1 && PyErr_Occurred()) {
|
|
|
|
goto exit;
|
|
|
|
}
|
2019-08-24 23:45:12 -03:00
|
|
|
if (PyFloat_CheckExact(args[2])) {
|
|
|
|
lfactor = PyFloat_AS_DOUBLE(args[2]);
|
2019-01-11 10:01:14 -04:00
|
|
|
}
|
2019-08-24 23:45:12 -03:00
|
|
|
else
|
|
|
|
{
|
|
|
|
lfactor = PyFloat_AsDouble(args[2]);
|
|
|
|
if (lfactor == -1.0 && PyErr_Occurred()) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (PyFloat_CheckExact(args[3])) {
|
|
|
|
rfactor = PyFloat_AS_DOUBLE(args[3]);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
rfactor = PyFloat_AsDouble(args[3]);
|
|
|
|
if (rfactor == -1.0 && PyErr_Occurred()) {
|
|
|
|
goto exit;
|
|
|
|
}
|
2017-01-16 20:35:17 -04:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
return_value = audioop_tostereo_impl(module, &fragment, width, lfactor, rfactor);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
/* Cleanup for fragment */
|
2016-06-09 10:16:06 -03:00
|
|
|
if (fragment.obj) {
|
2014-01-25 05:57:59 -04:00
|
|
|
PyBuffer_Release(&fragment);
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(audioop_add__doc__,
|
2014-02-09 02:15:29 -04:00
|
|
|
"add($module, fragment1, fragment2, width, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
2014-01-25 05:57:59 -04:00
|
|
|
"Return a fragment which is the addition of the two samples passed as parameters.");
|
|
|
|
|
|
|
|
#define AUDIOOP_ADD_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"add", (PyCFunction)(void(*)(void))audioop_add, METH_FASTCALL, audioop_add__doc__},
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
audioop_add_impl(PyObject *module, Py_buffer *fragment1,
|
2015-04-14 19:07:59 -03:00
|
|
|
Py_buffer *fragment2, int width);
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
audioop_add(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2014-01-25 05:57:59 -04:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
Py_buffer fragment1 = {NULL, NULL};
|
|
|
|
Py_buffer fragment2 = {NULL, NULL};
|
|
|
|
int width;
|
|
|
|
|
2019-01-11 10:01:14 -04:00
|
|
|
if (!_PyArg_CheckPositional("add", nargs, 3, 3)) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyObject_GetBuffer(args[0], &fragment1, PyBUF_SIMPLE) != 0) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!PyBuffer_IsContiguous(&fragment1, 'C')) {
|
|
|
|
_PyArg_BadArgument("add", 1, "contiguous buffer", args[0]);
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyObject_GetBuffer(args[1], &fragment2, PyBUF_SIMPLE) != 0) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!PyBuffer_IsContiguous(&fragment2, 'C')) {
|
|
|
|
_PyArg_BadArgument("add", 2, "contiguous buffer", args[1]);
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[2])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
width = _PyLong_AsInt(args[2]);
|
|
|
|
if (width == -1 && PyErr_Occurred()) {
|
2017-01-16 20:35:17 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
return_value = audioop_add_impl(module, &fragment1, &fragment2, width);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
/* Cleanup for fragment1 */
|
2016-06-09 10:16:06 -03:00
|
|
|
if (fragment1.obj) {
|
2014-01-25 05:57:59 -04:00
|
|
|
PyBuffer_Release(&fragment1);
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
/* Cleanup for fragment2 */
|
2016-06-09 10:16:06 -03:00
|
|
|
if (fragment2.obj) {
|
2014-01-25 05:57:59 -04:00
|
|
|
PyBuffer_Release(&fragment2);
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(audioop_bias__doc__,
|
2014-02-09 02:15:29 -04:00
|
|
|
"bias($module, fragment, width, bias, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
2014-01-25 05:57:59 -04:00
|
|
|
"Return a fragment that is the original fragment with a bias added to each sample.");
|
|
|
|
|
|
|
|
#define AUDIOOP_BIAS_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"bias", (PyCFunction)(void(*)(void))audioop_bias, METH_FASTCALL, audioop_bias__doc__},
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
audioop_bias_impl(PyObject *module, Py_buffer *fragment, int width, int bias);
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
audioop_bias(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2014-01-25 05:57:59 -04:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
Py_buffer fragment = {NULL, NULL};
|
|
|
|
int width;
|
|
|
|
int bias;
|
|
|
|
|
2019-01-11 10:01:14 -04:00
|
|
|
if (!_PyArg_CheckPositional("bias", nargs, 3, 3)) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!PyBuffer_IsContiguous(&fragment, 'C')) {
|
|
|
|
_PyArg_BadArgument("bias", 1, "contiguous buffer", args[0]);
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[1])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
width = _PyLong_AsInt(args[1]);
|
|
|
|
if (width == -1 && PyErr_Occurred()) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[2])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
bias = _PyLong_AsInt(args[2]);
|
|
|
|
if (bias == -1 && PyErr_Occurred()) {
|
2017-01-16 20:35:17 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
return_value = audioop_bias_impl(module, &fragment, width, bias);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
/* Cleanup for fragment */
|
2016-06-09 10:16:06 -03:00
|
|
|
if (fragment.obj) {
|
2014-01-25 05:57:59 -04:00
|
|
|
PyBuffer_Release(&fragment);
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(audioop_reverse__doc__,
|
2014-02-09 02:15:29 -04:00
|
|
|
"reverse($module, fragment, width, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
2014-01-25 05:57:59 -04:00
|
|
|
"Reverse the samples in a fragment and returns the modified fragment.");
|
|
|
|
|
|
|
|
#define AUDIOOP_REVERSE_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"reverse", (PyCFunction)(void(*)(void))audioop_reverse, METH_FASTCALL, audioop_reverse__doc__},
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
audioop_reverse_impl(PyObject *module, Py_buffer *fragment, int width);
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
audioop_reverse(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2014-01-25 05:57:59 -04:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
Py_buffer fragment = {NULL, NULL};
|
|
|
|
int width;
|
|
|
|
|
2019-01-11 10:01:14 -04:00
|
|
|
if (!_PyArg_CheckPositional("reverse", nargs, 2, 2)) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!PyBuffer_IsContiguous(&fragment, 'C')) {
|
|
|
|
_PyArg_BadArgument("reverse", 1, "contiguous buffer", args[0]);
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[1])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
width = _PyLong_AsInt(args[1]);
|
|
|
|
if (width == -1 && PyErr_Occurred()) {
|
2017-01-16 20:35:17 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
return_value = audioop_reverse_impl(module, &fragment, width);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
/* Cleanup for fragment */
|
2016-06-09 10:16:06 -03:00
|
|
|
if (fragment.obj) {
|
2014-01-25 05:57:59 -04:00
|
|
|
PyBuffer_Release(&fragment);
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(audioop_byteswap__doc__,
|
2014-02-09 02:15:29 -04:00
|
|
|
"byteswap($module, fragment, width, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
2014-01-25 05:57:59 -04:00
|
|
|
"Convert big-endian samples to little-endian and vice versa.");
|
|
|
|
|
|
|
|
#define AUDIOOP_BYTESWAP_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"byteswap", (PyCFunction)(void(*)(void))audioop_byteswap, METH_FASTCALL, audioop_byteswap__doc__},
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
audioop_byteswap_impl(PyObject *module, Py_buffer *fragment, int width);
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
audioop_byteswap(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2014-01-25 05:57:59 -04:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
Py_buffer fragment = {NULL, NULL};
|
|
|
|
int width;
|
|
|
|
|
2019-01-11 10:01:14 -04:00
|
|
|
if (!_PyArg_CheckPositional("byteswap", nargs, 2, 2)) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!PyBuffer_IsContiguous(&fragment, 'C')) {
|
|
|
|
_PyArg_BadArgument("byteswap", 1, "contiguous buffer", args[0]);
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[1])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
width = _PyLong_AsInt(args[1]);
|
|
|
|
if (width == -1 && PyErr_Occurred()) {
|
2017-01-16 20:35:17 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
return_value = audioop_byteswap_impl(module, &fragment, width);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
/* Cleanup for fragment */
|
2016-06-09 10:16:06 -03:00
|
|
|
if (fragment.obj) {
|
2014-01-25 05:57:59 -04:00
|
|
|
PyBuffer_Release(&fragment);
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(audioop_lin2lin__doc__,
|
2014-02-09 02:15:29 -04:00
|
|
|
"lin2lin($module, fragment, width, newwidth, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
2014-01-25 05:57:59 -04:00
|
|
|
"Convert samples between 1-, 2-, 3- and 4-byte formats.");
|
|
|
|
|
|
|
|
#define AUDIOOP_LIN2LIN_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"lin2lin", (PyCFunction)(void(*)(void))audioop_lin2lin, METH_FASTCALL, audioop_lin2lin__doc__},
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
audioop_lin2lin_impl(PyObject *module, Py_buffer *fragment, int width,
|
2015-04-14 19:07:59 -03:00
|
|
|
int newwidth);
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
audioop_lin2lin(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2014-01-25 05:57:59 -04:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
Py_buffer fragment = {NULL, NULL};
|
|
|
|
int width;
|
|
|
|
int newwidth;
|
|
|
|
|
2019-01-11 10:01:14 -04:00
|
|
|
if (!_PyArg_CheckPositional("lin2lin", nargs, 3, 3)) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!PyBuffer_IsContiguous(&fragment, 'C')) {
|
|
|
|
_PyArg_BadArgument("lin2lin", 1, "contiguous buffer", args[0]);
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[1])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
width = _PyLong_AsInt(args[1]);
|
|
|
|
if (width == -1 && PyErr_Occurred()) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[2])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
newwidth = _PyLong_AsInt(args[2]);
|
|
|
|
if (newwidth == -1 && PyErr_Occurred()) {
|
2017-01-16 20:35:17 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
return_value = audioop_lin2lin_impl(module, &fragment, width, newwidth);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
/* Cleanup for fragment */
|
2016-06-09 10:16:06 -03:00
|
|
|
if (fragment.obj) {
|
2014-01-25 05:57:59 -04:00
|
|
|
PyBuffer_Release(&fragment);
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(audioop_ratecv__doc__,
|
2014-02-09 02:15:29 -04:00
|
|
|
"ratecv($module, fragment, width, nchannels, inrate, outrate, state,\n"
|
|
|
|
" weightA=1, weightB=0, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
2014-01-25 05:57:59 -04:00
|
|
|
"Convert the frame rate of the input fragment.");
|
|
|
|
|
|
|
|
#define AUDIOOP_RATECV_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"ratecv", (PyCFunction)(void(*)(void))audioop_ratecv, METH_FASTCALL, audioop_ratecv__doc__},
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
audioop_ratecv_impl(PyObject *module, Py_buffer *fragment, int width,
|
2015-04-14 19:07:59 -03:00
|
|
|
int nchannels, int inrate, int outrate, PyObject *state,
|
|
|
|
int weightA, int weightB);
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
audioop_ratecv(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2014-01-25 05:57:59 -04:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
Py_buffer fragment = {NULL, NULL};
|
|
|
|
int width;
|
|
|
|
int nchannels;
|
|
|
|
int inrate;
|
|
|
|
int outrate;
|
|
|
|
PyObject *state;
|
|
|
|
int weightA = 1;
|
|
|
|
int weightB = 0;
|
|
|
|
|
2019-01-11 10:01:14 -04:00
|
|
|
if (!_PyArg_CheckPositional("ratecv", nargs, 6, 8)) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!PyBuffer_IsContiguous(&fragment, 'C')) {
|
|
|
|
_PyArg_BadArgument("ratecv", 1, "contiguous buffer", args[0]);
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[1])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
width = _PyLong_AsInt(args[1]);
|
|
|
|
if (width == -1 && PyErr_Occurred()) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[2])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
nchannels = _PyLong_AsInt(args[2]);
|
|
|
|
if (nchannels == -1 && PyErr_Occurred()) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[3])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
2017-01-16 20:35:17 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2019-01-11 10:01:14 -04:00
|
|
|
inrate = _PyLong_AsInt(args[3]);
|
|
|
|
if (inrate == -1 && PyErr_Occurred()) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[4])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
outrate = _PyLong_AsInt(args[4]);
|
|
|
|
if (outrate == -1 && PyErr_Occurred()) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
state = args[5];
|
|
|
|
if (nargs < 7) {
|
|
|
|
goto skip_optional;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[6])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
weightA = _PyLong_AsInt(args[6]);
|
|
|
|
if (weightA == -1 && PyErr_Occurred()) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (nargs < 8) {
|
|
|
|
goto skip_optional;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[7])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
weightB = _PyLong_AsInt(args[7]);
|
|
|
|
if (weightB == -1 && PyErr_Occurred()) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
skip_optional:
|
2014-01-25 05:57:59 -04:00
|
|
|
return_value = audioop_ratecv_impl(module, &fragment, width, nchannels, inrate, outrate, state, weightA, weightB);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
/* Cleanup for fragment */
|
2016-06-09 10:16:06 -03:00
|
|
|
if (fragment.obj) {
|
2014-01-25 05:57:59 -04:00
|
|
|
PyBuffer_Release(&fragment);
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(audioop_lin2ulaw__doc__,
|
2014-02-09 02:15:29 -04:00
|
|
|
"lin2ulaw($module, fragment, width, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
2014-01-25 05:57:59 -04:00
|
|
|
"Convert samples in the audio fragment to u-LAW encoding.");
|
|
|
|
|
|
|
|
#define AUDIOOP_LIN2ULAW_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"lin2ulaw", (PyCFunction)(void(*)(void))audioop_lin2ulaw, METH_FASTCALL, audioop_lin2ulaw__doc__},
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
audioop_lin2ulaw_impl(PyObject *module, Py_buffer *fragment, int width);
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
audioop_lin2ulaw(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2014-01-25 05:57:59 -04:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
Py_buffer fragment = {NULL, NULL};
|
|
|
|
int width;
|
|
|
|
|
2019-01-11 10:01:14 -04:00
|
|
|
if (!_PyArg_CheckPositional("lin2ulaw", nargs, 2, 2)) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!PyBuffer_IsContiguous(&fragment, 'C')) {
|
|
|
|
_PyArg_BadArgument("lin2ulaw", 1, "contiguous buffer", args[0]);
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[1])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
width = _PyLong_AsInt(args[1]);
|
|
|
|
if (width == -1 && PyErr_Occurred()) {
|
2017-01-16 20:35:17 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
return_value = audioop_lin2ulaw_impl(module, &fragment, width);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
/* Cleanup for fragment */
|
2016-06-09 10:16:06 -03:00
|
|
|
if (fragment.obj) {
|
2014-01-25 05:57:59 -04:00
|
|
|
PyBuffer_Release(&fragment);
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(audioop_ulaw2lin__doc__,
|
2014-02-09 02:15:29 -04:00
|
|
|
"ulaw2lin($module, fragment, width, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
2014-01-25 05:57:59 -04:00
|
|
|
"Convert sound fragments in u-LAW encoding to linearly encoded sound fragments.");
|
|
|
|
|
|
|
|
#define AUDIOOP_ULAW2LIN_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"ulaw2lin", (PyCFunction)(void(*)(void))audioop_ulaw2lin, METH_FASTCALL, audioop_ulaw2lin__doc__},
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
audioop_ulaw2lin_impl(PyObject *module, Py_buffer *fragment, int width);
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
audioop_ulaw2lin(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2014-01-25 05:57:59 -04:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
Py_buffer fragment = {NULL, NULL};
|
|
|
|
int width;
|
|
|
|
|
2019-01-11 10:01:14 -04:00
|
|
|
if (!_PyArg_CheckPositional("ulaw2lin", nargs, 2, 2)) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!PyBuffer_IsContiguous(&fragment, 'C')) {
|
|
|
|
_PyArg_BadArgument("ulaw2lin", 1, "contiguous buffer", args[0]);
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[1])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
width = _PyLong_AsInt(args[1]);
|
|
|
|
if (width == -1 && PyErr_Occurred()) {
|
2017-01-16 20:35:17 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
return_value = audioop_ulaw2lin_impl(module, &fragment, width);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
/* Cleanup for fragment */
|
2016-06-09 10:16:06 -03:00
|
|
|
if (fragment.obj) {
|
2014-01-25 05:57:59 -04:00
|
|
|
PyBuffer_Release(&fragment);
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(audioop_lin2alaw__doc__,
|
2014-02-09 02:15:29 -04:00
|
|
|
"lin2alaw($module, fragment, width, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
2014-01-25 05:57:59 -04:00
|
|
|
"Convert samples in the audio fragment to a-LAW encoding.");
|
|
|
|
|
|
|
|
#define AUDIOOP_LIN2ALAW_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"lin2alaw", (PyCFunction)(void(*)(void))audioop_lin2alaw, METH_FASTCALL, audioop_lin2alaw__doc__},
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
audioop_lin2alaw_impl(PyObject *module, Py_buffer *fragment, int width);
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
audioop_lin2alaw(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2014-01-25 05:57:59 -04:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
Py_buffer fragment = {NULL, NULL};
|
|
|
|
int width;
|
|
|
|
|
2019-01-11 10:01:14 -04:00
|
|
|
if (!_PyArg_CheckPositional("lin2alaw", nargs, 2, 2)) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!PyBuffer_IsContiguous(&fragment, 'C')) {
|
|
|
|
_PyArg_BadArgument("lin2alaw", 1, "contiguous buffer", args[0]);
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[1])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
width = _PyLong_AsInt(args[1]);
|
|
|
|
if (width == -1 && PyErr_Occurred()) {
|
2017-01-16 20:35:17 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
return_value = audioop_lin2alaw_impl(module, &fragment, width);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
/* Cleanup for fragment */
|
2016-06-09 10:16:06 -03:00
|
|
|
if (fragment.obj) {
|
2014-01-25 05:57:59 -04:00
|
|
|
PyBuffer_Release(&fragment);
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(audioop_alaw2lin__doc__,
|
2014-02-09 02:15:29 -04:00
|
|
|
"alaw2lin($module, fragment, width, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
2014-01-25 05:57:59 -04:00
|
|
|
"Convert sound fragments in a-LAW encoding to linearly encoded sound fragments.");
|
|
|
|
|
|
|
|
#define AUDIOOP_ALAW2LIN_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"alaw2lin", (PyCFunction)(void(*)(void))audioop_alaw2lin, METH_FASTCALL, audioop_alaw2lin__doc__},
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
audioop_alaw2lin_impl(PyObject *module, Py_buffer *fragment, int width);
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
audioop_alaw2lin(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2014-01-25 05:57:59 -04:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
Py_buffer fragment = {NULL, NULL};
|
|
|
|
int width;
|
|
|
|
|
2019-01-11 10:01:14 -04:00
|
|
|
if (!_PyArg_CheckPositional("alaw2lin", nargs, 2, 2)) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!PyBuffer_IsContiguous(&fragment, 'C')) {
|
|
|
|
_PyArg_BadArgument("alaw2lin", 1, "contiguous buffer", args[0]);
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[1])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
width = _PyLong_AsInt(args[1]);
|
|
|
|
if (width == -1 && PyErr_Occurred()) {
|
2017-01-16 20:35:17 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
return_value = audioop_alaw2lin_impl(module, &fragment, width);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
/* Cleanup for fragment */
|
2016-06-09 10:16:06 -03:00
|
|
|
if (fragment.obj) {
|
2014-01-25 05:57:59 -04:00
|
|
|
PyBuffer_Release(&fragment);
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(audioop_lin2adpcm__doc__,
|
2014-02-09 02:15:29 -04:00
|
|
|
"lin2adpcm($module, fragment, width, state, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
2014-01-25 05:57:59 -04:00
|
|
|
"Convert samples to 4 bit Intel/DVI ADPCM encoding.");
|
|
|
|
|
|
|
|
#define AUDIOOP_LIN2ADPCM_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"lin2adpcm", (PyCFunction)(void(*)(void))audioop_lin2adpcm, METH_FASTCALL, audioop_lin2adpcm__doc__},
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
audioop_lin2adpcm_impl(PyObject *module, Py_buffer *fragment, int width,
|
2015-04-14 19:07:59 -03:00
|
|
|
PyObject *state);
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
audioop_lin2adpcm(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2014-01-25 05:57:59 -04:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
Py_buffer fragment = {NULL, NULL};
|
|
|
|
int width;
|
|
|
|
PyObject *state;
|
|
|
|
|
2019-01-11 10:01:14 -04:00
|
|
|
if (!_PyArg_CheckPositional("lin2adpcm", nargs, 3, 3)) {
|
2017-01-16 20:35:17 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2019-01-11 10:01:14 -04:00
|
|
|
if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!PyBuffer_IsContiguous(&fragment, 'C')) {
|
|
|
|
_PyArg_BadArgument("lin2adpcm", 1, "contiguous buffer", args[0]);
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[1])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
width = _PyLong_AsInt(args[1]);
|
|
|
|
if (width == -1 && PyErr_Occurred()) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
state = args[2];
|
2014-01-25 05:57:59 -04:00
|
|
|
return_value = audioop_lin2adpcm_impl(module, &fragment, width, state);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
/* Cleanup for fragment */
|
2016-06-09 10:16:06 -03:00
|
|
|
if (fragment.obj) {
|
2014-01-25 05:57:59 -04:00
|
|
|
PyBuffer_Release(&fragment);
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(audioop_adpcm2lin__doc__,
|
2014-02-09 02:15:29 -04:00
|
|
|
"adpcm2lin($module, fragment, width, state, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
2014-01-25 05:57:59 -04:00
|
|
|
"Decode an Intel/DVI ADPCM coded fragment to a linear fragment.");
|
|
|
|
|
|
|
|
#define AUDIOOP_ADPCM2LIN_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"adpcm2lin", (PyCFunction)(void(*)(void))audioop_adpcm2lin, METH_FASTCALL, audioop_adpcm2lin__doc__},
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
audioop_adpcm2lin_impl(PyObject *module, Py_buffer *fragment, int width,
|
2015-04-14 19:07:59 -03:00
|
|
|
PyObject *state);
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
audioop_adpcm2lin(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2014-01-25 05:57:59 -04:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
Py_buffer fragment = {NULL, NULL};
|
|
|
|
int width;
|
|
|
|
PyObject *state;
|
|
|
|
|
2019-01-11 10:01:14 -04:00
|
|
|
if (!_PyArg_CheckPositional("adpcm2lin", nargs, 3, 3)) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!PyBuffer_IsContiguous(&fragment, 'C')) {
|
|
|
|
_PyArg_BadArgument("adpcm2lin", 1, "contiguous buffer", args[0]);
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyFloat_Check(args[1])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
width = _PyLong_AsInt(args[1]);
|
|
|
|
if (width == -1 && PyErr_Occurred()) {
|
2017-01-16 20:35:17 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2019-01-11 10:01:14 -04:00
|
|
|
state = args[2];
|
2014-01-25 05:57:59 -04:00
|
|
|
return_value = audioop_adpcm2lin_impl(module, &fragment, width, state);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
/* Cleanup for fragment */
|
2016-06-09 10:16:06 -03:00
|
|
|
if (fragment.obj) {
|
2014-01-25 05:57:59 -04:00
|
|
|
PyBuffer_Release(&fragment);
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2014-01-25 05:57:59 -04:00
|
|
|
|
|
|
|
return return_value;
|
|
|
|
}
|
2019-08-24 23:45:12 -03:00
|
|
|
/*[clinic end generated code: output=af32f4bce9c934fa input=a9049054013a1b77]*/
|