1 /* libSoX effect: Contrast Enhancement (c) 2008 robs@users.sourceforge.net
3 * This library is free software; you can redistribute it and/or modify it
4 * under the terms of the GNU Lesser General Public License as published by
5 * the Free Software Foundation; either version 2.1 of the License, or (at
6 * your option) any later version.
8 * This library is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
11 * General Public License for more details.
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this library; if not, write to the Free Software Foundation,
15 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 typedef struct {double contrast
;} priv_t
;
22 static int create(sox_effect_t
* effp
, int argc
, char * * argv
)
24 priv_t
* p
= (priv_t
*)effp
->priv
;
27 do {NUMERIC_PARAMETER(contrast
, 0, 100)} while (0);
28 p
->contrast
/= 750; /* shift range to 0 to 0.1333, default 0.1 */
29 return argc
? lsx_usage(effp
) : SOX_SUCCESS
;
32 static int flow(sox_effect_t
* effp
, const sox_sample_t
* ibuf
,
33 sox_sample_t
* obuf
, size_t * isamp
, size_t * osamp
)
35 priv_t
* p
= (priv_t
*)effp
->priv
;
36 size_t len
= *isamp
= *osamp
= min(*isamp
, *osamp
);
38 double d
= *ibuf
++ * (-M_PI_2
/ SOX_SAMPLE_MIN
);
39 *obuf
++ = sin(d
+ p
->contrast
* sin(d
* 4)) * SOX_SAMPLE_MAX
;
44 sox_effect_handler_t
const * lsx_contrast_effect_fn(void)
46 static sox_effect_handler_t handler
= {"contrast", "[enhancement (75)]",
47 0, create
, NULL
, flow
, NULL
, NULL
, NULL
, sizeof(priv_t
)};