File: libinv_common.c

package info (click to toggle)
invada-studio-plugins 0.3.1-3
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 428 kB
  • ctags: 534
  • sloc: ansic: 5,334; makefile: 85
file content (66 lines) | stat: -rw-r--r-- 1,930 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/* 

    Common functions

    (c) Fraser Stuart 2009

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

*/

#include <math.h>
#include <ladspa.h>
#include "libinv_common.h"


/* a function that checks to see if a control has been changed and calls the provided conversion fuction */
void checkParamChange(
	unsigned long param, 
	LADSPA_Data * control, 
	LADSPA_Data * last, 
	LADSPA_Data * converted, 
	unsigned long sr,
	LADSPA_Data (*ConvertFunction)(unsigned long, LADSPA_Data, unsigned long)
	) 
{
	if(*control != *last) {
		*last=*control;
		*converted=(*ConvertFunction)(param, *control, sr);
	}
}


/* this function is linear between -0.7 & 0.7 (approx -3db) and returns a value bewteen 0.7 and 1 for an input from 0.7 to infinity */
LADSPA_Data InoClip(LADSPA_Data in)
{
	LADSPA_Data out; 
	if ( fabs(in) < 0.7 ) 
	  out = in;
	else 
	  out = (in>0) ? 
	            (  0.7 + 0.3 * (1-pow(2.718281828, 3.33333333*(0.7-in)))):
	            ( -0.7 - 0.3 * (1-pow(2.718281828, 3.33333333*(0.7+in))));
	return out;
}

/* distortion function based on sin() */
LADSPA_Data ITube(LADSPA_Data in, LADSPA_Data Drive)
{
	LADSPA_Data out;
	out = (in>0) ? pow( fabs(sin(in*Drive*PI_ON_2)),ITUBE_MAGIC ) : -pow( fabs(sin(-in*Drive*PI_ON_2)),ITUBE_MAGIC );
	return out;
}