annotate Modules/audioop.c @ 5817:48b94de85bf3 legacy-trunk

Extensive changes by AMK.
author Guido van Rossum <guido@python.org>
date Thu, 17 Jul 1997 16:29:42 +0000
parents 989f4ff73429
children 2f4a925e8b4b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 /***********************************************************
2061
172ba04a5191 Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents: 2055
diff changeset
2 Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
172ba04a5191 Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents: 2055
diff changeset
3 The Netherlands.
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
4
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 All Rights Reserved
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2506
diff changeset
7 Permission to use, copy, modify, and distribute this software and its
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2506
diff changeset
8 documentation for any purpose and without fee is hereby granted,
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 provided that the above copyright notice appear in all copies and that
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2506
diff changeset
10 both that copyright notice and this permission notice appear in
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 supporting documentation, and that the names of Stichting Mathematisch
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2506
diff changeset
12 Centrum or CWI or Corporation for National Research Initiatives or
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2506
diff changeset
13 CNRI not be used in advertising or publicity pertaining to
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2506
diff changeset
14 distribution of the software without specific, written prior
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2506
diff changeset
15 permission.
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
16
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2506
diff changeset
17 While CWI is the initial source for this software, a modified version
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2506
diff changeset
18 is made available by the Corporation for National Research Initiatives
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2506
diff changeset
19 (CNRI) at the Internet address ftp://ftp.python.org.
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2506
diff changeset
20
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2506
diff changeset
21 STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2506
diff changeset
22 REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2506
diff changeset
23 MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2506
diff changeset
24 CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2506
diff changeset
25 DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2506
diff changeset
26 PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2506
diff changeset
27 TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2506
diff changeset
28 PERFORMANCE OF THIS SOFTWARE.
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
29
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 ******************************************************************/
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
31
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1420
diff changeset
32 /* audioopmodule - Module to detect peak values in arrays */
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1420
diff changeset
33
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
34 #include "Python.h"
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35
1827
f5f3ddfec3c7 Makefile.pre.in: add $(OPT) to link command
Guido van Rossum <guido@python.org>
parents: 1746
diff changeset
36 #if defined(__CHAR_UNSIGNED__)
f5f3ddfec3c7 Makefile.pre.in: add $(OPT) to link command
Guido van Rossum <guido@python.org>
parents: 1746
diff changeset
37 #if defined(signed)
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1420
diff changeset
38 !ERROR!; READ THE SOURCE FILE!;
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1420
diff changeset
39 /* This module currently does not work on systems where only unsigned
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1420
diff changeset
40 characters are available. Take it out of Setup. Sorry. */
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 #endif
1827
f5f3ddfec3c7 Makefile.pre.in: add $(OPT) to link command
Guido van Rossum <guido@python.org>
parents: 1746
diff changeset
42 #endif
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
43
2506
9d6e97d66670 changes for MPW
Guido van Rossum <guido@python.org>
parents: 2150
diff changeset
44 #include "mymath.h"
993
7ce1975f11a9 Added rms, maxpp and avgpp methods.
Jack Jansen <jack.jansen@cwi.nl>
parents: 909
diff changeset
45
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
46 /* Code shamelessly stolen from sox,
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 ** (c) Craig Reese, Joe Campbell and Jeff Poskanzer 1989 */
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
48
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 #define MINLIN -32768
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 #define MAXLIN 32767
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
51 #define LINCLIP(x) do { if ( x < MINLIN ) x = MINLIN ; \
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
52 else if ( x > MAXLIN ) x = MAXLIN; \
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
53 } while ( 0 )
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
54
2150
448435bfeadc Made some more things static, and other cleanup for new naming scheme
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
55 static unsigned char st_linear_to_ulaw( /* int sample */ );
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
56
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 /*
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 ** This macro converts from ulaw to 16 bit linear, faster.
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 **
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 ** Jef Poskanzer
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
61 ** 23 October 1989
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 **
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 ** Input: 8 bit ulaw sample
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 ** Output: signed 16 bit linear sample
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
65 */
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 #define st_ulaw_to_linear(ulawbyte) ulaw_table[ulawbyte]
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
67
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 static int ulaw_table[256] = {
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
69 -32124, -31100, -30076, -29052, -28028, -27004, -25980, -24956,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
70 -23932, -22908, -21884, -20860, -19836, -18812, -17788, -16764,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
71 -15996, -15484, -14972, -14460, -13948, -13436, -12924, -12412,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
72 -11900, -11388, -10876, -10364, -9852, -9340, -8828, -8316,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
73 -7932, -7676, -7420, -7164, -6908, -6652, -6396, -6140,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
74 -5884, -5628, -5372, -5116, -4860, -4604, -4348, -4092,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
75 -3900, -3772, -3644, -3516, -3388, -3260, -3132, -3004,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
76 -2876, -2748, -2620, -2492, -2364, -2236, -2108, -1980,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
77 -1884, -1820, -1756, -1692, -1628, -1564, -1500, -1436,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
78 -1372, -1308, -1244, -1180, -1116, -1052, -988, -924,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
79 -876, -844, -812, -780, -748, -716, -684, -652,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
80 -620, -588, -556, -524, -492, -460, -428, -396,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
81 -372, -356, -340, -324, -308, -292, -276, -260,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
82 -244, -228, -212, -196, -180, -164, -148, -132,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
83 -120, -112, -104, -96, -88, -80, -72, -64,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
84 -56, -48, -40, -32, -24, -16, -8, 0,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
85 32124, 31100, 30076, 29052, 28028, 27004, 25980, 24956,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
86 23932, 22908, 21884, 20860, 19836, 18812, 17788, 16764,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
87 15996, 15484, 14972, 14460, 13948, 13436, 12924, 12412,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
88 11900, 11388, 10876, 10364, 9852, 9340, 8828, 8316,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
89 7932, 7676, 7420, 7164, 6908, 6652, 6396, 6140,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
90 5884, 5628, 5372, 5116, 4860, 4604, 4348, 4092,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
91 3900, 3772, 3644, 3516, 3388, 3260, 3132, 3004,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
92 2876, 2748, 2620, 2492, 2364, 2236, 2108, 1980,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
93 1884, 1820, 1756, 1692, 1628, 1564, 1500, 1436,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
94 1372, 1308, 1244, 1180, 1116, 1052, 988, 924,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
95 876, 844, 812, 780, 748, 716, 684, 652,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
96 620, 588, 556, 524, 492, 460, 428, 396,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
97 372, 356, 340, 324, 308, 292, 276, 260,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
98 244, 228, 212, 196, 180, 164, 148, 132,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
99 120, 112, 104, 96, 88, 80, 72, 64,
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
100 56, 48, 40, 32, 24, 16, 8, 0 };
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
101
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
102 #define ZEROTRAP /* turn on the trap as per the MIL-STD */
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
103 #define BIAS 0x84 /* define the add-in bias for 16 bit samples */
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
104 #define CLIP 32635
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
105
2150
448435bfeadc Made some more things static, and other cleanup for new naming scheme
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
106 static unsigned char
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
107 st_linear_to_ulaw( sample )
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
108 int sample;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
109 {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
110 static int exp_lut[256] = {0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
111 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
112 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
113 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
114 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
115 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
116 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
117 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
118 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
119 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
120 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
121 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
122 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
123 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
124 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
125 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7};
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
126 int sign, exponent, mantissa;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
127 unsigned char ulawbyte;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
128
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
129 /* Get the sample into sign-magnitude. */
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
130 sign = (sample >> 8) & 0x80; /* set aside the sign */
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
131 if ( sign != 0 ) sample = -sample; /* get magnitude */
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
132 if ( sample > CLIP ) sample = CLIP; /* clip the magnitude */
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
133
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
134 /* Convert from 16 bit linear to ulaw. */
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
135 sample = sample + BIAS;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
136 exponent = exp_lut[( sample >> 7 ) & 0xFF];
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
137 mantissa = ( sample >> ( exponent + 3 ) ) & 0x0F;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
138 ulawbyte = ~ ( sign | ( exponent << 4 ) | mantissa );
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
139 #ifdef ZEROTRAP
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
140 if ( ulawbyte == 0 ) ulawbyte = 0x02; /* optional CCITT trap */
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
141 #endif
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
142
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
143 return ulawbyte;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
144 }
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
145 /* End of code taken from sox */
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
146
909
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
147 /* Intel ADPCM step variation table */
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
148 static int indexTable[16] = {
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
149 -1, -1, -1, -1, 2, 4, 6, 8,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
150 -1, -1, -1, -1, 2, 4, 6, 8,
909
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
151 };
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
152
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
153 static int stepsizeTable[89] = {
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
154 7, 8, 9, 10, 11, 12, 13, 14, 16, 17,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
155 19, 21, 23, 25, 28, 31, 34, 37, 41, 45,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
156 50, 55, 60, 66, 73, 80, 88, 97, 107, 118,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
157 130, 143, 157, 173, 190, 209, 230, 253, 279, 307,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
158 337, 371, 408, 449, 494, 544, 598, 658, 724, 796,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
159 876, 963, 1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
160 2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
161 5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
162 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767
909
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
163 };
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
164
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
165 #define CHARP(cp, i) ((signed char *)(cp+i))
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
166 #define SHORTP(cp, i) ((short *)(cp+i))
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
167 #define LONGP(cp, i) ((long *)(cp+i))
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
168
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
169
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
170
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
171 static PyObject *AudioopError;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
172
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
173 static PyObject *
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
174 audioop_getsample(self, args)
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
175 PyObject *self;
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
176 PyObject *args;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
177 {
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
178 signed char *cp;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
179 int len, size, val = 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
180 int i;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
181
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
182 if ( !PyArg_Parse(args, "(s#ii)", &cp, &len, &size, &i) )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
183 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
184 if ( size != 1 && size != 2 && size != 4 ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
185 PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
186 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
187 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
188 if ( i < 0 || i >= len/size ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
189 PyErr_SetString(AudioopError, "Index out of range");
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
190 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
191 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
192 if ( size == 1 ) val = (int)*CHARP(cp, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
193 else if ( size == 2 ) val = (int)*SHORTP(cp, i*2);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
194 else if ( size == 4 ) val = (int)*LONGP(cp, i*4);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
195 return PyInt_FromLong(val);
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
196 }
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
197
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
198 static PyObject *
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
199 audioop_max(self, args)
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
200 PyObject *self;
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
201 PyObject *args;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
202 {
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
203 signed char *cp;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
204 int len, size, val = 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
205 int i;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
206 int max = 0;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
207
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
208 if ( !PyArg_Parse(args, "(s#i)", &cp, &len, &size) )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
209 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
210 if ( size != 1 && size != 2 && size != 4 ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
211 PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
212 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
213 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
214 for ( i=0; i<len; i+= size) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
215 if ( size == 1 ) val = (int)*CHARP(cp, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
216 else if ( size == 2 ) val = (int)*SHORTP(cp, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
217 else if ( size == 4 ) val = (int)*LONGP(cp, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
218 if ( val < 0 ) val = (-val);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
219 if ( val > max ) max = val;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
220 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
221 return PyInt_FromLong(max);
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
222 }
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
223
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
224 static PyObject *
1866
9c5d333d3300 Added minmax function.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1827
diff changeset
225 audioop_minmax(self, args)
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
226 PyObject *self;
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
227 PyObject *args;
1866
9c5d333d3300 Added minmax function.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1827
diff changeset
228 {
9c5d333d3300 Added minmax function.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1827
diff changeset
229 signed char *cp;
4600
d36250aefb82 Keep gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
230 int len, size, val = 0;
1866
9c5d333d3300 Added minmax function.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1827
diff changeset
231 int i;
9c5d333d3300 Added minmax function.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1827
diff changeset
232 int min = 0x7fffffff, max = -0x7fffffff;
9c5d333d3300 Added minmax function.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1827
diff changeset
233
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
234 if (!PyArg_Parse(args, "(s#i)", &cp, &len, &size))
1866
9c5d333d3300 Added minmax function.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1827
diff changeset
235 return NULL;
9c5d333d3300 Added minmax function.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1827
diff changeset
236 if (size != 1 && size != 2 && size != 4) {
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
237 PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
1866
9c5d333d3300 Added minmax function.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1827
diff changeset
238 return NULL;
9c5d333d3300 Added minmax function.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1827
diff changeset
239 }
9c5d333d3300 Added minmax function.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1827
diff changeset
240 for (i = 0; i < len; i += size) {
9c5d333d3300 Added minmax function.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1827
diff changeset
241 if (size == 1) val = (int) *CHARP(cp, i);
9c5d333d3300 Added minmax function.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1827
diff changeset
242 else if (size == 2) val = (int) *SHORTP(cp, i);
9c5d333d3300 Added minmax function.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1827
diff changeset
243 else if (size == 4) val = (int) *LONGP(cp, i);
9c5d333d3300 Added minmax function.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1827
diff changeset
244 if (val > max) max = val;
9c5d333d3300 Added minmax function.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1827
diff changeset
245 if (val < min) min = val;
9c5d333d3300 Added minmax function.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1827
diff changeset
246 }
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
247 return Py_BuildValue("(ii)", min, max);
1866
9c5d333d3300 Added minmax function.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1827
diff changeset
248 }
9c5d333d3300 Added minmax function.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1827
diff changeset
249
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
250 static PyObject *
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
251 audioop_avg(self, args)
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
252 PyObject *self;
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
253 PyObject *args;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
254 {
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
255 signed char *cp;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
256 int len, size, val = 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
257 int i;
5287
5af766a1b531 Tweaks to keep the Microsoft compiler quier.
Guido van Rossum <guido@python.org>
parents: 5095
diff changeset
258 double avg = 0.0;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
259
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
260 if ( !PyArg_Parse(args, "(s#i)", &cp, &len, &size) )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
261 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
262 if ( size != 1 && size != 2 && size != 4 ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
263 PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
264 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
265 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
266 for ( i=0; i<len; i+= size) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
267 if ( size == 1 ) val = (int)*CHARP(cp, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
268 else if ( size == 2 ) val = (int)*SHORTP(cp, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
269 else if ( size == 4 ) val = (int)*LONGP(cp, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
270 avg += val;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
271 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
272 if ( len == 0 )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
273 val = 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
274 else
5287
5af766a1b531 Tweaks to keep the Microsoft compiler quier.
Guido van Rossum <guido@python.org>
parents: 5095
diff changeset
275 val = (int)(avg / (double)(len/size));
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
276 return PyInt_FromLong(val);
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
277 }
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
278
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
279 static PyObject *
993
7ce1975f11a9 Added rms, maxpp and avgpp methods.
Jack Jansen <jack.jansen@cwi.nl>
parents: 909
diff changeset
280 audioop_rms(self, args)
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
281 PyObject *self;
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
282 PyObject *args;
993
7ce1975f11a9 Added rms, maxpp and avgpp methods.
Jack Jansen <jack.jansen@cwi.nl>
parents: 909
diff changeset
283 {
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
284 signed char *cp;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
285 int len, size, val = 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
286 int i;
5287
5af766a1b531 Tweaks to keep the Microsoft compiler quier.
Guido van Rossum <guido@python.org>
parents: 5095
diff changeset
287 double sum_squares = 0.0;
993
7ce1975f11a9 Added rms, maxpp and avgpp methods.
Jack Jansen <jack.jansen@cwi.nl>
parents: 909
diff changeset
288
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
289 if ( !PyArg_Parse(args, "(s#i)", &cp, &len, &size) )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
290 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
291 if ( size != 1 && size != 2 && size != 4 ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
292 PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
293 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
294 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
295 for ( i=0; i<len; i+= size) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
296 if ( size == 1 ) val = (int)*CHARP(cp, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
297 else if ( size == 2 ) val = (int)*SHORTP(cp, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
298 else if ( size == 4 ) val = (int)*LONGP(cp, i);
5287
5af766a1b531 Tweaks to keep the Microsoft compiler quier.
Guido van Rossum <guido@python.org>
parents: 5095
diff changeset
299 sum_squares += (double)val*(double)val;
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
300 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
301 if ( len == 0 )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
302 val = 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
303 else
5287
5af766a1b531 Tweaks to keep the Microsoft compiler quier.
Guido van Rossum <guido@python.org>
parents: 5095
diff changeset
304 val = (int)sqrt(sum_squares / (double)(len/size));
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
305 return PyInt_FromLong(val);
993
7ce1975f11a9 Added rms, maxpp and avgpp methods.
Jack Jansen <jack.jansen@cwi.nl>
parents: 909
diff changeset
306 }
7ce1975f11a9 Added rms, maxpp and avgpp methods.
Jack Jansen <jack.jansen@cwi.nl>
parents: 909
diff changeset
307
2150
448435bfeadc Made some more things static, and other cleanup for new naming scheme
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
308 static double _sum2(a, b, len)
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
309 short *a;
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
310 short *b;
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
311 int len;
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
312 {
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
313 int i;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
314 double sum = 0.0;
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
315
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
316 for( i=0; i<len; i++) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
317 sum = sum + (double)a[i]*(double)b[i];
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
318 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
319 return sum;
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
320 }
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
321
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
322 /*
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
323 ** Findfit tries to locate a sample within another sample. Its main use
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
324 ** is in echo-cancellation (to find the feedback of the output signal in
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
325 ** the input signal).
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
326 ** The method used is as follows:
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
327 **
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
328 ** let R be the reference signal (length n) and A the input signal (length N)
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
329 ** with N > n, and let all sums be over i from 0 to n-1.
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
330 **
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
331 ** Now, for each j in {0..N-n} we compute a factor fj so that -fj*R matches A
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
332 ** as good as possible, i.e. sum( (A[j+i]+fj*R[i])^2 ) is minimal. This
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
333 ** equation gives fj = sum( A[j+i]R[i] ) / sum(R[i]^2).
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
334 **
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
335 ** Next, we compute the relative distance between the original signal and
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
336 ** the modified signal and minimize that over j:
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
337 ** vj = sum( (A[j+i]-fj*R[i])^2 ) / sum( A[j+i]^2 ) =>
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
338 ** vj = ( sum(A[j+i]^2)*sum(R[i]^2) - sum(A[j+i]R[i])^2 ) / sum( A[j+i]^2 )
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
339 **
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
340 ** In the code variables correspond as follows:
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
341 ** cp1 A
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
342 ** cp2 R
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
343 ** len1 N
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
344 ** len2 n
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
345 ** aj_m1 A[j-1]
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
346 ** aj_lm1 A[j+n-1]
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
347 ** sum_ri_2 sum(R[i]^2)
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
348 ** sum_aij_2 sum(A[i+j]^2)
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
349 ** sum_aij_ri sum(A[i+j]R[i])
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
350 **
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
351 ** sum_ri is calculated once, sum_aij_2 is updated each step and sum_aij_ri
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
352 ** is completely recalculated each step.
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
353 */
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
354 static PyObject *
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
355 audioop_findfit(self, args)
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
356 PyObject *self;
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
357 PyObject *args;
1223
5ae4a8cf79ef Added lin2lin, findmax, findfactor and fintfit routines
Jack Jansen <jack.jansen@cwi.nl>
parents: 1213
diff changeset
358 {
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
359 short *cp1, *cp2;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
360 int len1, len2;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
361 int j, best_j;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
362 double aj_m1, aj_lm1;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
363 double sum_ri_2, sum_aij_2, sum_aij_ri, result, best_result, factor;
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
364
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
365 if ( !PyArg_Parse(args, "(s#s#)", &cp1, &len1, &cp2, &len2) )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
366 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
367 if ( len1 & 1 || len2 & 1 ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
368 PyErr_SetString(AudioopError, "Strings should be even-sized");
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
369 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
370 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
371 len1 >>= 1;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
372 len2 >>= 1;
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
373
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
374 if ( len1 < len2 ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
375 PyErr_SetString(AudioopError, "First sample should be longer");
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
376 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
377 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
378 sum_ri_2 = _sum2(cp2, cp2, len2);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
379 sum_aij_2 = _sum2(cp1, cp1, len2);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
380 sum_aij_ri = _sum2(cp1, cp2, len2);
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
381
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
382 result = (sum_ri_2*sum_aij_2 - sum_aij_ri*sum_aij_ri) / sum_aij_2;
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
383
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
384 best_result = result;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
385 best_j = 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
386 j = 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
387
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
388 for ( j=1; j<=len1-len2; j++) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
389 aj_m1 = (double)cp1[j-1];
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
390 aj_lm1 = (double)cp1[j+len2-1];
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
391
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
392 sum_aij_2 = sum_aij_2 + aj_lm1*aj_lm1 - aj_m1*aj_m1;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
393 sum_aij_ri = _sum2(cp1+j, cp2, len2);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
394
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
395 result = (sum_ri_2*sum_aij_2 - sum_aij_ri*sum_aij_ri)
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
396 / sum_aij_2;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
397
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
398 if ( result < best_result ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
399 best_result = result;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
400 best_j = j;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
401 }
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
402
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
403 }
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
404
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
405 factor = _sum2(cp1+best_j, cp2, len2) / sum_ri_2;
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
406
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
407 return Py_BuildValue("(if)", best_j, factor);
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
408 }
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
409
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
410 /*
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
411 ** findfactor finds a factor f so that the energy in A-fB is minimal.
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
412 ** See the comment for findfit for details.
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
413 */
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
414 static PyObject *
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
415 audioop_findfactor(self, args)
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
416 PyObject *self;
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
417 PyObject *args;
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
418 {
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
419 short *cp1, *cp2;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
420 int len1, len2;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
421 double sum_ri_2, sum_aij_ri, result;
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
422
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
423 if ( !PyArg_Parse(args, "(s#s#)", &cp1, &len1, &cp2, &len2) )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
424 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
425 if ( len1 & 1 || len2 & 1 ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
426 PyErr_SetString(AudioopError, "Strings should be even-sized");
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
427 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
428 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
429 if ( len1 != len2 ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
430 PyErr_SetString(AudioopError, "Samples should be same size");
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
431 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
432 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
433 len2 >>= 1;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
434 sum_ri_2 = _sum2(cp2, cp2, len2);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
435 sum_aij_ri = _sum2(cp1, cp2, len2);
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
436
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
437 result = sum_aij_ri / sum_ri_2;
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
438
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
439 return PyFloat_FromDouble(result);
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
440 }
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
441
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
442 /*
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
443 ** findmax returns the index of the n-sized segment of the input sample
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
444 ** that contains the most energy.
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
445 */
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
446 static PyObject *
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
447 audioop_findmax(self, args)
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
448 PyObject *self;
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
449 PyObject *args;
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
450 {
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
451 short *cp1;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
452 int len1, len2;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
453 int j, best_j;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
454 double aj_m1, aj_lm1;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
455 double result, best_result;
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
456
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
457 if ( !PyArg_Parse(args, "(s#i)", &cp1, &len1, &len2) )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
458 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
459 if ( len1 & 1 ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
460 PyErr_SetString(AudioopError, "Strings should be even-sized");
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
461 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
462 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
463 len1 >>= 1;
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
464
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
465 if ( len1 < len2 ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
466 PyErr_SetString(AudioopError, "Input sample should be longer");
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
467 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
468 }
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
469
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
470 result = _sum2(cp1, cp1, len2);
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
471
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
472 best_result = result;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
473 best_j = 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
474 j = 0;
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
475
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
476 for ( j=1; j<=len1-len2; j++) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
477 aj_m1 = (double)cp1[j-1];
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
478 aj_lm1 = (double)cp1[j+len2-1];
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
479
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
480 result = result + aj_lm1*aj_lm1 - aj_m1*aj_m1;
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
481
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
482 if ( result > best_result ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
483 best_result = result;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
484 best_j = j;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
485 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
486
1223
5ae4a8cf79ef Added lin2lin, findmax, findfactor and fintfit routines
Jack Jansen <jack.jansen@cwi.nl>
parents: 1213
diff changeset
487 }
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
488
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
489 return PyInt_FromLong(best_j);
1223
5ae4a8cf79ef Added lin2lin, findmax, findfactor and fintfit routines
Jack Jansen <jack.jansen@cwi.nl>
parents: 1213
diff changeset
490 }
5ae4a8cf79ef Added lin2lin, findmax, findfactor and fintfit routines
Jack Jansen <jack.jansen@cwi.nl>
parents: 1213
diff changeset
491
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
492 static PyObject *
993
7ce1975f11a9 Added rms, maxpp and avgpp methods.
Jack Jansen <jack.jansen@cwi.nl>
parents: 909
diff changeset
493 audioop_avgpp(self, args)
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
494 PyObject *self;
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
495 PyObject *args;
993
7ce1975f11a9 Added rms, maxpp and avgpp methods.
Jack Jansen <jack.jansen@cwi.nl>
parents: 909
diff changeset
496 {
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
497 signed char *cp;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
498 int len, size, val = 0, prevval = 0, prevextremevalid = 0,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
499 prevextreme = 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
500 int i;
5287
5af766a1b531 Tweaks to keep the Microsoft compiler quier.
Guido van Rossum <guido@python.org>
parents: 5095
diff changeset
501 double avg = 0.0;
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
502 int diff, prevdiff, extremediff, nextreme = 0;
993
7ce1975f11a9 Added rms, maxpp and avgpp methods.
Jack Jansen <jack.jansen@cwi.nl>
parents: 909
diff changeset
503
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
504 if ( !PyArg_Parse(args, "(s#i)", &cp, &len, &size) )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
505 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
506 if ( size != 1 && size != 2 && size != 4 ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
507 PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
508 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
509 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
510 /* Compute first delta value ahead. Also automatically makes us
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
511 ** skip the first extreme value
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
512 */
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
513 if ( size == 1 ) prevval = (int)*CHARP(cp, 0);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
514 else if ( size == 2 ) prevval = (int)*SHORTP(cp, 0);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
515 else if ( size == 4 ) prevval = (int)*LONGP(cp, 0);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
516 if ( size == 1 ) val = (int)*CHARP(cp, size);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
517 else if ( size == 2 ) val = (int)*SHORTP(cp, size);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
518 else if ( size == 4 ) val = (int)*LONGP(cp, size);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
519 prevdiff = val - prevval;
993
7ce1975f11a9 Added rms, maxpp and avgpp methods.
Jack Jansen <jack.jansen@cwi.nl>
parents: 909
diff changeset
520
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
521 for ( i=size; i<len; i+= size) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
522 if ( size == 1 ) val = (int)*CHARP(cp, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
523 else if ( size == 2 ) val = (int)*SHORTP(cp, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
524 else if ( size == 4 ) val = (int)*LONGP(cp, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
525 diff = val - prevval;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
526 if ( diff*prevdiff < 0 ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
527 /* Derivative changed sign. Compute difference to last
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
528 ** extreme value and remember.
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
529 */
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
530 if ( prevextremevalid ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
531 extremediff = prevval - prevextreme;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
532 if ( extremediff < 0 )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
533 extremediff = -extremediff;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
534 avg += extremediff;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
535 nextreme++;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
536 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
537 prevextremevalid = 1;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
538 prevextreme = prevval;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
539 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
540 prevval = val;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
541 if ( diff != 0 )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
542 prevdiff = diff;
993
7ce1975f11a9 Added rms, maxpp and avgpp methods.
Jack Jansen <jack.jansen@cwi.nl>
parents: 909
diff changeset
543 }
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
544 if ( nextreme == 0 )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
545 val = 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
546 else
5287
5af766a1b531 Tweaks to keep the Microsoft compiler quier.
Guido van Rossum <guido@python.org>
parents: 5095
diff changeset
547 val = (int)(avg / (double)nextreme);
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
548 return PyInt_FromLong(val);
993
7ce1975f11a9 Added rms, maxpp and avgpp methods.
Jack Jansen <jack.jansen@cwi.nl>
parents: 909
diff changeset
549 }
7ce1975f11a9 Added rms, maxpp and avgpp methods.
Jack Jansen <jack.jansen@cwi.nl>
parents: 909
diff changeset
550
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
551 static PyObject *
993
7ce1975f11a9 Added rms, maxpp and avgpp methods.
Jack Jansen <jack.jansen@cwi.nl>
parents: 909
diff changeset
552 audioop_maxpp(self, args)
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
553 PyObject *self;
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
554 PyObject *args;
993
7ce1975f11a9 Added rms, maxpp and avgpp methods.
Jack Jansen <jack.jansen@cwi.nl>
parents: 909
diff changeset
555 {
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
556 signed char *cp;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
557 int len, size, val = 0, prevval = 0, prevextremevalid = 0,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
558 prevextreme = 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
559 int i;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
560 int max = 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
561 int diff, prevdiff, extremediff;
993
7ce1975f11a9 Added rms, maxpp and avgpp methods.
Jack Jansen <jack.jansen@cwi.nl>
parents: 909
diff changeset
562
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
563 if ( !PyArg_Parse(args, "(s#i)", &cp, &len, &size) )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
564 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
565 if ( size != 1 && size != 2 && size != 4 ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
566 PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
567 return 0;
993
7ce1975f11a9 Added rms, maxpp and avgpp methods.
Jack Jansen <jack.jansen@cwi.nl>
parents: 909
diff changeset
568 }
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
569 /* Compute first delta value ahead. Also automatically makes us
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
570 ** skip the first extreme value
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
571 */
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
572 if ( size == 1 ) prevval = (int)*CHARP(cp, 0);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
573 else if ( size == 2 ) prevval = (int)*SHORTP(cp, 0);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
574 else if ( size == 4 ) prevval = (int)*LONGP(cp, 0);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
575 if ( size == 1 ) val = (int)*CHARP(cp, size);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
576 else if ( size == 2 ) val = (int)*SHORTP(cp, size);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
577 else if ( size == 4 ) val = (int)*LONGP(cp, size);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
578 prevdiff = val - prevval;
993
7ce1975f11a9 Added rms, maxpp and avgpp methods.
Jack Jansen <jack.jansen@cwi.nl>
parents: 909
diff changeset
579
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
580 for ( i=size; i<len; i+= size) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
581 if ( size == 1 ) val = (int)*CHARP(cp, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
582 else if ( size == 2 ) val = (int)*SHORTP(cp, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
583 else if ( size == 4 ) val = (int)*LONGP(cp, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
584 diff = val - prevval;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
585 if ( diff*prevdiff < 0 ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
586 /* Derivative changed sign. Compute difference to
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
587 ** last extreme value and remember.
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
588 */
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
589 if ( prevextremevalid ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
590 extremediff = prevval - prevextreme;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
591 if ( extremediff < 0 )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
592 extremediff = -extremediff;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
593 if ( extremediff > max )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
594 max = extremediff;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
595 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
596 prevextremevalid = 1;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
597 prevextreme = prevval;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
598 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
599 prevval = val;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
600 if ( diff != 0 )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
601 prevdiff = diff;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
602 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
603 return PyInt_FromLong(max);
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
604 }
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
605
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
606 static PyObject *
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
607 audioop_cross(self, args)
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
608 PyObject *self;
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
609 PyObject *args;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
610 {
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
611 signed char *cp;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
612 int len, size, val = 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
613 int i;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
614 int prevval, ncross;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
615
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
616 if ( !PyArg_Parse(args, "(s#i)", &cp, &len, &size) )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
617 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
618 if ( size != 1 && size != 2 && size != 4 ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
619 PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
620 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
621 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
622 ncross = -1;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
623 prevval = 17; /* Anything <> 0,1 */
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
624 for ( i=0; i<len; i+= size) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
625 if ( size == 1 ) val = ((int)*CHARP(cp, i)) >> 7;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
626 else if ( size == 2 ) val = ((int)*SHORTP(cp, i)) >> 15;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
627 else if ( size == 4 ) val = ((int)*LONGP(cp, i)) >> 31;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
628 val = val & 1;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
629 if ( val != prevval ) ncross++;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
630 prevval = val;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
631 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
632 return PyInt_FromLong(ncross);
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
633 }
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
634
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
635 static PyObject *
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
636 audioop_mul(self, args)
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
637 PyObject *self;
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
638 PyObject *args;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
639 {
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
640 signed char *cp, *ncp;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
641 int len, size, val = 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
642 double factor, fval, maxval;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
643 PyObject *rv;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
644 int i;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
645
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
646 if ( !PyArg_Parse(args, "(s#id)", &cp, &len, &size, &factor ) )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
647 return 0;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
648
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
649 if ( size == 1 ) maxval = (double) 0x7f;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
650 else if ( size == 2 ) maxval = (double) 0x7fff;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
651 else if ( size == 4 ) maxval = (double) 0x7fffffff;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
652 else {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
653 PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
654 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
655 }
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
656
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
657 rv = PyString_FromStringAndSize(NULL, len);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
658 if ( rv == 0 )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
659 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
660 ncp = (signed char *)PyString_AsString(rv);
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
661
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
662
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
663 for ( i=0; i < len; i += size ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
664 if ( size == 1 ) val = (int)*CHARP(cp, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
665 else if ( size == 2 ) val = (int)*SHORTP(cp, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
666 else if ( size == 4 ) val = (int)*LONGP(cp, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
667 fval = (double)val*factor;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
668 if ( fval > maxval ) fval = maxval;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
669 else if ( fval < -maxval ) fval = -maxval;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
670 val = (int)fval;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
671 if ( size == 1 ) *CHARP(ncp, i) = (signed char)val;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
672 else if ( size == 2 ) *SHORTP(ncp, i) = (short)val;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
673 else if ( size == 4 ) *LONGP(ncp, i) = (long)val;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
674 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
675 return rv;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
676 }
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
677
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
678 static PyObject *
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
679 audioop_tomono(self, args)
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
680 PyObject *self;
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
681 PyObject *args;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
682 {
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
683 signed char *cp, *ncp;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
684 int len, size, val1 = 0, val2 = 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
685 double fac1, fac2, fval, maxval;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
686 PyObject *rv;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
687 int i;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
688
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
689 if ( !PyArg_Parse(args, "(s#idd)", &cp, &len, &size, &fac1, &fac2 ) )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
690 return 0;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
691
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
692 if ( size == 1 ) maxval = (double) 0x7f;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
693 else if ( size == 2 ) maxval = (double) 0x7fff;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
694 else if ( size == 4 ) maxval = (double) 0x7fffffff;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
695 else {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
696 PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
697 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
698 }
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
699
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
700 rv = PyString_FromStringAndSize(NULL, len/2);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
701 if ( rv == 0 )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
702 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
703 ncp = (signed char *)PyString_AsString(rv);
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
704
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
705
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
706 for ( i=0; i < len; i += size*2 ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
707 if ( size == 1 ) val1 = (int)*CHARP(cp, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
708 else if ( size == 2 ) val1 = (int)*SHORTP(cp, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
709 else if ( size == 4 ) val1 = (int)*LONGP(cp, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
710 if ( size == 1 ) val2 = (int)*CHARP(cp, i+1);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
711 else if ( size == 2 ) val2 = (int)*SHORTP(cp, i+2);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
712 else if ( size == 4 ) val2 = (int)*LONGP(cp, i+4);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
713 fval = (double)val1*fac1 + (double)val2*fac2;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
714 if ( fval > maxval ) fval = maxval;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
715 else if ( fval < -maxval ) fval = -maxval;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
716 val1 = (int)fval;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
717 if ( size == 1 ) *CHARP(ncp, i/2) = (signed char)val1;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
718 else if ( size == 2 ) *SHORTP(ncp, i/2) = (short)val1;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
719 else if ( size == 4 ) *LONGP(ncp, i/2)= (long)val1;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
720 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
721 return rv;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
722 }
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
723
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
724 static PyObject *
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
725 audioop_tostereo(self, args)
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
726 PyObject *self;
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
727 PyObject *args;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
728 {
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
729 signed char *cp, *ncp;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
730 int len, size, val1, val2, val = 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
731 double fac1, fac2, fval, maxval;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
732 PyObject *rv;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
733 int i;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
734
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
735 if ( !PyArg_Parse(args, "(s#idd)", &cp, &len, &size, &fac1, &fac2 ) )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
736 return 0;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
737
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
738 if ( size == 1 ) maxval = (double) 0x7f;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
739 else if ( size == 2 ) maxval = (double) 0x7fff;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
740 else if ( size == 4 ) maxval = (double) 0x7fffffff;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
741 else {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
742 PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
743 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
744 }
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
745
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
746 rv = PyString_FromStringAndSize(NULL, len*2);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
747 if ( rv == 0 )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
748 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
749 ncp = (signed char *)PyString_AsString(rv);
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
750
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
751
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
752 for ( i=0; i < len; i += size ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
753 if ( size == 1 ) val = (int)*CHARP(cp, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
754 else if ( size == 2 ) val = (int)*SHORTP(cp, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
755 else if ( size == 4 ) val = (int)*LONGP(cp, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
756
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
757 fval = (double)val*fac1;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
758 if ( fval > maxval ) fval = maxval;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
759 else if ( fval < -maxval ) fval = -maxval;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
760 val1 = (int)fval;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
761
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
762 fval = (double)val*fac2;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
763 if ( fval > maxval ) fval = maxval;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
764 else if ( fval < -maxval ) fval = -maxval;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
765 val2 = (int)fval;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
766
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
767 if ( size == 1 ) *CHARP(ncp, i*2) = (signed char)val1;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
768 else if ( size == 2 ) *SHORTP(ncp, i*2) = (short)val1;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
769 else if ( size == 4 ) *LONGP(ncp, i*2) = (long)val1;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
770
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
771 if ( size == 1 ) *CHARP(ncp, i*2+1) = (signed char)val2;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
772 else if ( size == 2 ) *SHORTP(ncp, i*2+2) = (short)val2;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
773 else if ( size == 4 ) *LONGP(ncp, i*2+4) = (long)val2;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
774 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
775 return rv;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
776 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
777
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
778 static PyObject *
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
779 audioop_add(self, args)
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
780 PyObject *self;
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
781 PyObject *args;
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
782 {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
783 signed char *cp1, *cp2, *ncp;
5095
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
784 int len1, len2, size, val1 = 0, val2 = 0, maxval, newval;
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
785 PyObject *rv;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
786 int i;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
787
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
788 if ( !PyArg_Parse(args, "(s#s#i)",
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
789 &cp1, &len1, &cp2, &len2, &size ) )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
790 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
791
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
792 if ( len1 != len2 ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
793 PyErr_SetString(AudioopError, "Lengths should be the same");
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
794 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
795 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
796
5095
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
797 if ( size == 1 ) maxval = 0x7f;
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
798 else if ( size == 2 ) maxval = 0x7fff;
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
799 else if ( size == 4 ) maxval = 0x7fffffff;
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
800 else {
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
801 PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
802 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
803 }
5095
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
804
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
805 rv = PyString_FromStringAndSize(NULL, len1);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
806 if ( rv == 0 )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
807 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
808 ncp = (signed char *)PyString_AsString(rv);
5095
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
809
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
810 for ( i=0; i < len1; i += size ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
811 if ( size == 1 ) val1 = (int)*CHARP(cp1, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
812 else if ( size == 2 ) val1 = (int)*SHORTP(cp1, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
813 else if ( size == 4 ) val1 = (int)*LONGP(cp1, i);
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
814
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
815 if ( size == 1 ) val2 = (int)*CHARP(cp2, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
816 else if ( size == 2 ) val2 = (int)*SHORTP(cp2, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
817 else if ( size == 4 ) val2 = (int)*LONGP(cp2, i);
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
818
5095
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
819 newval = val1 + val2;
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
820 /* truncate in case of overflow */
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
821 if (newval > maxval) newval = maxval;
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
822 else if (newval < -maxval) newval = -maxval;
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
823 else if (size == 4 && (newval^val1) < 0 && (newval^val2) < 0)
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
824 newval = val1 > 0 ? maxval : - maxval;
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
825
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
826 if ( size == 1 ) *CHARP(ncp, i) = (signed char)newval;
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
827 else if ( size == 2 ) *SHORTP(ncp, i) = (short)newval;
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
828 else if ( size == 4 ) *LONGP(ncp, i) = (long)newval;
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
829 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
830 return rv;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
831 }
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
832
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
833 static PyObject *
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
834 audioop_bias(self, args)
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
835 PyObject *self;
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
836 PyObject *args;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
837 {
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
838 signed char *cp, *ncp;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
839 int len, size, val = 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
840 PyObject *rv;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
841 int i;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
842 int bias;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
843
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
844 if ( !PyArg_Parse(args, "(s#ii)",
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
845 &cp, &len, &size , &bias) )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
846 return 0;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
847
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
848 if ( size != 1 && size != 2 && size != 4) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
849 PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
850 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
851 }
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
852
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
853 rv = PyString_FromStringAndSize(NULL, len);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
854 if ( rv == 0 )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
855 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
856 ncp = (signed char *)PyString_AsString(rv);
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
857
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
858
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
859 for ( i=0; i < len; i += size ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
860 if ( size == 1 ) val = (int)*CHARP(cp, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
861 else if ( size == 2 ) val = (int)*SHORTP(cp, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
862 else if ( size == 4 ) val = (int)*LONGP(cp, i);
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
863
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
864 if ( size == 1 ) *CHARP(ncp, i) = (signed char)(val+bias);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
865 else if ( size == 2 ) *SHORTP(ncp, i) = (short)(val+bias);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
866 else if ( size == 4 ) *LONGP(ncp, i) = (long)(val+bias);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
867 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
868 return rv;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
869 }
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
870
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
871 static PyObject *
1238
d426c5d59254 Added audioop.reverse() which reverses an audio sample
Jack Jansen <jack.jansen@cwi.nl>
parents: 1224
diff changeset
872 audioop_reverse(self, args)
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
873 PyObject *self;
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
874 PyObject *args;
1238
d426c5d59254 Added audioop.reverse() which reverses an audio sample
Jack Jansen <jack.jansen@cwi.nl>
parents: 1224
diff changeset
875 {
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
876 signed char *cp;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
877 unsigned char *ncp;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
878 int len, size, val = 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
879 PyObject *rv;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
880 int i, j;
1238
d426c5d59254 Added audioop.reverse() which reverses an audio sample
Jack Jansen <jack.jansen@cwi.nl>
parents: 1224
diff changeset
881
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
882 if ( !PyArg_Parse(args, "(s#i)",
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
883 &cp, &len, &size) )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
884 return 0;
1238
d426c5d59254 Added audioop.reverse() which reverses an audio sample
Jack Jansen <jack.jansen@cwi.nl>
parents: 1224
diff changeset
885
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
886 if ( size != 1 && size != 2 && size != 4 ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
887 PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
888 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
889 }
1238
d426c5d59254 Added audioop.reverse() which reverses an audio sample
Jack Jansen <jack.jansen@cwi.nl>
parents: 1224
diff changeset
890
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
891 rv = PyString_FromStringAndSize(NULL, len);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
892 if ( rv == 0 )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
893 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
894 ncp = (unsigned char *)PyString_AsString(rv);
1238
d426c5d59254 Added audioop.reverse() which reverses an audio sample
Jack Jansen <jack.jansen@cwi.nl>
parents: 1224
diff changeset
895
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
896 for ( i=0; i < len; i += size ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
897 if ( size == 1 ) val = ((int)*CHARP(cp, i)) << 8;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
898 else if ( size == 2 ) val = (int)*SHORTP(cp, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
899 else if ( size == 4 ) val = ((int)*LONGP(cp, i)) >> 16;
1238
d426c5d59254 Added audioop.reverse() which reverses an audio sample
Jack Jansen <jack.jansen@cwi.nl>
parents: 1224
diff changeset
900
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
901 j = len - i - size;
1238
d426c5d59254 Added audioop.reverse() which reverses an audio sample
Jack Jansen <jack.jansen@cwi.nl>
parents: 1224
diff changeset
902
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
903 if ( size == 1 ) *CHARP(ncp, j) = (signed char)(val >> 8);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
904 else if ( size == 2 ) *SHORTP(ncp, j) = (short)(val);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
905 else if ( size == 4 ) *LONGP(ncp, j) = (long)(val<<16);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
906 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
907 return rv;
1238
d426c5d59254 Added audioop.reverse() which reverses an audio sample
Jack Jansen <jack.jansen@cwi.nl>
parents: 1224
diff changeset
908 }
d426c5d59254 Added audioop.reverse() which reverses an audio sample
Jack Jansen <jack.jansen@cwi.nl>
parents: 1224
diff changeset
909
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
910 static PyObject *
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
911 audioop_lin2lin(self, args)
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
912 PyObject *self;
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
913 PyObject *args;
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
914 {
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
915 signed char *cp;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
916 unsigned char *ncp;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
917 int len, size, size2, val = 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
918 PyObject *rv;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
919 int i, j;
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
920
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
921 if ( !PyArg_Parse(args, "(s#ii)",
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
922 &cp, &len, &size, &size2) )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
923 return 0;
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
924
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
925 if ( (size != 1 && size != 2 && size != 4) ||
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
926 (size2 != 1 && size2 != 2 && size2 != 4)) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
927 PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
928 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
929 }
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
930
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
931 rv = PyString_FromStringAndSize(NULL, (len/size)*size2);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
932 if ( rv == 0 )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
933 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
934 ncp = (unsigned char *)PyString_AsString(rv);
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
935
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
936 for ( i=0, j=0; i < len; i += size, j += size2 ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
937 if ( size == 1 ) val = ((int)*CHARP(cp, i)) << 8;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
938 else if ( size == 2 ) val = (int)*SHORTP(cp, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
939 else if ( size == 4 ) val = ((int)*LONGP(cp, i)) >> 16;
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
940
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
941 if ( size2 == 1 ) *CHARP(ncp, j) = (signed char)(val >> 8);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
942 else if ( size2 == 2 ) *SHORTP(ncp, j) = (short)(val);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
943 else if ( size2 == 4 ) *LONGP(ncp, j) = (long)(val<<16);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
944 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
945 return rv;
1224
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
946 }
7e27659eb2d9 This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 1223
diff changeset
947
5555
989f4ff73429 fixed ratecv to continue working if product of rates is bigger than 32 bits
Guido van Rossum <guido@python.org>
parents: 5287
diff changeset
948 static int
989f4ff73429 fixed ratecv to continue working if product of rates is bigger than 32 bits
Guido van Rossum <guido@python.org>
parents: 5287
diff changeset
949 gcd(a, b)
989f4ff73429 fixed ratecv to continue working if product of rates is bigger than 32 bits
Guido van Rossum <guido@python.org>
parents: 5287
diff changeset
950 int a, b;
989f4ff73429 fixed ratecv to continue working if product of rates is bigger than 32 bits
Guido van Rossum <guido@python.org>
parents: 5287
diff changeset
951 {
989f4ff73429 fixed ratecv to continue working if product of rates is bigger than 32 bits
Guido van Rossum <guido@python.org>
parents: 5287
diff changeset
952 while (b > 0) {
989f4ff73429 fixed ratecv to continue working if product of rates is bigger than 32 bits
Guido van Rossum <guido@python.org>
parents: 5287
diff changeset
953 int tmp = a % b;
989f4ff73429 fixed ratecv to continue working if product of rates is bigger than 32 bits
Guido van Rossum <guido@python.org>
parents: 5287
diff changeset
954 a = b;
989f4ff73429 fixed ratecv to continue working if product of rates is bigger than 32 bits
Guido van Rossum <guido@python.org>
parents: 5287
diff changeset
955 b = tmp;
989f4ff73429 fixed ratecv to continue working if product of rates is bigger than 32 bits
Guido van Rossum <guido@python.org>
parents: 5287
diff changeset
956 }
989f4ff73429 fixed ratecv to continue working if product of rates is bigger than 32 bits
Guido van Rossum <guido@python.org>
parents: 5287
diff changeset
957 return a;
989f4ff73429 fixed ratecv to continue working if product of rates is bigger than 32 bits
Guido van Rossum <guido@python.org>
parents: 5287
diff changeset
958 }
989f4ff73429 fixed ratecv to continue working if product of rates is bigger than 32 bits
Guido van Rossum <guido@python.org>
parents: 5287
diff changeset
959
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
960 static PyObject *
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
961 audioop_ratecv(self, args)
5095
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
962 PyObject *self;
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
963 PyObject *args;
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
964 {
5095
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
965 char *cp, *ncp;
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
966 int len, size, nchannels, inrate, outrate, weightA, weightB;
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
967 int chan, d, *prev_i, *cur_i, cur_o;
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
968 PyObject *state, *samps, *str, *rv;
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
969
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
970 weightA = 1;
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
971 weightB = 0;
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
972 if (!PyArg_ParseTuple(args, "s#iiiiO|ii", &cp, &len, &size, &nchannels,
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
973 &inrate, &outrate, &state, &weightA, &weightB))
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
974 return NULL;
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
975 if (size != 1 && size != 2 && size != 4) {
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
976 PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
977 return NULL;
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
978 }
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
979 if (nchannels < 1) {
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
980 PyErr_SetString(AudioopError, "# of channels should be >= 1");
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
981 return NULL;
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
982 }
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
983 if (weightA < 1 || weightB < 0) {
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
984 PyErr_SetString(AudioopError,
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
985 "weightA should be >= 1, weightB should be >= 0");
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
986 return NULL;
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
987 }
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
988 if (len % (size * nchannels) != 0) {
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
989 PyErr_SetString(AudioopError, "not a whole number of frames");
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
990 return NULL;
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
991 }
5555
989f4ff73429 fixed ratecv to continue working if product of rates is bigger than 32 bits
Guido van Rossum <guido@python.org>
parents: 5287
diff changeset
992 if (inrate <= 0 || outrate <= 0) {
989f4ff73429 fixed ratecv to continue working if product of rates is bigger than 32 bits
Guido van Rossum <guido@python.org>
parents: 5287
diff changeset
993 PyErr_SetString(AudioopError, "sampling rate not > 0");
989f4ff73429 fixed ratecv to continue working if product of rates is bigger than 32 bits
Guido van Rossum <guido@python.org>
parents: 5287
diff changeset
994 return NULL;
989f4ff73429 fixed ratecv to continue working if product of rates is bigger than 32 bits
Guido van Rossum <guido@python.org>
parents: 5287
diff changeset
995 }
989f4ff73429 fixed ratecv to continue working if product of rates is bigger than 32 bits
Guido van Rossum <guido@python.org>
parents: 5287
diff changeset
996 /* divide inrate and outrate by their greatest common divisor */
989f4ff73429 fixed ratecv to continue working if product of rates is bigger than 32 bits
Guido van Rossum <guido@python.org>
parents: 5287
diff changeset
997 d = gcd(inrate, outrate);
989f4ff73429 fixed ratecv to continue working if product of rates is bigger than 32 bits
Guido van Rossum <guido@python.org>
parents: 5287
diff changeset
998 inrate /= d;
989f4ff73429 fixed ratecv to continue working if product of rates is bigger than 32 bits
Guido van Rossum <guido@python.org>
parents: 5287
diff changeset
999 outrate /= d;
989f4ff73429 fixed ratecv to continue working if product of rates is bigger than 32 bits
Guido van Rossum <guido@python.org>
parents: 5287
diff changeset
1000
5095
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1001 prev_i = malloc(nchannels * sizeof(int));
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1002 cur_i = malloc(nchannels * sizeof(int));
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1003 len /= size * nchannels; /* # of frames */
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1004
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1005 if (state == Py_None) {
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1006 d = -outrate;
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1007 for (chan = 0; chan < nchannels; chan++)
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1008 prev_i[chan] = cur_i[chan] = 0;
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1009 } else {
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1010 if (!PyArg_ParseTuple(state,
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1011 "iO!;audioop.ratecv: illegal state argument",
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1012 &d, &PyTuple_Type, &samps))
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1013 return NULL;
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1014 if (PyTuple_Size(samps) != nchannels) {
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1015 PyErr_SetString(AudioopError,
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1016 "illegal state argument");
5095
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1017 return NULL;
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1018 }
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1019 for (chan = 0; chan < nchannels; chan++) {
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1020 if (!PyArg_ParseTuple(PyTuple_GetItem(samps, chan),
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1021 "ii",&prev_i[chan],&cur_i[chan]))
5095
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1022 return NULL;
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1023 }
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1024 }
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1025 str = PyString_FromStringAndSize(
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1026 NULL, size * nchannels * (len * outrate + inrate - 1) / inrate);
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1027 if (str == NULL)
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1028 return NULL;
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1029 ncp = PyString_AsString(str);
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1030
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1031 for (;;) {
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1032 while (d < 0) {
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1033 if (len == 0) {
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1034 samps = PyTuple_New(nchannels);
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1035 for (chan = 0; chan < nchannels; chan++)
5095
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1036 PyTuple_SetItem(samps, chan,
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1037 Py_BuildValue("(ii)",
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1038 prev_i[chan],
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1039 cur_i[chan]));
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1040 if (PyErr_Occurred())
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1041 return NULL;
5095
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1042 if (_PyString_Resize(&str,
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1043 ncp - PyString_AsString(str)) < 0)
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1044 return NULL;
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1045 rv = Py_BuildValue("(O(iO))", str, d, samps);
5095
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1046 Py_DECREF(samps);
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1047 Py_DECREF(str);
5095
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1048 return rv;
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1049 }
5095
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1050 for (chan = 0; chan < nchannels; chan++) {
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1051 prev_i[chan] = cur_i[chan];
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1052 if (size == 1)
5095
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1053 cur_i[chan] = ((int)*CHARP(cp, 0)) << 8;
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1054 else if (size == 2)
5095
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1055 cur_i[chan] = (int)*SHORTP(cp, 0);
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1056 else if (size == 4)
5095
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1057 cur_i[chan] = ((int)*LONGP(cp, 0)) >> 16;
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1058 cp += size;
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1059 /* implements a simple digital filter */
5095
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1060 cur_i[chan] =
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1061 (weightA * cur_i[chan] +
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1062 weightB * prev_i[chan]) /
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1063 (weightA + weightB);
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1064 }
5095
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1065 len--;
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1066 d += outrate;
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1067 }
5095
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1068 while (d >= 0) {
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1069 for (chan = 0; chan < nchannels; chan++) {
5095
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1070 cur_o = (prev_i[chan] * d +
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1071 cur_i[chan] * (outrate - d)) /
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1072 outrate;
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1073 if (size == 1)
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1074 *CHARP(ncp, 0) = (signed char)(cur_o >> 8);
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1075 else if (size == 2)
5095
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1076 *SHORTP(ncp, 0) = (short)(cur_o);
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1077 else if (size == 4)
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1078 *LONGP(ncp, 0) = (long)(cur_o<<16);
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1079 ncp += size;
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1080 }
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1081 d -= inrate;
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1082 }
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1083 }
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1084 }
5095
11922a2ecacd Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents: 4987
diff changeset
1085
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1086 static PyObject *
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1087 audioop_lin2ulaw(self, args)
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1088 PyObject *self;
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1089 PyObject *args;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1090 {
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1091 signed char *cp;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1092 unsigned char *ncp;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1093 int len, size, val = 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1094 PyObject *rv;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1095 int i;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1096
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1097 if ( !PyArg_Parse(args, "(s#i)",
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1098 &cp, &len, &size) )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1099 return 0;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1100
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1101 if ( size != 1 && size != 2 && size != 4) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1102 PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1103 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1104 }
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1105
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1106 rv = PyString_FromStringAndSize(NULL, len/size);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1107 if ( rv == 0 )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1108 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1109 ncp = (unsigned char *)PyString_AsString(rv);
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1110
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1111 for ( i=0; i < len; i += size ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1112 if ( size == 1 ) val = ((int)*CHARP(cp, i)) << 8;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1113 else if ( size == 2 ) val = (int)*SHORTP(cp, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1114 else if ( size == 4 ) val = ((int)*LONGP(cp, i)) >> 16;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1115
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1116 *ncp++ = st_linear_to_ulaw(val);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1117 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1118 return rv;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1119 }
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1120
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1121 static PyObject *
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1122 audioop_ulaw2lin(self, args)
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1123 PyObject *self;
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1124 PyObject *args;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1125 {
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1126 unsigned char *cp;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1127 unsigned char cval;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1128 signed char *ncp;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1129 int len, size, val;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1130 PyObject *rv;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1131 int i;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1132
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1133 if ( !PyArg_Parse(args, "(s#i)",
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1134 &cp, &len, &size) )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1135 return 0;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1136
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1137 if ( size != 1 && size != 2 && size != 4) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1138 PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1139 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1140 }
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1141
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1142 rv = PyString_FromStringAndSize(NULL, len*size);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1143 if ( rv == 0 )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1144 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1145 ncp = (signed char *)PyString_AsString(rv);
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1146
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1147 for ( i=0; i < len*size; i += size ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1148 cval = *cp++;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1149 val = st_ulaw_to_linear(cval);
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1150
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1151 if ( size == 1 ) *CHARP(ncp, i) = (signed char)(val >> 8);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1152 else if ( size == 2 ) *SHORTP(ncp, i) = (short)(val);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1153 else if ( size == 4 ) *LONGP(ncp, i) = (long)(val<<16);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1154 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1155 return rv;
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1156 }
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1157
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1158 static PyObject *
909
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
1159 audioop_lin2adpcm(self, args)
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1160 PyObject *self;
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1161 PyObject *args;
909
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
1162 {
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1163 signed char *cp;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1164 signed char *ncp;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1165 int len, size, val = 0, step, valpred, delta,
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1166 index, sign, vpdiff, diff;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1167 PyObject *rv, *state, *str;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1168 int i, outputbuffer = 0, bufferstep;
909
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
1169
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1170 if ( !PyArg_Parse(args, "(s#iO)",
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1171 &cp, &len, &size, &state) )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1172 return 0;
909
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
1173
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
1174
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1175 if ( size != 1 && size != 2 && size != 4) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1176 PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1177 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1178 }
909
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
1179
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1180 str = PyString_FromStringAndSize(NULL, len/(size*2));
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1181 if ( str == 0 )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1182 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1183 ncp = (signed char *)PyString_AsString(str);
1223
5ae4a8cf79ef Added lin2lin, findmax, findfactor and fintfit routines
Jack Jansen <jack.jansen@cwi.nl>
parents: 1213
diff changeset
1184
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1185 /* Decode state, should have (value, step) */
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1186 if ( state == Py_None ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1187 /* First time, it seems. Set defaults */
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1188 valpred = 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1189 step = 7;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1190 index = 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1191 } else if ( !PyArg_Parse(state, "(ii)", &valpred, &index) )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1192 return 0;
909
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
1193
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1194 step = stepsizeTable[index];
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1195 bufferstep = 1;
909
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
1196
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1197 for ( i=0; i < len; i += size ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1198 if ( size == 1 ) val = ((int)*CHARP(cp, i)) << 8;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1199 else if ( size == 2 ) val = (int)*SHORTP(cp, i);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1200 else if ( size == 4 ) val = ((int)*LONGP(cp, i)) >> 16;
909
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
1201
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1202 /* Step 1 - compute difference with previous value */
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1203 diff = val - valpred;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1204 sign = (diff < 0) ? 8 : 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1205 if ( sign ) diff = (-diff);
909
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
1206
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1207 /* Step 2 - Divide and clamp */
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1208 /* Note:
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1209 ** This code *approximately* computes:
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1210 ** delta = diff*4/step;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1211 ** vpdiff = (delta+0.5)*step/4;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1212 ** but in shift step bits are dropped. The net result of this
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1213 ** is that even if you have fast mul/div hardware you cannot
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1214 ** put it to good use since the fixup would be too expensive.
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1215 */
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1216 delta = 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1217 vpdiff = (step >> 3);
1180
1d6cbeb27096 Fixed various bugs in the adpcm routines
Jack Jansen <jack.jansen@cwi.nl>
parents: 993
diff changeset
1218
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1219 if ( diff >= step ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1220 delta = 4;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1221 diff -= step;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1222 vpdiff += step;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1223 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1224 step >>= 1;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1225 if ( diff >= step ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1226 delta |= 2;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1227 diff -= step;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1228 vpdiff += step;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1229 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1230 step >>= 1;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1231 if ( diff >= step ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1232 delta |= 1;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1233 vpdiff += step;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1234 }
1180
1d6cbeb27096 Fixed various bugs in the adpcm routines
Jack Jansen <jack.jansen@cwi.nl>
parents: 993
diff changeset
1235
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1236 /* Step 3 - Update previous value */
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1237 if ( sign )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1238 valpred -= vpdiff;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1239 else
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1240 valpred += vpdiff;
909
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
1241
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1242 /* Step 4 - Clamp previous value to 16 bits */
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1243 if ( valpred > 32767 )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1244 valpred = 32767;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1245 else if ( valpred < -32768 )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1246 valpred = -32768;
909
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
1247
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1248 /* Step 5 - Assemble value, update index and step values */
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1249 delta |= sign;
909
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
1250
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1251 index += indexTable[delta];
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1252 if ( index < 0 ) index = 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1253 if ( index > 88 ) index = 88;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1254 step = stepsizeTable[index];
909
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
1255
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1256 /* Step 6 - Output value */
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1257 if ( bufferstep ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1258 outputbuffer = (delta << 4) & 0xf0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1259 } else {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1260 *ncp++ = (delta & 0x0f) | outputbuffer;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1261 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1262 bufferstep = !bufferstep;
909
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
1263 }
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1264 rv = Py_BuildValue("(O(ii))", str, valpred, index);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1265 Py_DECREF(str);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1266 return rv;
909
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
1267 }
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
1268
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1269 static PyObject *
909
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
1270 audioop_adpcm2lin(self, args)
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1271 PyObject *self;
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1272 PyObject *args;
909
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
1273 {
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1274 signed char *cp;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1275 signed char *ncp;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1276 int len, size, valpred, step, delta, index, sign, vpdiff;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1277 PyObject *rv, *str, *state;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1278 int i, inputbuffer = 0, bufferstep;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1279
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1280 if ( !PyArg_Parse(args, "(s#iO)",
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1281 &cp, &len, &size, &state) )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1282 return 0;
909
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
1283
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1284 if ( size != 1 && size != 2 && size != 4) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1285 PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1286 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1287 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1288
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1289 /* Decode state, should have (value, step) */
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1290 if ( state == Py_None ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1291 /* First time, it seems. Set defaults */
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1292 valpred = 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1293 step = 7;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1294 index = 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1295 } else if ( !PyArg_Parse(state, "(ii)", &valpred, &index) )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1296 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1297
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1298 str = PyString_FromStringAndSize(NULL, len*size*2);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1299 if ( str == 0 )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1300 return 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1301 ncp = (signed char *)PyString_AsString(str);
909
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
1302
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1303 step = stepsizeTable[index];
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1304 bufferstep = 0;
909
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
1305
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1306 for ( i=0; i < len*size*2; i += size ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1307 /* Step 1 - get the delta value and compute next index */
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1308 if ( bufferstep ) {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1309 delta = inputbuffer & 0xf;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1310 } else {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1311 inputbuffer = *cp++;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1312 delta = (inputbuffer >> 4) & 0xf;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1313 }
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1314
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1315 bufferstep = !bufferstep;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1316
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1317 /* Step 2 - Find new index value (for later) */
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1318 index += indexTable[delta];
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1319 if ( index < 0 ) index = 0;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1320 if ( index > 88 ) index = 88;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1321
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1322 /* Step 3 - Separate sign and magnitude */
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1323 sign = delta & 8;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1324 delta = delta & 7;
909
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
1325
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1326 /* Step 4 - Compute difference and new predicted value */
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1327 /*
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1328 ** Computes 'vpdiff = (delta+0.5)*step/4', but see comment
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1329 ** in adpcm_coder.
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1330 */
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1331 vpdiff = step >> 3;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1332 if ( delta & 4 ) vpdiff += step;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1333 if ( delta & 2 ) vpdiff += step>>1;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1334 if ( delta & 1 ) vpdiff += step>>2;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1335
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1336 if ( sign )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1337 valpred -= vpdiff;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1338 else
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1339 valpred += vpdiff;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1340
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1341 /* Step 5 - clamp output value */
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1342 if ( valpred > 32767 )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1343 valpred = 32767;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1344 else if ( valpred < -32768 )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1345 valpred = -32768;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1346
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1347 /* Step 6 - Update step value */
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1348 step = stepsizeTable[index];
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1349
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1350 /* Step 6 - Output value */
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1351 if ( size == 1 ) *CHARP(ncp, i) = (signed char)(valpred >> 8);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1352 else if ( size == 2 ) *SHORTP(ncp, i) = (short)(valpred);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1353 else if ( size == 4 ) *LONGP(ncp, i) = (long)(valpred<<16);
909
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
1354 }
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
1355
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1356 rv = Py_BuildValue("(O(ii))", str, valpred, index);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1357 Py_DECREF(str);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1358 return rv;
909
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
1359 }
4da0b7dae796 Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents: 905
diff changeset
1360
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1361 static PyMethodDef audioop_methods[] = {
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1362 { "max", audioop_max },
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1363 { "minmax", audioop_minmax },
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1364 { "avg", audioop_avg },
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1365 { "maxpp", audioop_maxpp },
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1366 { "avgpp", audioop_avgpp },
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1367 { "rms", audioop_rms },
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1368 { "findfit", audioop_findfit },
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1369 { "findmax", audioop_findmax },
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1370 { "findfactor", audioop_findfactor },
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1371 { "cross", audioop_cross },
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1372 { "mul", audioop_mul },
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1373 { "add", audioop_add },
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1374 { "bias", audioop_bias },
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1375 { "ulaw2lin", audioop_ulaw2lin },
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1376 { "lin2ulaw", audioop_lin2ulaw },
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1377 { "lin2lin", audioop_lin2lin },
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1378 { "adpcm2lin", audioop_adpcm2lin },
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1379 { "lin2adpcm", audioop_lin2adpcm },
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1380 { "tomono", audioop_tomono },
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1381 { "tostereo", audioop_tostereo },
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1382 { "getsample", audioop_getsample },
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1383 { "reverse", audioop_reverse },
4987
1ded9438fa51 Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4879
diff changeset
1384 { "ratecv", audioop_ratecv, 1 },
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1385 { 0, 0 }
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1386 };
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1387
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1388 void
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1389 initaudioop()
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1390 {
4879
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1391 PyObject *m, *d;
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1392 m = Py_InitModule("audioop", audioop_methods);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1393 d = PyModule_GetDict(m);
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1394 AudioopError = PyString_FromString("audioop.error");
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1395 if ( AudioopError == NULL
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1396 || PyDict_SetItemString(d,"error",AudioopError) )
4514023160b4 Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4600
diff changeset
1397 Py_FatalError("can't define audioop.error");
877
9fb2a868eeee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1398 }