Home | History | Annotate | Download | only in audio
      1 /*
      2  * Copyright (C) 2015 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.cts.verifier.audio;
     18 
     19 public class AudioBandSpecs {
     20     double mFreqStart;
     21     double mFreqStop;
     22     double mRippleStartTop;
     23     double mRippleStartBottom;
     24 
     25     double mRippleStopTop;
     26     double mRippleStopBottom;
     27 
     28     double mOffset;
     29 
     30     public AudioBandSpecs(double fStart, double fStop, double startTop, double startBottom,
     31             double stopTop, double stopBottom) {
     32         initFreq(fStart, fStop);
     33         initRipple(startTop, startBottom, stopTop, stopBottom);
     34         setOffset(0);
     35     }
     36 
     37     public void initRipple(double startTop, double startBottom, double stopTop, double stopBottom) {
     38         mRippleStartTop = startTop;
     39         mRippleStartBottom = startBottom;
     40         mRippleStopTop = stopTop;
     41         mRippleStopBottom = stopBottom;
     42         // note: top should be >= bottom, but no check is done here.
     43     }
     44 
     45     public void initFreq(double fStart, double fStop) {
     46         mFreqStart = fStart;
     47         mFreqStop = fStop;
     48     }
     49 
     50     public void setOffset(double offset) {
     51         mOffset = offset;
     52     }
     53 
     54     /**
     55      * Check if the given point is in bounds in this band.
     56      */
     57     public boolean isInBounds(double freq, double value) {
     58         if (freq < mFreqStart || freq > mFreqStop) {
     59             return false;
     60         }
     61 
     62         double d = mFreqStop - mFreqStart;
     63         if (d <= 0) {
     64             return false;
     65         }
     66 
     67         double e = freq - mFreqStart;
     68         double vTop = (e / d) * (mRippleStopTop - mRippleStartTop) + mRippleStartTop + mOffset;
     69         if (value > vTop) {
     70             return false;
     71         }
     72 
     73         double vBottom = (e / d) * (mRippleStopBottom - mRippleStartBottom) + mRippleStartBottom
     74                 + mOffset;
     75 
     76         if (value < vBottom) {
     77             return false;
     78         }
     79         return true;
     80     }
     81 
     82     public String toString() {
     83         StringBuilder sb = new StringBuilder();
     84         sb.append(String.format("Freq %.1f - %.1f |", mFreqStart, mFreqStop));
     85         sb.append(String.format("start [%.1f : %.1f] |", mRippleStartTop, mRippleStartBottom));
     86         sb.append(String.format("stop  [%.1f : %.1f] |", mRippleStopTop, mRippleStopBottom));
     87         sb.append(String.format("offset %.1f", mOffset));
     88         return sb.toString();
     89     }
     90 }