1 /*
2 * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
70 this.rovepos = rovepos;
71 }
72 }
73
74 private static final class AllPass {
75
76 private final float[] delaybuffer;
77 private final int delaybuffersize;
78 private int rovepos = 0;
79 private float feedback;
80
81 AllPass(int size) {
82 delaybuffer = new float[size];
83 delaybuffersize = size;
84 }
85
86 public void setFeedBack(float feedback) {
87 this.feedback = feedback;
88 }
89
90 public void processReplace(float inout[]) {
91 int len = inout.length;
92 int delaybuffersize = this.delaybuffersize;
93 int rovepos = this.rovepos;
94 for (int i = 0; i < len; i++) {
95 float delayout = delaybuffer[rovepos];
96 float input = inout[i];
97 inout[i] = delayout - input;
98 delaybuffer[rovepos] = input + delayout * feedback;
99 if (++rovepos == delaybuffersize)
100 rovepos = 0;
101 }
102 this.rovepos = rovepos;
103 }
104
105 public void processReplace(float in[], float out[]) {
106 int len = in.length;
107 int delaybuffersize = this.delaybuffersize;
108 int rovepos = this.rovepos;
109 for (int i = 0; i < len; i++) {
110 float delayout = delaybuffer[rovepos];
111 float input = in[i];
112 out[i] = delayout - input;
113 delaybuffer[rovepos] = input + delayout * feedback;
114 if (++rovepos == delaybuffersize)
115 rovepos = 0;
116 }
117 this.rovepos = rovepos;
118 }
119 }
120
121 private static final class Comb {
122
123 private final float[] delaybuffer;
124 private final int delaybuffersize;
125 private int rovepos = 0;
126 private float feedback;
127 private float filtertemp = 0;
128 private float filtercoeff1 = 0;
129 private float filtercoeff2 = 1;
130
131 Comb(int size) {
132 delaybuffer = new float[size];
133 delaybuffersize = size;
134 }
135
136 public void setFeedBack(float feedback) {
137 this.feedback = feedback;
138 filtercoeff2 = (1 - filtercoeff1)* feedback;
139 }
140
141 public void processMix(float in[], float out[]) {
142 int len = in.length;
143 int delaybuffersize = this.delaybuffersize;
144 int rovepos = this.rovepos;
145 float filtertemp = this.filtertemp;
146 float filtercoeff1 = this.filtercoeff1;
147 float filtercoeff2 = this.filtercoeff2;
148 for (int i = 0; i < len; i++) {
149 float delayout = delaybuffer[rovepos];
150 // One Pole Lowpass Filter
151 filtertemp = (delayout * filtercoeff2)
152 + (filtertemp * filtercoeff1);
153 out[i] += delayout;
154 delaybuffer[rovepos] = in[i] + filtertemp;
155 if (++rovepos == delaybuffersize)
156 rovepos = 0;
157 }
158 this.filtertemp = filtertemp;
159 this.rovepos = rovepos;
160 }
161
162 public void processReplace(float in[], float out[]) {
163 int len = in.length;
164 int delaybuffersize = this.delaybuffersize;
165 int rovepos = this.rovepos;
166 float filtertemp = this.filtertemp;
167 float filtercoeff1 = this.filtercoeff1;
168 float filtercoeff2 = this.filtercoeff2;
169 for (int i = 0; i < len; i++) {
170 float delayout = delaybuffer[rovepos];
171 // One Pole Lowpass Filter
172 filtertemp = (delayout * filtercoeff2)
173 + (filtertemp * filtercoeff1);
174 out[i] = delayout;
175 delaybuffer[rovepos] = in[i] + filtertemp;
176 if (++rovepos == delaybuffersize)
177 rovepos = 0;
178 }
179 this.filtertemp = filtertemp;
180 this.rovepos = rovepos;
181 }
182
|
1 /*
2 * Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
70 this.rovepos = rovepos;
71 }
72 }
73
74 private static final class AllPass {
75
76 private final float[] delaybuffer;
77 private final int delaybuffersize;
78 private int rovepos = 0;
79 private float feedback;
80
81 AllPass(int size) {
82 delaybuffer = new float[size];
83 delaybuffersize = size;
84 }
85
86 public void setFeedBack(float feedback) {
87 this.feedback = feedback;
88 }
89
90 public void processReplace(float[] inout) {
91 int len = inout.length;
92 int delaybuffersize = this.delaybuffersize;
93 int rovepos = this.rovepos;
94 for (int i = 0; i < len; i++) {
95 float delayout = delaybuffer[rovepos];
96 float input = inout[i];
97 inout[i] = delayout - input;
98 delaybuffer[rovepos] = input + delayout * feedback;
99 if (++rovepos == delaybuffersize)
100 rovepos = 0;
101 }
102 this.rovepos = rovepos;
103 }
104
105 public void processReplace(float[] in, float[] out) {
106 int len = in.length;
107 int delaybuffersize = this.delaybuffersize;
108 int rovepos = this.rovepos;
109 for (int i = 0; i < len; i++) {
110 float delayout = delaybuffer[rovepos];
111 float input = in[i];
112 out[i] = delayout - input;
113 delaybuffer[rovepos] = input + delayout * feedback;
114 if (++rovepos == delaybuffersize)
115 rovepos = 0;
116 }
117 this.rovepos = rovepos;
118 }
119 }
120
121 private static final class Comb {
122
123 private final float[] delaybuffer;
124 private final int delaybuffersize;
125 private int rovepos = 0;
126 private float feedback;
127 private float filtertemp = 0;
128 private float filtercoeff1 = 0;
129 private float filtercoeff2 = 1;
130
131 Comb(int size) {
132 delaybuffer = new float[size];
133 delaybuffersize = size;
134 }
135
136 public void setFeedBack(float feedback) {
137 this.feedback = feedback;
138 filtercoeff2 = (1 - filtercoeff1)* feedback;
139 }
140
141 public void processMix(float[] in, float[] out) {
142 int len = in.length;
143 int delaybuffersize = this.delaybuffersize;
144 int rovepos = this.rovepos;
145 float filtertemp = this.filtertemp;
146 float filtercoeff1 = this.filtercoeff1;
147 float filtercoeff2 = this.filtercoeff2;
148 for (int i = 0; i < len; i++) {
149 float delayout = delaybuffer[rovepos];
150 // One Pole Lowpass Filter
151 filtertemp = (delayout * filtercoeff2)
152 + (filtertemp * filtercoeff1);
153 out[i] += delayout;
154 delaybuffer[rovepos] = in[i] + filtertemp;
155 if (++rovepos == delaybuffersize)
156 rovepos = 0;
157 }
158 this.filtertemp = filtertemp;
159 this.rovepos = rovepos;
160 }
161
162 public void processReplace(float[] in, float[] out) {
163 int len = in.length;
164 int delaybuffersize = this.delaybuffersize;
165 int rovepos = this.rovepos;
166 float filtertemp = this.filtertemp;
167 float filtercoeff1 = this.filtercoeff1;
168 float filtercoeff2 = this.filtercoeff2;
169 for (int i = 0; i < len; i++) {
170 float delayout = delaybuffer[rovepos];
171 // One Pole Lowpass Filter
172 filtertemp = (delayout * filtercoeff2)
173 + (filtertemp * filtercoeff1);
174 out[i] = delayout;
175 delaybuffer[rovepos] = in[i] + filtertemp;
176 if (++rovepos == delaybuffersize)
177 rovepos = 0;
178 }
179 this.filtertemp = filtertemp;
180 this.rovepos = rovepos;
181 }
182
|