01: /*
02: * Copyright (c) 2000 Silvere Martin-Michiellot All Rights Reserved.
03: *
04: * Silvere Martin-Michiellot grants you ("Licensee") a non-exclusive,
05: * royalty free, license to use, modify and redistribute this
06: * software in source and binary code form,
07: * provided that i) this copyright notice and license appear on all copies of
08: * the software; and ii) Licensee does not utilize the software in a manner
09: * which is disparaging to Silvere Martin-Michiellot.
10: *
11: * This software is provided "AS IS," without a warranty of any kind. ALL
12: * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
13: * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
14: * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. Silvere Martin-Michiellot
15: * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
16: * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
17: * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
18: * Silvere Martin-Michiellot OR ITS LICENSORS BE LIABLE
19: * FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
20: * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
21: * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
22: * OR INABILITY TO USE SOFTWARE, EVEN IF Silvere Martin-Michiellot HAS BEEN
23: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
24: *
25: * This software is not designed or intended for use in on-line control of
26: * aircraft, air traffic, aircraft navigation or aircraft communications; or in
27: * the design, construction, operation or maintenance of any nuclear
28: * facility. Licensee represents and warrants that it will not use or
29: * redistribute the Software for such purposes.
30: *
31: */
32:
33: // This code is repackaged after the code from Craig A. Lindley, from Digital Audio with Java
34: // Site ftp://ftp.prenhall.com/pub/ptr/professional_computer_science.w-022/digital_audio/
35: // Email
36: package com.db.media.audio.dsp.filter;
37:
38: // Optimized IIR highpass filter used as shelving EQ
39:
40: public class IIRHighpassFilter extends IIRFilterBase {
41:
42: // IIRHighpassFilter class constructor
43: // alpha, beta and gamma are precalculated filter coefficients
44: // that are passed into this filter element.
45: public IIRHighpassFilter(double alpha, double beta, double gamma) {
46:
47: super (alpha, beta, gamma);
48:
49: }
50:
51: // Filter coefficients can also be extracted by passing in
52: // design object.
53: public IIRHighpassFilter(IIRHighpassFilterDesign fd) {
54:
55: super (fd);
56:
57: }
58:
59: // Run the filter algorithm
60: public void doFilter(short[] inBuffer, double[] outBuffer,
61: int length) {
62:
63: for (int index = 0; index < length; index++) {
64: // Fetch sample
65: inArray[iIndex] = (double) inBuffer[index];
66:
67: // Do indices maintainance
68: jIndex = iIndex - 2;
69: if (jIndex < 0)
70: jIndex += HISTORYSIZE;
71: kIndex = iIndex - 1;
72: if (kIndex < 0)
73: kIndex += HISTORYSIZE;
74:
75: // Run the highpass difference equation
76: double out = outArray[iIndex] = 2.0 * (alpha
77: * (inArray[iIndex] - (2 * inArray[kIndex]) + inArray[jIndex])
78: + gamma * outArray[kIndex] - beta
79: * outArray[jIndex]);
80:
81: outBuffer[index] += amplitudeAdj * out;
82:
83: iIndex = (iIndex + 1) % HISTORYSIZE;
84: }
85:
86: }
87:
88: }
|