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