1 /* 2 * Copyright 2019 Google LLC 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 * https://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 #ifndef ANDROID_FXLAB_WHITENOISE_H 17 #define ANDROID_FXLAB_WHITENOISE_H 18 class WhiteNoise { 19 const int kScale; 20 public: WhiteNoise(int scale)21 WhiteNoise(int scale): kScale(scale) {} operator()22 float operator() () { 23 static int counter = 0; 24 static float r_0, r_1 = 0; 25 if (counter == 0) { 26 r_0 = r_1; 27 r_1 = (static_cast <float> (rand()) / static_cast <float> (RAND_MAX)) * 2 - 1; 28 } 29 float ret = r_0 + counter * (r_1 - r_0) / kScale; 30 if (++counter == kScale) counter = 0; 31 if (ret > 0.99) return 0.99f; 32 if (ret < -0.99) return -0.99f; 33 return ret; 34 } 35 }; 36 #endif //ANDROID_FXLAB_WHITENOISE_H 37