From 337b20e23ecf6a00f20a7f04f56688b2560d53dd Mon Sep 17 00:00:00 2001 From: Jack Jansen Date: Tue, 23 Feb 1993 13:39:57 +0000 Subject: [PATCH] Added audioop.reverse() which reverses an audio sample --- Modules/audioop.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/Modules/audioop.c b/Modules/audioop.c index 385a2f9fea5..bfc6fda28be 100644 --- a/Modules/audioop.c +++ b/Modules/audioop.c @@ -821,6 +821,45 @@ audioop_bias(self, args) return rv; } +static object * +audioop_reverse(self, args) + object *self; + object *args; +{ + signed char *cp; + unsigned char *ncp; + int len, size, val; + object *rv; + int i, j; + + if ( !getargs(args, "(s#i)", + &cp, &len, &size) ) + return 0; + + if ( size != 1 && size != 2 && size != 4 ) { + err_setstr(AudioopError, "Size should be 1, 2 or 4"); + return 0; + } + + rv = newsizedstringobject(NULL, len); + if ( rv == 0 ) + return 0; + ncp = (unsigned char *)getstringvalue(rv); + + for ( i=0; i < len; i += size ) { + if ( size == 1 ) val = ((int)*CHARP(cp, i)) << 8; + else if ( size == 2 ) val = (int)*SHORTP(cp, i); + else if ( size == 4 ) val = ((int)*LONGP(cp, i)) >> 16; + + j = len - i - size; + + if ( size == 1 ) *CHARP(ncp, j) = (signed char)(val >> 8); + else if ( size == 2 ) *SHORTP(ncp, j) = (short)(val); + else if ( size == 4 ) *LONGP(ncp, j) = (long)(val<<16); + } + return rv; +} + static object * audioop_lin2lin(self, args) object *self; @@ -1286,6 +1325,7 @@ static struct methodlist audioop_methods[] = { { "tomono", audioop_tomono }, { "tostereo", audioop_tostereo }, { "getsample", audioop_getsample }, + { "reverse", audioop_reverse }, { 0, 0 } };