1 /** 2 * The MIT License (MIT) 3 * 4 * Copyright (c) 2013-2018 Igor Zinken - https://www.igorski.nl 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a copy of 7 * this software and associated documentation files (the "Software"), to deal in 8 * the Software without restriction, including without limitation the rights to 9 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 10 * the Software, and to permit persons to whom the Software is furnished to do so, 11 * subject to the following conditions: 12 * 13 * The above copyright notice and this permission notice shall be included in all 14 * copies or substantial portions of the Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 18 * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 19 * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 20 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 21 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 */ 23 #ifndef __BITCRUSHER_H_INCLUDED__ 24 #define __BITCRUSHER_H_INCLUDED__ 25 26 #include "lfo.h" 27 28 namespace Igorski { 29 class BitCrusher { 30 31 public: 32 BitCrusher( float amount, float inputMix, float outputMix, float sampleRate ); 33 ~BitCrusher(); 34 35 void setLFO( float LFORatePercentage, float LFODepth ); 36 void process( float* inBuffer, int bufferSize ); 37 38 void setAmount( float value ); // range between -1 to +1 39 void setInputMix( float value ); 40 void setOutputMix( float value ); 41 42 LFO* lfo; 43 bool hasLFO; 44 45 private: 46 int _bits; // we scale the amount to integers in the 1-16 range 47 float _amount; 48 float _inputMix; 49 float _outputMix; 50 51 void cacheLFO(); 52 void calcBits(); 53 float _tempAmount; 54 float _lfoDepth; 55 float _lfoRange; 56 float _lfoMax; 57 float _lfoMin; 58 }; 59 } 60 61 #endif 62