Branch data Line data Source code
1 : : /*[clinic input]
2 : : preserve
3 : : [clinic start generated code]*/
4 : :
5 : : PyDoc_STRVAR(audioop_getsample__doc__,
6 : : "getsample($module, fragment, width, index, /)\n"
7 : : "--\n"
8 : : "\n"
9 : : "Return the value of sample index from the fragment.");
10 : :
11 : : #define AUDIOOP_GETSAMPLE_METHODDEF \
12 : : {"getsample", _PyCFunction_CAST(audioop_getsample), METH_FASTCALL, audioop_getsample__doc__},
13 : :
14 : : static PyObject *
15 : : audioop_getsample_impl(PyObject *module, Py_buffer *fragment, int width,
16 : : Py_ssize_t index);
17 : :
18 : : static PyObject *
19 : 33 : audioop_getsample(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
20 : : {
21 : 33 : PyObject *return_value = NULL;
22 : 33 : Py_buffer fragment = {NULL, NULL};
23 : : int width;
24 : : Py_ssize_t index;
25 : :
26 [ + - - + : 33 : if (!_PyArg_CheckPositional("getsample", nargs, 3, 3)) {
- - ]
27 : 0 : goto exit;
28 : : }
29 [ + + ]: 33 : if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
30 : 1 : goto exit;
31 : : }
32 [ - + ]: 32 : if (!PyBuffer_IsContiguous(&fragment, 'C')) {
33 : 0 : _PyArg_BadArgument("getsample", "argument 1", "contiguous buffer", args[0]);
34 : 0 : goto exit;
35 : : }
36 : 32 : width = _PyLong_AsInt(args[1]);
37 [ - + - - ]: 32 : if (width == -1 && PyErr_Occurred()) {
38 : 0 : goto exit;
39 : : }
40 : : {
41 : 32 : Py_ssize_t ival = -1;
42 : 32 : PyObject *iobj = _PyNumber_Index(args[2]);
43 [ + - ]: 32 : if (iobj != NULL) {
44 : 32 : ival = PyLong_AsSsize_t(iobj);
45 : 32 : Py_DECREF(iobj);
46 : : }
47 [ - + - - ]: 32 : if (ival == -1 && PyErr_Occurred()) {
48 : 0 : goto exit;
49 : : }
50 : 32 : index = ival;
51 : : }
52 : 32 : return_value = audioop_getsample_impl(module, &fragment, width, index);
53 : :
54 : 33 : exit:
55 : : /* Cleanup for fragment */
56 [ + + ]: 33 : if (fragment.obj) {
57 : 32 : PyBuffer_Release(&fragment);
58 : : }
59 : :
60 : 33 : return return_value;
61 : : }
62 : :
63 : : PyDoc_STRVAR(audioop_max__doc__,
64 : : "max($module, fragment, width, /)\n"
65 : : "--\n"
66 : : "\n"
67 : : "Return the maximum of the absolute value of all samples in a fragment.");
68 : :
69 : : #define AUDIOOP_MAX_METHODDEF \
70 : : {"max", _PyCFunction_CAST(audioop_max), METH_FASTCALL, audioop_max__doc__},
71 : :
72 : : static PyObject *
73 : : audioop_max_impl(PyObject *module, Py_buffer *fragment, int width);
74 : :
75 : : static PyObject *
76 : 37 : audioop_max(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
77 : : {
78 : 37 : PyObject *return_value = NULL;
79 : 37 : Py_buffer fragment = {NULL, NULL};
80 : : int width;
81 : :
82 [ + - - + : 37 : if (!_PyArg_CheckPositional("max", nargs, 2, 2)) {
- - ]
83 : 0 : goto exit;
84 : : }
85 [ + + ]: 37 : if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
86 : 1 : goto exit;
87 : : }
88 [ - + ]: 36 : if (!PyBuffer_IsContiguous(&fragment, 'C')) {
89 : 0 : _PyArg_BadArgument("max", "argument 1", "contiguous buffer", args[0]);
90 : 0 : goto exit;
91 : : }
92 : 36 : width = _PyLong_AsInt(args[1]);
93 [ - + - - ]: 36 : if (width == -1 && PyErr_Occurred()) {
94 : 0 : goto exit;
95 : : }
96 : 36 : return_value = audioop_max_impl(module, &fragment, width);
97 : :
98 : 37 : exit:
99 : : /* Cleanup for fragment */
100 [ + + ]: 37 : if (fragment.obj) {
101 : 36 : PyBuffer_Release(&fragment);
102 : : }
103 : :
104 : 37 : return return_value;
105 : : }
106 : :
107 : : PyDoc_STRVAR(audioop_minmax__doc__,
108 : : "minmax($module, fragment, width, /)\n"
109 : : "--\n"
110 : : "\n"
111 : : "Return the minimum and maximum values of all samples in the sound fragment.");
112 : :
113 : : #define AUDIOOP_MINMAX_METHODDEF \
114 : : {"minmax", _PyCFunction_CAST(audioop_minmax), METH_FASTCALL, audioop_minmax__doc__},
115 : :
116 : : static PyObject *
117 : : audioop_minmax_impl(PyObject *module, Py_buffer *fragment, int width);
118 : :
119 : : static PyObject *
120 : 37 : audioop_minmax(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
121 : : {
122 : 37 : PyObject *return_value = NULL;
123 : 37 : Py_buffer fragment = {NULL, NULL};
124 : : int width;
125 : :
126 [ + - - + : 37 : if (!_PyArg_CheckPositional("minmax", nargs, 2, 2)) {
- - ]
127 : 0 : goto exit;
128 : : }
129 [ + + ]: 37 : if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
130 : 1 : goto exit;
131 : : }
132 [ - + ]: 36 : if (!PyBuffer_IsContiguous(&fragment, 'C')) {
133 : 0 : _PyArg_BadArgument("minmax", "argument 1", "contiguous buffer", args[0]);
134 : 0 : goto exit;
135 : : }
136 : 36 : width = _PyLong_AsInt(args[1]);
137 [ - + - - ]: 36 : if (width == -1 && PyErr_Occurred()) {
138 : 0 : goto exit;
139 : : }
140 : 36 : return_value = audioop_minmax_impl(module, &fragment, width);
141 : :
142 : 37 : exit:
143 : : /* Cleanup for fragment */
144 [ + + ]: 37 : if (fragment.obj) {
145 : 36 : PyBuffer_Release(&fragment);
146 : : }
147 : :
148 : 37 : return return_value;
149 : : }
150 : :
151 : : PyDoc_STRVAR(audioop_avg__doc__,
152 : : "avg($module, fragment, width, /)\n"
153 : : "--\n"
154 : : "\n"
155 : : "Return the average over all samples in the fragment.");
156 : :
157 : : #define AUDIOOP_AVG_METHODDEF \
158 : : {"avg", _PyCFunction_CAST(audioop_avg), METH_FASTCALL, audioop_avg__doc__},
159 : :
160 : : static PyObject *
161 : : audioop_avg_impl(PyObject *module, Py_buffer *fragment, int width);
162 : :
163 : : static PyObject *
164 : 39 : audioop_avg(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
165 : : {
166 : 39 : PyObject *return_value = NULL;
167 : 39 : Py_buffer fragment = {NULL, NULL};
168 : : int width;
169 : :
170 [ + - - + : 39 : if (!_PyArg_CheckPositional("avg", nargs, 2, 2)) {
- - ]
171 : 0 : goto exit;
172 : : }
173 [ + + ]: 39 : if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
174 : 1 : goto exit;
175 : : }
176 [ - + ]: 38 : if (!PyBuffer_IsContiguous(&fragment, 'C')) {
177 : 0 : _PyArg_BadArgument("avg", "argument 1", "contiguous buffer", args[0]);
178 : 0 : goto exit;
179 : : }
180 : 38 : width = _PyLong_AsInt(args[1]);
181 [ - + - - ]: 38 : if (width == -1 && PyErr_Occurred()) {
182 : 0 : goto exit;
183 : : }
184 : 38 : return_value = audioop_avg_impl(module, &fragment, width);
185 : :
186 : 39 : exit:
187 : : /* Cleanup for fragment */
188 [ + + ]: 39 : if (fragment.obj) {
189 : 38 : PyBuffer_Release(&fragment);
190 : : }
191 : :
192 : 39 : return return_value;
193 : : }
194 : :
195 : : PyDoc_STRVAR(audioop_rms__doc__,
196 : : "rms($module, fragment, width, /)\n"
197 : : "--\n"
198 : : "\n"
199 : : "Return the root-mean-square of the fragment, i.e. sqrt(sum(S_i^2)/n).");
200 : :
201 : : #define AUDIOOP_RMS_METHODDEF \
202 : : {"rms", _PyCFunction_CAST(audioop_rms), METH_FASTCALL, audioop_rms__doc__},
203 : :
204 : : static PyObject *
205 : : audioop_rms_impl(PyObject *module, Py_buffer *fragment, int width);
206 : :
207 : : static PyObject *
208 : 33 : audioop_rms(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
209 : : {
210 : 33 : PyObject *return_value = NULL;
211 : 33 : Py_buffer fragment = {NULL, NULL};
212 : : int width;
213 : :
214 [ + - - + : 33 : if (!_PyArg_CheckPositional("rms", nargs, 2, 2)) {
- - ]
215 : 0 : goto exit;
216 : : }
217 [ + + ]: 33 : if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
218 : 1 : goto exit;
219 : : }
220 [ - + ]: 32 : if (!PyBuffer_IsContiguous(&fragment, 'C')) {
221 : 0 : _PyArg_BadArgument("rms", "argument 1", "contiguous buffer", args[0]);
222 : 0 : goto exit;
223 : : }
224 : 32 : width = _PyLong_AsInt(args[1]);
225 [ - + - - ]: 32 : if (width == -1 && PyErr_Occurred()) {
226 : 0 : goto exit;
227 : : }
228 : 32 : return_value = audioop_rms_impl(module, &fragment, width);
229 : :
230 : 33 : exit:
231 : : /* Cleanup for fragment */
232 [ + + ]: 33 : if (fragment.obj) {
233 : 32 : PyBuffer_Release(&fragment);
234 : : }
235 : :
236 : 33 : return return_value;
237 : : }
238 : :
239 : : PyDoc_STRVAR(audioop_findfit__doc__,
240 : : "findfit($module, fragment, reference, /)\n"
241 : : "--\n"
242 : : "\n"
243 : : "Try to match reference as well as possible to a portion of fragment.");
244 : :
245 : : #define AUDIOOP_FINDFIT_METHODDEF \
246 : : {"findfit", _PyCFunction_CAST(audioop_findfit), METH_FASTCALL, audioop_findfit__doc__},
247 : :
248 : : static PyObject *
249 : : audioop_findfit_impl(PyObject *module, Py_buffer *fragment,
250 : : Py_buffer *reference);
251 : :
252 : : static PyObject *
253 : 5 : audioop_findfit(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
254 : : {
255 : 5 : PyObject *return_value = NULL;
256 : 5 : Py_buffer fragment = {NULL, NULL};
257 : 5 : Py_buffer reference = {NULL, NULL};
258 : :
259 [ + - - + : 5 : if (!_PyArg_CheckPositional("findfit", nargs, 2, 2)) {
- - ]
260 : 0 : goto exit;
261 : : }
262 [ - + ]: 5 : if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
263 : 0 : goto exit;
264 : : }
265 [ - + ]: 5 : if (!PyBuffer_IsContiguous(&fragment, 'C')) {
266 : 0 : _PyArg_BadArgument("findfit", "argument 1", "contiguous buffer", args[0]);
267 : 0 : goto exit;
268 : : }
269 [ - + ]: 5 : if (PyObject_GetBuffer(args[1], &reference, PyBUF_SIMPLE) != 0) {
270 : 0 : goto exit;
271 : : }
272 [ - + ]: 5 : if (!PyBuffer_IsContiguous(&reference, 'C')) {
273 : 0 : _PyArg_BadArgument("findfit", "argument 2", "contiguous buffer", args[1]);
274 : 0 : goto exit;
275 : : }
276 : 5 : return_value = audioop_findfit_impl(module, &fragment, &reference);
277 : :
278 : 5 : exit:
279 : : /* Cleanup for fragment */
280 [ + - ]: 5 : if (fragment.obj) {
281 : 5 : PyBuffer_Release(&fragment);
282 : : }
283 : : /* Cleanup for reference */
284 [ + - ]: 5 : if (reference.obj) {
285 : 5 : PyBuffer_Release(&reference);
286 : : }
287 : :
288 : 5 : return return_value;
289 : : }
290 : :
291 : : PyDoc_STRVAR(audioop_findfactor__doc__,
292 : : "findfactor($module, fragment, reference, /)\n"
293 : : "--\n"
294 : : "\n"
295 : : "Return a factor F such that rms(add(fragment, mul(reference, -F))) is minimal.");
296 : :
297 : : #define AUDIOOP_FINDFACTOR_METHODDEF \
298 : : {"findfactor", _PyCFunction_CAST(audioop_findfactor), METH_FASTCALL, audioop_findfactor__doc__},
299 : :
300 : : static PyObject *
301 : : audioop_findfactor_impl(PyObject *module, Py_buffer *fragment,
302 : : Py_buffer *reference);
303 : :
304 : : static PyObject *
305 : 4 : audioop_findfactor(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
306 : : {
307 : 4 : PyObject *return_value = NULL;
308 : 4 : Py_buffer fragment = {NULL, NULL};
309 : 4 : Py_buffer reference = {NULL, NULL};
310 : :
311 [ + - - + : 4 : if (!_PyArg_CheckPositional("findfactor", nargs, 2, 2)) {
- - ]
312 : 0 : goto exit;
313 : : }
314 [ - + ]: 4 : if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
315 : 0 : goto exit;
316 : : }
317 [ - + ]: 4 : if (!PyBuffer_IsContiguous(&fragment, 'C')) {
318 : 0 : _PyArg_BadArgument("findfactor", "argument 1", "contiguous buffer", args[0]);
319 : 0 : goto exit;
320 : : }
321 [ - + ]: 4 : if (PyObject_GetBuffer(args[1], &reference, PyBUF_SIMPLE) != 0) {
322 : 0 : goto exit;
323 : : }
324 [ - + ]: 4 : if (!PyBuffer_IsContiguous(&reference, 'C')) {
325 : 0 : _PyArg_BadArgument("findfactor", "argument 2", "contiguous buffer", args[1]);
326 : 0 : goto exit;
327 : : }
328 : 4 : return_value = audioop_findfactor_impl(module, &fragment, &reference);
329 : :
330 : 4 : exit:
331 : : /* Cleanup for fragment */
332 [ + - ]: 4 : if (fragment.obj) {
333 : 4 : PyBuffer_Release(&fragment);
334 : : }
335 : : /* Cleanup for reference */
336 [ + - ]: 4 : if (reference.obj) {
337 : 4 : PyBuffer_Release(&reference);
338 : : }
339 : :
340 : 4 : return return_value;
341 : : }
342 : :
343 : : PyDoc_STRVAR(audioop_findmax__doc__,
344 : : "findmax($module, fragment, length, /)\n"
345 : : "--\n"
346 : : "\n"
347 : : "Search fragment for a slice of specified number of samples with maximum energy.");
348 : :
349 : : #define AUDIOOP_FINDMAX_METHODDEF \
350 : : {"findmax", _PyCFunction_CAST(audioop_findmax), METH_FASTCALL, audioop_findmax__doc__},
351 : :
352 : : static PyObject *
353 : : audioop_findmax_impl(PyObject *module, Py_buffer *fragment,
354 : : Py_ssize_t length);
355 : :
356 : : static PyObject *
357 : 4 : audioop_findmax(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
358 : : {
359 : 4 : PyObject *return_value = NULL;
360 : 4 : Py_buffer fragment = {NULL, NULL};
361 : : Py_ssize_t length;
362 : :
363 [ + - - + : 4 : if (!_PyArg_CheckPositional("findmax", nargs, 2, 2)) {
- - ]
364 : 0 : goto exit;
365 : : }
366 [ - + ]: 4 : if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
367 : 0 : goto exit;
368 : : }
369 [ - + ]: 4 : if (!PyBuffer_IsContiguous(&fragment, 'C')) {
370 : 0 : _PyArg_BadArgument("findmax", "argument 1", "contiguous buffer", args[0]);
371 : 0 : goto exit;
372 : : }
373 : : {
374 : 4 : Py_ssize_t ival = -1;
375 : 4 : PyObject *iobj = _PyNumber_Index(args[1]);
376 [ + - ]: 4 : if (iobj != NULL) {
377 : 4 : ival = PyLong_AsSsize_t(iobj);
378 : 4 : Py_DECREF(iobj);
379 : : }
380 [ - + - - ]: 4 : if (ival == -1 && PyErr_Occurred()) {
381 : 0 : goto exit;
382 : : }
383 : 4 : length = ival;
384 : : }
385 : 4 : return_value = audioop_findmax_impl(module, &fragment, length);
386 : :
387 : 4 : exit:
388 : : /* Cleanup for fragment */
389 [ + - ]: 4 : if (fragment.obj) {
390 : 4 : PyBuffer_Release(&fragment);
391 : : }
392 : :
393 : 4 : return return_value;
394 : : }
395 : :
396 : : PyDoc_STRVAR(audioop_avgpp__doc__,
397 : : "avgpp($module, fragment, width, /)\n"
398 : : "--\n"
399 : : "\n"
400 : : "Return the average peak-peak value over all samples in the fragment.");
401 : :
402 : : #define AUDIOOP_AVGPP_METHODDEF \
403 : : {"avgpp", _PyCFunction_CAST(audioop_avgpp), METH_FASTCALL, audioop_avgpp__doc__},
404 : :
405 : : static PyObject *
406 : : audioop_avgpp_impl(PyObject *module, Py_buffer *fragment, int width);
407 : :
408 : : static PyObject *
409 : 29 : audioop_avgpp(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
410 : : {
411 : 29 : PyObject *return_value = NULL;
412 : 29 : Py_buffer fragment = {NULL, NULL};
413 : : int width;
414 : :
415 [ + - - + : 29 : if (!_PyArg_CheckPositional("avgpp", nargs, 2, 2)) {
- - ]
416 : 0 : goto exit;
417 : : }
418 [ + + ]: 29 : if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
419 : 1 : goto exit;
420 : : }
421 [ - + ]: 28 : if (!PyBuffer_IsContiguous(&fragment, 'C')) {
422 : 0 : _PyArg_BadArgument("avgpp", "argument 1", "contiguous buffer", args[0]);
423 : 0 : goto exit;
424 : : }
425 : 28 : width = _PyLong_AsInt(args[1]);
426 [ - + - - ]: 28 : if (width == -1 && PyErr_Occurred()) {
427 : 0 : goto exit;
428 : : }
429 : 28 : return_value = audioop_avgpp_impl(module, &fragment, width);
430 : :
431 : 29 : exit:
432 : : /* Cleanup for fragment */
433 [ + + ]: 29 : if (fragment.obj) {
434 : 28 : PyBuffer_Release(&fragment);
435 : : }
436 : :
437 : 29 : return return_value;
438 : : }
439 : :
440 : : PyDoc_STRVAR(audioop_maxpp__doc__,
441 : : "maxpp($module, fragment, width, /)\n"
442 : : "--\n"
443 : : "\n"
444 : : "Return the maximum peak-peak value in the sound fragment.");
445 : :
446 : : #define AUDIOOP_MAXPP_METHODDEF \
447 : : {"maxpp", _PyCFunction_CAST(audioop_maxpp), METH_FASTCALL, audioop_maxpp__doc__},
448 : :
449 : : static PyObject *
450 : : audioop_maxpp_impl(PyObject *module, Py_buffer *fragment, int width);
451 : :
452 : : static PyObject *
453 : 29 : audioop_maxpp(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
454 : : {
455 : 29 : PyObject *return_value = NULL;
456 : 29 : Py_buffer fragment = {NULL, NULL};
457 : : int width;
458 : :
459 [ + - - + : 29 : if (!_PyArg_CheckPositional("maxpp", nargs, 2, 2)) {
- - ]
460 : 0 : goto exit;
461 : : }
462 [ + + ]: 29 : if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
463 : 1 : goto exit;
464 : : }
465 [ - + ]: 28 : if (!PyBuffer_IsContiguous(&fragment, 'C')) {
466 : 0 : _PyArg_BadArgument("maxpp", "argument 1", "contiguous buffer", args[0]);
467 : 0 : goto exit;
468 : : }
469 : 28 : width = _PyLong_AsInt(args[1]);
470 [ - + - - ]: 28 : if (width == -1 && PyErr_Occurred()) {
471 : 0 : goto exit;
472 : : }
473 : 28 : return_value = audioop_maxpp_impl(module, &fragment, width);
474 : :
475 : 29 : exit:
476 : : /* Cleanup for fragment */
477 [ + + ]: 29 : if (fragment.obj) {
478 : 28 : PyBuffer_Release(&fragment);
479 : : }
480 : :
481 : 29 : return return_value;
482 : : }
483 : :
484 : : PyDoc_STRVAR(audioop_cross__doc__,
485 : : "cross($module, fragment, width, /)\n"
486 : : "--\n"
487 : : "\n"
488 : : "Return the number of zero crossings in the fragment passed as an argument.");
489 : :
490 : : #define AUDIOOP_CROSS_METHODDEF \
491 : : {"cross", _PyCFunction_CAST(audioop_cross), METH_FASTCALL, audioop_cross__doc__},
492 : :
493 : : static PyObject *
494 : : audioop_cross_impl(PyObject *module, Py_buffer *fragment, int width);
495 : :
496 : : static PyObject *
497 : 37 : audioop_cross(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
498 : : {
499 : 37 : PyObject *return_value = NULL;
500 : 37 : Py_buffer fragment = {NULL, NULL};
501 : : int width;
502 : :
503 [ + - - + : 37 : if (!_PyArg_CheckPositional("cross", nargs, 2, 2)) {
- - ]
504 : 0 : goto exit;
505 : : }
506 [ + + ]: 37 : if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
507 : 1 : goto exit;
508 : : }
509 [ - + ]: 36 : if (!PyBuffer_IsContiguous(&fragment, 'C')) {
510 : 0 : _PyArg_BadArgument("cross", "argument 1", "contiguous buffer", args[0]);
511 : 0 : goto exit;
512 : : }
513 : 36 : width = _PyLong_AsInt(args[1]);
514 [ - + - - ]: 36 : if (width == -1 && PyErr_Occurred()) {
515 : 0 : goto exit;
516 : : }
517 : 36 : return_value = audioop_cross_impl(module, &fragment, width);
518 : :
519 : 37 : exit:
520 : : /* Cleanup for fragment */
521 [ + + ]: 37 : if (fragment.obj) {
522 : 36 : PyBuffer_Release(&fragment);
523 : : }
524 : :
525 : 37 : return return_value;
526 : : }
527 : :
528 : : PyDoc_STRVAR(audioop_mul__doc__,
529 : : "mul($module, fragment, width, factor, /)\n"
530 : : "--\n"
531 : : "\n"
532 : : "Return a fragment that has all samples in the original fragment multiplied by the floating-point value factor.");
533 : :
534 : : #define AUDIOOP_MUL_METHODDEF \
535 : : {"mul", _PyCFunction_CAST(audioop_mul), METH_FASTCALL, audioop_mul__doc__},
536 : :
537 : : static PyObject *
538 : : audioop_mul_impl(PyObject *module, Py_buffer *fragment, int width,
539 : : double factor);
540 : :
541 : : static PyObject *
542 : 29 : audioop_mul(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
543 : : {
544 : 29 : PyObject *return_value = NULL;
545 : 29 : Py_buffer fragment = {NULL, NULL};
546 : : int width;
547 : : double factor;
548 : :
549 [ + - - + : 29 : if (!_PyArg_CheckPositional("mul", nargs, 3, 3)) {
- - ]
550 : 0 : goto exit;
551 : : }
552 [ + + ]: 29 : if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
553 : 1 : goto exit;
554 : : }
555 [ - + ]: 28 : if (!PyBuffer_IsContiguous(&fragment, 'C')) {
556 : 0 : _PyArg_BadArgument("mul", "argument 1", "contiguous buffer", args[0]);
557 : 0 : goto exit;
558 : : }
559 : 28 : width = _PyLong_AsInt(args[1]);
560 [ - + - - ]: 28 : if (width == -1 && PyErr_Occurred()) {
561 : 0 : goto exit;
562 : : }
563 [ + + ]: 28 : if (PyFloat_CheckExact(args[2])) {
564 : 4 : factor = PyFloat_AS_DOUBLE(args[2]);
565 : : }
566 : : else
567 : : {
568 : 24 : factor = PyFloat_AsDouble(args[2]);
569 [ - + - - ]: 24 : if (factor == -1.0 && PyErr_Occurred()) {
570 : 0 : goto exit;
571 : : }
572 : : }
573 : 28 : return_value = audioop_mul_impl(module, &fragment, width, factor);
574 : :
575 : 29 : exit:
576 : : /* Cleanup for fragment */
577 [ + + ]: 29 : if (fragment.obj) {
578 : 28 : PyBuffer_Release(&fragment);
579 : : }
580 : :
581 : 29 : return return_value;
582 : : }
583 : :
584 : : PyDoc_STRVAR(audioop_tomono__doc__,
585 : : "tomono($module, fragment, width, lfactor, rfactor, /)\n"
586 : : "--\n"
587 : : "\n"
588 : : "Convert a stereo fragment to a mono fragment.");
589 : :
590 : : #define AUDIOOP_TOMONO_METHODDEF \
591 : : {"tomono", _PyCFunction_CAST(audioop_tomono), METH_FASTCALL, audioop_tomono__doc__},
592 : :
593 : : static PyObject *
594 : : audioop_tomono_impl(PyObject *module, Py_buffer *fragment, int width,
595 : : double lfactor, double rfactor);
596 : :
597 : : static PyObject *
598 : 25 : audioop_tomono(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
599 : : {
600 : 25 : PyObject *return_value = NULL;
601 : 25 : Py_buffer fragment = {NULL, NULL};
602 : : int width;
603 : : double lfactor;
604 : : double rfactor;
605 : :
606 [ + - - + : 25 : if (!_PyArg_CheckPositional("tomono", nargs, 4, 4)) {
- - ]
607 : 0 : goto exit;
608 : : }
609 [ + + ]: 25 : if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
610 : 1 : goto exit;
611 : : }
612 [ - + ]: 24 : if (!PyBuffer_IsContiguous(&fragment, 'C')) {
613 : 0 : _PyArg_BadArgument("tomono", "argument 1", "contiguous buffer", args[0]);
614 : 0 : goto exit;
615 : : }
616 : 24 : width = _PyLong_AsInt(args[1]);
617 [ - + - - ]: 24 : if (width == -1 && PyErr_Occurred()) {
618 : 0 : goto exit;
619 : : }
620 [ + + ]: 24 : if (PyFloat_CheckExact(args[2])) {
621 : 16 : lfactor = PyFloat_AS_DOUBLE(args[2]);
622 : : }
623 : : else
624 : : {
625 : 8 : lfactor = PyFloat_AsDouble(args[2]);
626 [ - + - - ]: 8 : if (lfactor == -1.0 && PyErr_Occurred()) {
627 : 0 : goto exit;
628 : : }
629 : : }
630 [ + + ]: 24 : if (PyFloat_CheckExact(args[3])) {
631 : 16 : rfactor = PyFloat_AS_DOUBLE(args[3]);
632 : : }
633 : : else
634 : : {
635 : 8 : rfactor = PyFloat_AsDouble(args[3]);
636 [ - + - - ]: 8 : if (rfactor == -1.0 && PyErr_Occurred()) {
637 : 0 : goto exit;
638 : : }
639 : : }
640 : 24 : return_value = audioop_tomono_impl(module, &fragment, width, lfactor, rfactor);
641 : :
642 : 25 : exit:
643 : : /* Cleanup for fragment */
644 [ + + ]: 25 : if (fragment.obj) {
645 : 24 : PyBuffer_Release(&fragment);
646 : : }
647 : :
648 : 25 : return return_value;
649 : : }
650 : :
651 : : PyDoc_STRVAR(audioop_tostereo__doc__,
652 : : "tostereo($module, fragment, width, lfactor, rfactor, /)\n"
653 : : "--\n"
654 : : "\n"
655 : : "Generate a stereo fragment from a mono fragment.");
656 : :
657 : : #define AUDIOOP_TOSTEREO_METHODDEF \
658 : : {"tostereo", _PyCFunction_CAST(audioop_tostereo), METH_FASTCALL, audioop_tostereo__doc__},
659 : :
660 : : static PyObject *
661 : : audioop_tostereo_impl(PyObject *module, Py_buffer *fragment, int width,
662 : : double lfactor, double rfactor);
663 : :
664 : : static PyObject *
665 : 25 : audioop_tostereo(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
666 : : {
667 : 25 : PyObject *return_value = NULL;
668 : 25 : Py_buffer fragment = {NULL, NULL};
669 : : int width;
670 : : double lfactor;
671 : : double rfactor;
672 : :
673 [ + - - + : 25 : if (!_PyArg_CheckPositional("tostereo", nargs, 4, 4)) {
- - ]
674 : 0 : goto exit;
675 : : }
676 [ + + ]: 25 : if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
677 : 1 : goto exit;
678 : : }
679 [ - + ]: 24 : if (!PyBuffer_IsContiguous(&fragment, 'C')) {
680 : 0 : _PyArg_BadArgument("tostereo", "argument 1", "contiguous buffer", args[0]);
681 : 0 : goto exit;
682 : : }
683 : 24 : width = _PyLong_AsInt(args[1]);
684 [ - + - - ]: 24 : if (width == -1 && PyErr_Occurred()) {
685 : 0 : goto exit;
686 : : }
687 [ + + ]: 24 : if (PyFloat_CheckExact(args[2])) {
688 : 4 : lfactor = PyFloat_AS_DOUBLE(args[2]);
689 : : }
690 : : else
691 : : {
692 : 20 : lfactor = PyFloat_AsDouble(args[2]);
693 [ - + - - ]: 20 : if (lfactor == -1.0 && PyErr_Occurred()) {
694 : 0 : goto exit;
695 : : }
696 : : }
697 [ + + ]: 24 : if (PyFloat_CheckExact(args[3])) {
698 : 4 : rfactor = PyFloat_AS_DOUBLE(args[3]);
699 : : }
700 : : else
701 : : {
702 : 20 : rfactor = PyFloat_AsDouble(args[3]);
703 [ - + - - ]: 20 : if (rfactor == -1.0 && PyErr_Occurred()) {
704 : 0 : goto exit;
705 : : }
706 : : }
707 : 24 : return_value = audioop_tostereo_impl(module, &fragment, width, lfactor, rfactor);
708 : :
709 : 25 : exit:
710 : : /* Cleanup for fragment */
711 [ + + ]: 25 : if (fragment.obj) {
712 : 24 : PyBuffer_Release(&fragment);
713 : : }
714 : :
715 : 25 : return return_value;
716 : : }
717 : :
718 : : PyDoc_STRVAR(audioop_add__doc__,
719 : : "add($module, fragment1, fragment2, width, /)\n"
720 : : "--\n"
721 : : "\n"
722 : : "Return a fragment which is the addition of the two samples passed as parameters.");
723 : :
724 : : #define AUDIOOP_ADD_METHODDEF \
725 : : {"add", _PyCFunction_CAST(audioop_add), METH_FASTCALL, audioop_add__doc__},
726 : :
727 : : static PyObject *
728 : : audioop_add_impl(PyObject *module, Py_buffer *fragment1,
729 : : Py_buffer *fragment2, int width);
730 : :
731 : : static PyObject *
732 : 25 : audioop_add(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
733 : : {
734 : 25 : PyObject *return_value = NULL;
735 : 25 : Py_buffer fragment1 = {NULL, NULL};
736 : 25 : Py_buffer fragment2 = {NULL, NULL};
737 : : int width;
738 : :
739 [ + - - + : 25 : if (!_PyArg_CheckPositional("add", nargs, 3, 3)) {
- - ]
740 : 0 : goto exit;
741 : : }
742 [ + + ]: 25 : if (PyObject_GetBuffer(args[0], &fragment1, PyBUF_SIMPLE) != 0) {
743 : 1 : goto exit;
744 : : }
745 [ - + ]: 24 : if (!PyBuffer_IsContiguous(&fragment1, 'C')) {
746 : 0 : _PyArg_BadArgument("add", "argument 1", "contiguous buffer", args[0]);
747 : 0 : goto exit;
748 : : }
749 [ - + ]: 24 : if (PyObject_GetBuffer(args[1], &fragment2, PyBUF_SIMPLE) != 0) {
750 : 0 : goto exit;
751 : : }
752 [ - + ]: 24 : if (!PyBuffer_IsContiguous(&fragment2, 'C')) {
753 : 0 : _PyArg_BadArgument("add", "argument 2", "contiguous buffer", args[1]);
754 : 0 : goto exit;
755 : : }
756 : 24 : width = _PyLong_AsInt(args[2]);
757 [ - + - - ]: 24 : if (width == -1 && PyErr_Occurred()) {
758 : 0 : goto exit;
759 : : }
760 : 24 : return_value = audioop_add_impl(module, &fragment1, &fragment2, width);
761 : :
762 : 25 : exit:
763 : : /* Cleanup for fragment1 */
764 [ + + ]: 25 : if (fragment1.obj) {
765 : 24 : PyBuffer_Release(&fragment1);
766 : : }
767 : : /* Cleanup for fragment2 */
768 [ + + ]: 25 : if (fragment2.obj) {
769 : 24 : PyBuffer_Release(&fragment2);
770 : : }
771 : :
772 : 25 : return return_value;
773 : : }
774 : :
775 : : PyDoc_STRVAR(audioop_bias__doc__,
776 : : "bias($module, fragment, width, bias, /)\n"
777 : : "--\n"
778 : : "\n"
779 : : "Return a fragment that is the original fragment with a bias added to each sample.");
780 : :
781 : : #define AUDIOOP_BIAS_METHODDEF \
782 : : {"bias", _PyCFunction_CAST(audioop_bias), METH_FASTCALL, audioop_bias__doc__},
783 : :
784 : : static PyObject *
785 : : audioop_bias_impl(PyObject *module, Py_buffer *fragment, int width, int bias);
786 : :
787 : : static PyObject *
788 : 105 : audioop_bias(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
789 : : {
790 : 105 : PyObject *return_value = NULL;
791 : 105 : Py_buffer fragment = {NULL, NULL};
792 : : int width;
793 : : int bias;
794 : :
795 [ + - - + : 105 : if (!_PyArg_CheckPositional("bias", nargs, 3, 3)) {
- - ]
796 : 0 : goto exit;
797 : : }
798 [ + + ]: 105 : if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
799 : 1 : goto exit;
800 : : }
801 [ - + ]: 104 : if (!PyBuffer_IsContiguous(&fragment, 'C')) {
802 : 0 : _PyArg_BadArgument("bias", "argument 1", "contiguous buffer", args[0]);
803 : 0 : goto exit;
804 : : }
805 : 104 : width = _PyLong_AsInt(args[1]);
806 [ - + - - ]: 104 : if (width == -1 && PyErr_Occurred()) {
807 : 0 : goto exit;
808 : : }
809 : 104 : bias = _PyLong_AsInt(args[2]);
810 [ + + - + ]: 104 : if (bias == -1 && PyErr_Occurred()) {
811 : 0 : goto exit;
812 : : }
813 : 104 : return_value = audioop_bias_impl(module, &fragment, width, bias);
814 : :
815 : 105 : exit:
816 : : /* Cleanup for fragment */
817 [ + + ]: 105 : if (fragment.obj) {
818 : 104 : PyBuffer_Release(&fragment);
819 : : }
820 : :
821 : 105 : return return_value;
822 : : }
823 : :
824 : : PyDoc_STRVAR(audioop_reverse__doc__,
825 : : "reverse($module, fragment, width, /)\n"
826 : : "--\n"
827 : : "\n"
828 : : "Reverse the samples in a fragment and returns the modified fragment.");
829 : :
830 : : #define AUDIOOP_REVERSE_METHODDEF \
831 : : {"reverse", _PyCFunction_CAST(audioop_reverse), METH_FASTCALL, audioop_reverse__doc__},
832 : :
833 : : static PyObject *
834 : : audioop_reverse_impl(PyObject *module, Py_buffer *fragment, int width);
835 : :
836 : : static PyObject *
837 : 21 : audioop_reverse(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
838 : : {
839 : 21 : PyObject *return_value = NULL;
840 : 21 : Py_buffer fragment = {NULL, NULL};
841 : : int width;
842 : :
843 [ + - - + : 21 : if (!_PyArg_CheckPositional("reverse", nargs, 2, 2)) {
- - ]
844 : 0 : goto exit;
845 : : }
846 [ + + ]: 21 : if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
847 : 1 : goto exit;
848 : : }
849 [ - + ]: 20 : if (!PyBuffer_IsContiguous(&fragment, 'C')) {
850 : 0 : _PyArg_BadArgument("reverse", "argument 1", "contiguous buffer", args[0]);
851 : 0 : goto exit;
852 : : }
853 : 20 : width = _PyLong_AsInt(args[1]);
854 [ - + - - ]: 20 : if (width == -1 && PyErr_Occurred()) {
855 : 0 : goto exit;
856 : : }
857 : 20 : return_value = audioop_reverse_impl(module, &fragment, width);
858 : :
859 : 21 : exit:
860 : : /* Cleanup for fragment */
861 [ + + ]: 21 : if (fragment.obj) {
862 : 20 : PyBuffer_Release(&fragment);
863 : : }
864 : :
865 : 21 : return return_value;
866 : : }
867 : :
868 : : PyDoc_STRVAR(audioop_byteswap__doc__,
869 : : "byteswap($module, fragment, width, /)\n"
870 : : "--\n"
871 : : "\n"
872 : : "Convert big-endian samples to little-endian and vice versa.");
873 : :
874 : : #define AUDIOOP_BYTESWAP_METHODDEF \
875 : : {"byteswap", _PyCFunction_CAST(audioop_byteswap), METH_FASTCALL, audioop_byteswap__doc__},
876 : :
877 : : static PyObject *
878 : : audioop_byteswap_impl(PyObject *module, Py_buffer *fragment, int width);
879 : :
880 : : static PyObject *
881 : 23 : audioop_byteswap(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
882 : : {
883 : 23 : PyObject *return_value = NULL;
884 : 23 : Py_buffer fragment = {NULL, NULL};
885 : : int width;
886 : :
887 [ + - - + : 23 : if (!_PyArg_CheckPositional("byteswap", nargs, 2, 2)) {
- - ]
888 : 0 : goto exit;
889 : : }
890 [ - + ]: 23 : if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
891 : 0 : goto exit;
892 : : }
893 [ - + ]: 23 : if (!PyBuffer_IsContiguous(&fragment, 'C')) {
894 : 0 : _PyArg_BadArgument("byteswap", "argument 1", "contiguous buffer", args[0]);
895 : 0 : goto exit;
896 : : }
897 : 23 : width = _PyLong_AsInt(args[1]);
898 [ - + - - ]: 23 : if (width == -1 && PyErr_Occurred()) {
899 : 0 : goto exit;
900 : : }
901 : 23 : return_value = audioop_byteswap_impl(module, &fragment, width);
902 : :
903 : 23 : exit:
904 : : /* Cleanup for fragment */
905 [ + - ]: 23 : if (fragment.obj) {
906 : 23 : PyBuffer_Release(&fragment);
907 : : }
908 : :
909 : 23 : return return_value;
910 : : }
911 : :
912 : : PyDoc_STRVAR(audioop_lin2lin__doc__,
913 : : "lin2lin($module, fragment, width, newwidth, /)\n"
914 : : "--\n"
915 : : "\n"
916 : : "Convert samples between 1-, 2-, 3- and 4-byte formats.");
917 : :
918 : : #define AUDIOOP_LIN2LIN_METHODDEF \
919 : : {"lin2lin", _PyCFunction_CAST(audioop_lin2lin), METH_FASTCALL, audioop_lin2lin__doc__},
920 : :
921 : : static PyObject *
922 : : audioop_lin2lin_impl(PyObject *module, Py_buffer *fragment, int width,
923 : : int newwidth);
924 : :
925 : : static PyObject *
926 : 29 : audioop_lin2lin(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
927 : : {
928 : 29 : PyObject *return_value = NULL;
929 : 29 : Py_buffer fragment = {NULL, NULL};
930 : : int width;
931 : : int newwidth;
932 : :
933 [ + - - + : 29 : if (!_PyArg_CheckPositional("lin2lin", nargs, 3, 3)) {
- - ]
934 : 0 : goto exit;
935 : : }
936 [ + + ]: 29 : if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
937 : 1 : goto exit;
938 : : }
939 [ - + ]: 28 : if (!PyBuffer_IsContiguous(&fragment, 'C')) {
940 : 0 : _PyArg_BadArgument("lin2lin", "argument 1", "contiguous buffer", args[0]);
941 : 0 : goto exit;
942 : : }
943 : 28 : width = _PyLong_AsInt(args[1]);
944 [ - + - - ]: 28 : if (width == -1 && PyErr_Occurred()) {
945 : 0 : goto exit;
946 : : }
947 : 28 : newwidth = _PyLong_AsInt(args[2]);
948 [ - + - - ]: 28 : if (newwidth == -1 && PyErr_Occurred()) {
949 : 0 : goto exit;
950 : : }
951 : 28 : return_value = audioop_lin2lin_impl(module, &fragment, width, newwidth);
952 : :
953 : 29 : exit:
954 : : /* Cleanup for fragment */
955 [ + + ]: 29 : if (fragment.obj) {
956 : 28 : PyBuffer_Release(&fragment);
957 : : }
958 : :
959 : 29 : return return_value;
960 : : }
961 : :
962 : : PyDoc_STRVAR(audioop_ratecv__doc__,
963 : : "ratecv($module, fragment, width, nchannels, inrate, outrate, state,\n"
964 : : " weightA=1, weightB=0, /)\n"
965 : : "--\n"
966 : : "\n"
967 : : "Convert the frame rate of the input fragment.");
968 : :
969 : : #define AUDIOOP_RATECV_METHODDEF \
970 : : {"ratecv", _PyCFunction_CAST(audioop_ratecv), METH_FASTCALL, audioop_ratecv__doc__},
971 : :
972 : : static PyObject *
973 : : audioop_ratecv_impl(PyObject *module, Py_buffer *fragment, int width,
974 : : int nchannels, int inrate, int outrate, PyObject *state,
975 : : int weightA, int weightB);
976 : :
977 : : static PyObject *
978 : 77 : audioop_ratecv(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
979 : : {
980 : 77 : PyObject *return_value = NULL;
981 : 77 : Py_buffer fragment = {NULL, NULL};
982 : : int width;
983 : : int nchannels;
984 : : int inrate;
985 : : int outrate;
986 : : PyObject *state;
987 : 77 : int weightA = 1;
988 : 77 : int weightB = 0;
989 : :
990 [ + - - + : 77 : if (!_PyArg_CheckPositional("ratecv", nargs, 6, 8)) {
- - ]
991 : 0 : goto exit;
992 : : }
993 [ + + ]: 77 : if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
994 : 1 : goto exit;
995 : : }
996 [ - + ]: 76 : if (!PyBuffer_IsContiguous(&fragment, 'C')) {
997 : 0 : _PyArg_BadArgument("ratecv", "argument 1", "contiguous buffer", args[0]);
998 : 0 : goto exit;
999 : : }
1000 : 76 : width = _PyLong_AsInt(args[1]);
1001 [ - + - - ]: 76 : if (width == -1 && PyErr_Occurred()) {
1002 : 0 : goto exit;
1003 : : }
1004 : 76 : nchannels = _PyLong_AsInt(args[2]);
1005 [ - + - - ]: 76 : if (nchannels == -1 && PyErr_Occurred()) {
1006 : 0 : goto exit;
1007 : : }
1008 : 76 : inrate = _PyLong_AsInt(args[3]);
1009 [ - + - - ]: 76 : if (inrate == -1 && PyErr_Occurred()) {
1010 : 0 : goto exit;
1011 : : }
1012 : 76 : outrate = _PyLong_AsInt(args[4]);
1013 [ - + - - ]: 76 : if (outrate == -1 && PyErr_Occurred()) {
1014 : 0 : goto exit;
1015 : : }
1016 : 76 : state = args[5];
1017 [ + + ]: 76 : if (nargs < 7) {
1018 : 64 : goto skip_optional;
1019 : : }
1020 : 12 : weightA = _PyLong_AsInt(args[6]);
1021 [ - + - - ]: 12 : if (weightA == -1 && PyErr_Occurred()) {
1022 : 0 : goto exit;
1023 : : }
1024 [ - + ]: 12 : if (nargs < 8) {
1025 : 0 : goto skip_optional;
1026 : : }
1027 : 12 : weightB = _PyLong_AsInt(args[7]);
1028 [ - + - - ]: 12 : if (weightB == -1 && PyErr_Occurred()) {
1029 : 0 : goto exit;
1030 : : }
1031 : 12 : skip_optional:
1032 : 76 : return_value = audioop_ratecv_impl(module, &fragment, width, nchannels, inrate, outrate, state, weightA, weightB);
1033 : :
1034 : 77 : exit:
1035 : : /* Cleanup for fragment */
1036 [ + + ]: 77 : if (fragment.obj) {
1037 : 76 : PyBuffer_Release(&fragment);
1038 : : }
1039 : :
1040 : 77 : return return_value;
1041 : : }
1042 : :
1043 : : PyDoc_STRVAR(audioop_lin2ulaw__doc__,
1044 : : "lin2ulaw($module, fragment, width, /)\n"
1045 : : "--\n"
1046 : : "\n"
1047 : : "Convert samples in the audio fragment to u-LAW encoding.");
1048 : :
1049 : : #define AUDIOOP_LIN2ULAW_METHODDEF \
1050 : : {"lin2ulaw", _PyCFunction_CAST(audioop_lin2ulaw), METH_FASTCALL, audioop_lin2ulaw__doc__},
1051 : :
1052 : : static PyObject *
1053 : : audioop_lin2ulaw_impl(PyObject *module, Py_buffer *fragment, int width);
1054 : :
1055 : : static PyObject *
1056 : 201 : audioop_lin2ulaw(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
1057 : : {
1058 : 201 : PyObject *return_value = NULL;
1059 : 201 : Py_buffer fragment = {NULL, NULL};
1060 : : int width;
1061 : :
1062 [ + - - + : 201 : if (!_PyArg_CheckPositional("lin2ulaw", nargs, 2, 2)) {
- - ]
1063 : 0 : goto exit;
1064 : : }
1065 [ + + ]: 201 : if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
1066 : 1 : goto exit;
1067 : : }
1068 [ - + ]: 200 : if (!PyBuffer_IsContiguous(&fragment, 'C')) {
1069 : 0 : _PyArg_BadArgument("lin2ulaw", "argument 1", "contiguous buffer", args[0]);
1070 : 0 : goto exit;
1071 : : }
1072 : 200 : width = _PyLong_AsInt(args[1]);
1073 [ - + - - ]: 200 : if (width == -1 && PyErr_Occurred()) {
1074 : 0 : goto exit;
1075 : : }
1076 : 200 : return_value = audioop_lin2ulaw_impl(module, &fragment, width);
1077 : :
1078 : 201 : exit:
1079 : : /* Cleanup for fragment */
1080 [ + + ]: 201 : if (fragment.obj) {
1081 : 200 : PyBuffer_Release(&fragment);
1082 : : }
1083 : :
1084 : 201 : return return_value;
1085 : : }
1086 : :
1087 : : PyDoc_STRVAR(audioop_ulaw2lin__doc__,
1088 : : "ulaw2lin($module, fragment, width, /)\n"
1089 : : "--\n"
1090 : : "\n"
1091 : : "Convert sound fragments in u-LAW encoding to linearly encoded sound fragments.");
1092 : :
1093 : : #define AUDIOOP_ULAW2LIN_METHODDEF \
1094 : : {"ulaw2lin", _PyCFunction_CAST(audioop_ulaw2lin), METH_FASTCALL, audioop_ulaw2lin__doc__},
1095 : :
1096 : : static PyObject *
1097 : : audioop_ulaw2lin_impl(PyObject *module, Py_buffer *fragment, int width);
1098 : :
1099 : : static PyObject *
1100 : 219 : audioop_ulaw2lin(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
1101 : : {
1102 : 219 : PyObject *return_value = NULL;
1103 : 219 : Py_buffer fragment = {NULL, NULL};
1104 : : int width;
1105 : :
1106 [ + - - + : 219 : if (!_PyArg_CheckPositional("ulaw2lin", nargs, 2, 2)) {
- - ]
1107 : 0 : goto exit;
1108 : : }
1109 [ - + ]: 219 : if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
1110 : 0 : goto exit;
1111 : : }
1112 [ - + ]: 219 : if (!PyBuffer_IsContiguous(&fragment, 'C')) {
1113 : 0 : _PyArg_BadArgument("ulaw2lin", "argument 1", "contiguous buffer", args[0]);
1114 : 0 : goto exit;
1115 : : }
1116 : 219 : width = _PyLong_AsInt(args[1]);
1117 [ + + - + ]: 219 : if (width == -1 && PyErr_Occurred()) {
1118 : 0 : goto exit;
1119 : : }
1120 : 219 : return_value = audioop_ulaw2lin_impl(module, &fragment, width);
1121 : :
1122 : 219 : exit:
1123 : : /* Cleanup for fragment */
1124 [ + - ]: 219 : if (fragment.obj) {
1125 : 219 : PyBuffer_Release(&fragment);
1126 : : }
1127 : :
1128 : 219 : return return_value;
1129 : : }
1130 : :
1131 : : PyDoc_STRVAR(audioop_lin2alaw__doc__,
1132 : : "lin2alaw($module, fragment, width, /)\n"
1133 : : "--\n"
1134 : : "\n"
1135 : : "Convert samples in the audio fragment to a-LAW encoding.");
1136 : :
1137 : : #define AUDIOOP_LIN2ALAW_METHODDEF \
1138 : : {"lin2alaw", _PyCFunction_CAST(audioop_lin2alaw), METH_FASTCALL, audioop_lin2alaw__doc__},
1139 : :
1140 : : static PyObject *
1141 : : audioop_lin2alaw_impl(PyObject *module, Py_buffer *fragment, int width);
1142 : :
1143 : : static PyObject *
1144 : 107 : audioop_lin2alaw(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
1145 : : {
1146 : 107 : PyObject *return_value = NULL;
1147 : 107 : Py_buffer fragment = {NULL, NULL};
1148 : : int width;
1149 : :
1150 [ + - - + : 107 : if (!_PyArg_CheckPositional("lin2alaw", nargs, 2, 2)) {
- - ]
1151 : 0 : goto exit;
1152 : : }
1153 [ + + ]: 107 : if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
1154 : 1 : goto exit;
1155 : : }
1156 [ - + ]: 106 : if (!PyBuffer_IsContiguous(&fragment, 'C')) {
1157 : 0 : _PyArg_BadArgument("lin2alaw", "argument 1", "contiguous buffer", args[0]);
1158 : 0 : goto exit;
1159 : : }
1160 : 106 : width = _PyLong_AsInt(args[1]);
1161 [ - + - - ]: 106 : if (width == -1 && PyErr_Occurred()) {
1162 : 0 : goto exit;
1163 : : }
1164 : 106 : return_value = audioop_lin2alaw_impl(module, &fragment, width);
1165 : :
1166 : 107 : exit:
1167 : : /* Cleanup for fragment */
1168 [ + + ]: 107 : if (fragment.obj) {
1169 : 106 : PyBuffer_Release(&fragment);
1170 : : }
1171 : :
1172 : 107 : return return_value;
1173 : : }
1174 : :
1175 : : PyDoc_STRVAR(audioop_alaw2lin__doc__,
1176 : : "alaw2lin($module, fragment, width, /)\n"
1177 : : "--\n"
1178 : : "\n"
1179 : : "Convert sound fragments in a-LAW encoding to linearly encoded sound fragments.");
1180 : :
1181 : : #define AUDIOOP_ALAW2LIN_METHODDEF \
1182 : : {"alaw2lin", _PyCFunction_CAST(audioop_alaw2lin), METH_FASTCALL, audioop_alaw2lin__doc__},
1183 : :
1184 : : static PyObject *
1185 : : audioop_alaw2lin_impl(PyObject *module, Py_buffer *fragment, int width);
1186 : :
1187 : : static PyObject *
1188 : 118 : audioop_alaw2lin(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
1189 : : {
1190 : 118 : PyObject *return_value = NULL;
1191 : 118 : Py_buffer fragment = {NULL, NULL};
1192 : : int width;
1193 : :
1194 [ + - - + : 118 : if (!_PyArg_CheckPositional("alaw2lin", nargs, 2, 2)) {
- - ]
1195 : 0 : goto exit;
1196 : : }
1197 [ - + ]: 118 : if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
1198 : 0 : goto exit;
1199 : : }
1200 [ - + ]: 118 : if (!PyBuffer_IsContiguous(&fragment, 'C')) {
1201 : 0 : _PyArg_BadArgument("alaw2lin", "argument 1", "contiguous buffer", args[0]);
1202 : 0 : goto exit;
1203 : : }
1204 : 118 : width = _PyLong_AsInt(args[1]);
1205 [ + + - + ]: 118 : if (width == -1 && PyErr_Occurred()) {
1206 : 0 : goto exit;
1207 : : }
1208 : 118 : return_value = audioop_alaw2lin_impl(module, &fragment, width);
1209 : :
1210 : 118 : exit:
1211 : : /* Cleanup for fragment */
1212 [ + - ]: 118 : if (fragment.obj) {
1213 : 118 : PyBuffer_Release(&fragment);
1214 : : }
1215 : :
1216 : 118 : return return_value;
1217 : : }
1218 : :
1219 : : PyDoc_STRVAR(audioop_lin2adpcm__doc__,
1220 : : "lin2adpcm($module, fragment, width, state, /)\n"
1221 : : "--\n"
1222 : : "\n"
1223 : : "Convert samples to 4 bit Intel/DVI ADPCM encoding.");
1224 : :
1225 : : #define AUDIOOP_LIN2ADPCM_METHODDEF \
1226 : : {"lin2adpcm", _PyCFunction_CAST(audioop_lin2adpcm), METH_FASTCALL, audioop_lin2adpcm__doc__},
1227 : :
1228 : : static PyObject *
1229 : : audioop_lin2adpcm_impl(PyObject *module, Py_buffer *fragment, int width,
1230 : : PyObject *state);
1231 : :
1232 : : static PyObject *
1233 : 20 : audioop_lin2adpcm(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
1234 : : {
1235 : 20 : PyObject *return_value = NULL;
1236 : 20 : Py_buffer fragment = {NULL, NULL};
1237 : : int width;
1238 : : PyObject *state;
1239 : :
1240 [ + - - + : 20 : if (!_PyArg_CheckPositional("lin2adpcm", nargs, 3, 3)) {
- - ]
1241 : 0 : goto exit;
1242 : : }
1243 [ + + ]: 20 : if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
1244 : 1 : goto exit;
1245 : : }
1246 [ - + ]: 19 : if (!PyBuffer_IsContiguous(&fragment, 'C')) {
1247 : 0 : _PyArg_BadArgument("lin2adpcm", "argument 1", "contiguous buffer", args[0]);
1248 : 0 : goto exit;
1249 : : }
1250 : 19 : width = _PyLong_AsInt(args[1]);
1251 [ - + - - ]: 19 : if (width == -1 && PyErr_Occurred()) {
1252 : 0 : goto exit;
1253 : : }
1254 : 19 : state = args[2];
1255 : 19 : return_value = audioop_lin2adpcm_impl(module, &fragment, width, state);
1256 : :
1257 : 20 : exit:
1258 : : /* Cleanup for fragment */
1259 [ + + ]: 20 : if (fragment.obj) {
1260 : 19 : PyBuffer_Release(&fragment);
1261 : : }
1262 : :
1263 : 20 : return return_value;
1264 : : }
1265 : :
1266 : : PyDoc_STRVAR(audioop_adpcm2lin__doc__,
1267 : : "adpcm2lin($module, fragment, width, state, /)\n"
1268 : : "--\n"
1269 : : "\n"
1270 : : "Decode an Intel/DVI ADPCM coded fragment to a linear fragment.");
1271 : :
1272 : : #define AUDIOOP_ADPCM2LIN_METHODDEF \
1273 : : {"adpcm2lin", _PyCFunction_CAST(audioop_adpcm2lin), METH_FASTCALL, audioop_adpcm2lin__doc__},
1274 : :
1275 : : static PyObject *
1276 : : audioop_adpcm2lin_impl(PyObject *module, Py_buffer *fragment, int width,
1277 : : PyObject *state);
1278 : :
1279 : : static PyObject *
1280 : 19 : audioop_adpcm2lin(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
1281 : : {
1282 : 19 : PyObject *return_value = NULL;
1283 : 19 : Py_buffer fragment = {NULL, NULL};
1284 : : int width;
1285 : : PyObject *state;
1286 : :
1287 [ + - - + : 19 : if (!_PyArg_CheckPositional("adpcm2lin", nargs, 3, 3)) {
- - ]
1288 : 0 : goto exit;
1289 : : }
1290 [ - + ]: 19 : if (PyObject_GetBuffer(args[0], &fragment, PyBUF_SIMPLE) != 0) {
1291 : 0 : goto exit;
1292 : : }
1293 [ - + ]: 19 : if (!PyBuffer_IsContiguous(&fragment, 'C')) {
1294 : 0 : _PyArg_BadArgument("adpcm2lin", "argument 1", "contiguous buffer", args[0]);
1295 : 0 : goto exit;
1296 : : }
1297 : 19 : width = _PyLong_AsInt(args[1]);
1298 [ + + - + ]: 19 : if (width == -1 && PyErr_Occurred()) {
1299 : 0 : goto exit;
1300 : : }
1301 : 19 : state = args[2];
1302 : 19 : return_value = audioop_adpcm2lin_impl(module, &fragment, width, state);
1303 : :
1304 : 19 : exit:
1305 : : /* Cleanup for fragment */
1306 [ + - ]: 19 : if (fragment.obj) {
1307 : 19 : PyBuffer_Release(&fragment);
1308 : : }
1309 : :
1310 : 19 : return return_value;
1311 : : }
1312 : : /*[clinic end generated code: output=a581c3893ef8ad75 input=a9049054013a1b77]*/
|