blob: 13343bcedda932b9c6aa34160635a7f7e94f74ff (
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
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
/*
a FFT filter
Copyright (C) 1998 Martin Vogt;Philip VanBaren, 2 September 1993
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.
For more information look at the file COPYRIGHT in this package
*/
#include "realFFTFilter.h"
RealFFTFilter::RealFFTFilter(int fftPoints) {
this->fftPoints = fftPoints;
data=new short[fftPoints*4];
realFFT= new RealFFT(fftPoints*2);
}
RealFFTFilter::~RealFFTFilter() {
delete data;
delete realFFT;
}
int RealFFTFilter::getPoints() {
return fftPoints;
}
short* RealFFTFilter::getPointPtr() {
return data;
}
/*
the array is expected to be a PCM stream (real data)
*/
int RealFFTFilter::fft16(float* left,float* right,int len) {
int i;
len=len/4;
int mixTmp;
// take care for no array overflows:
int n=min(len,fftPoints);
// copy things into fftArray.
for (i = 0 ; i < n; i++) {
mixTmp=(int) (16384.0*(left[i]+right[i]));
if (mixTmp < SHRT_MIN) {
data[i]= SHRT_MIN;
} else {
if (mixTmp > SHRT_MAX) {
data[i] = SHRT_MAX;
} else {
data[i]=(short)mixTmp;
}
}
}
realFFT->fft(data);
return true;
}
int* RealFFTFilter::getBitReversed() {
return realFFT->getBitReversed();
}
int RealFFTFilter::min(int x1,int x2) {
if (x1 < x2) {
return x1;
}
return x2;
}
|