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 17 #ifndef ANDROID_FXLAB_PHASEACCUMULATOR_H 18 #define ANDROID_FXLAB_PHASEACCUMULATOR_H 19 20 #include <cmath> 21 22 23 24 class PhaseAccumulator { 25 public: PhaseAccumulator(float frequency,float sampleRate)26 PhaseAccumulator(float frequency, float sampleRate): 27 f(frequency), 28 fs(sampleRate) { } incrementPhase()29 float incrementPhase() { 30 mPhase += kDelta; 31 if (mPhase >= kTwoPi) mPhase -= kTwoPi; 32 return mPhase; 33 } 34 private: 35 float mPhase = 0; 36 const float f; 37 const float fs; 38 static constexpr float kTwoPi = M_PI * 2; 39 const float kDelta = kTwoPi * f / fs; 40 }; 41 #endif //ANDROID_FXLAB_PHASEACCUMULATOR_H 42