Mercurial > cpython-lru_cache-weakref
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 |
| rev | line source |
|---|---|
| 877 | 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 | 4 |
| 5 All Rights Reserved | |
| 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 | 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 | 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 | 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 | 29 |
| 30 ******************************************************************/ | |
| 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 | 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 | 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 | 43 |
| 2506 | 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 | 47 ** (c) Craig Reese, Joe Campbell and Jeff Poskanzer 1989 */ |
| 48 | |
| 49 #define MINLIN -32768 | |
| 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 | 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 | 56 |
| 57 /* | |
| 58 ** This macro converts from ulaw to 16 bit linear, faster. | |
| 59 ** | |
| 60 ** Jef Poskanzer | |
| 61 ** 23 October 1989 | |
| 62 ** | |
| 63 ** Input: 8 bit ulaw sample | |
| 64 ** Output: signed 16 bit linear sample | |
| 65 */ | |
| 66 #define st_ulaw_to_linear(ulawbyte) ulaw_table[ulawbyte] | |
| 67 | |
| 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 | 100 56, 48, 40, 32, 24, 16, 8, 0 }; |
| 101 | |
| 102 #define ZEROTRAP /* turn on the trap as per the MIL-STD */ | |
| 103 #define BIAS 0x84 /* define the add-in bias for 16 bit samples */ | |
| 104 #define CLIP 32635 | |
| 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 | 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 | 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 | 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 | 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 | 141 #endif |
| 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 | 145 /* End of code taken from sox */ |
| 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 | 165 #define CHARP(cp, i) ((signed char *)(cp+i)) |
| 166 #define SHORTP(cp, i) ((short *)(cp+i)) | |
| 167 #define LONGP(cp, i) ((long *)(cp+i)) | |
| 168 | |
| 169 | |
| 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 | 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 | 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 | 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 | 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 | 196 } |
| 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 | 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 | 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 | 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 | 222 } |
| 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 | 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 | 228 { |
| 229 signed char *cp; | |
| 4600 | 230 int len, size, val = 0; |
| 1866 | 231 int i; |
| 232 int min = 0x7fffffff, max = -0x7fffffff; | |
| 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 | 235 return NULL; |
| 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 | 238 return NULL; |
| 239 } | |
| 240 for (i = 0; i < len; i += size) { | |
| 241 if (size == 1) val = (int) *CHARP(cp, i); | |
| 242 else if (size == 2) val = (int) *SHORTP(cp, i); | |
| 243 else if (size == 4) val = (int) *LONGP(cp, i); | |
| 244 if (val > max) max = val; | |
| 245 if (val < min) min = val; | |
| 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 | 248 } |
| 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 | 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 | 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 | 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 | 277 } |
| 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 | 604 } |
| 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 | 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 | 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 | 633 } |
| 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 | 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 | 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 | 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 | 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 | 661 |
| 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 | 676 } |
| 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 | 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 | 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 | 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 | 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 | 704 |
| 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 | 722 } |
| 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 | 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 | 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 | 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 | 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 | 750 |
| 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 | 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 | 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 | 831 } |
| 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 | 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 | 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 | 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 | 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 | 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 | 857 |
| 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 | 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 | 869 } |
| 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 1119 } |
| 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 1156 } |
| 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 | 1386 }; |
| 1387 | |
| 1388 void | |
| 1389 initaudioop() | |
| 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 | 1398 } |
