summaryrefslogtreecommitdiff
path: root/plugins/ZamPiano/instrument.cpp
blob: 0a7794178876e01d4ded57207885eb5f2da4f1a7 (plain)
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
#include "instrument.hpp"

LookupTable::LookupTable()
{
	m_Points = NULL;
	m_nPoints = 0;
}

void LookupTable::set(double *points, int num_points)
{
	// Note: Actual array size is 2*num_points
	
	m_Points = points;
	m_nPoints = num_points;
}

double LookupTable::getValue(double x)
{
	// Note: Assumes points are monotonically increasing in X!
	
	int i=0;
	while (x>m_Points[i*2] && i<m_nPoints)
		i++;
	
	if (i==0)
		return m_Points[1];
	
	if (i>=m_nPoints)
		return m_Points[(m_nPoints-1)*2+1];
	
	double ratio =
	(x - m_Points[(i-1)*2])
	/ (m_Points[i*2] - m_Points[(i-1)*2]);
	
	return m_Points[(i-1)*2+1]*(1-ratio) + m_Points[i*2+1]*(ratio);
}