/* Copyright 2013 Google Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ #ifndef __PITCHENV_H #define __PITCHENV_H // Computation of the DX7 pitch envelope class PitchEnv { public: static void init(FRAC_NUM sample_rate); // The rates and levels arrays are calibrated to match the Dx7 parameters // (ie, value 0..99). void set(const int rates[4], const int levels[4]); // Result is in Q24/octave int32_t getsample(); void keydown(bool down); void getPosition(char *step); private: static int unit_; int rates_[4]; int levels_[4]; int32_t level_; int targetlevel_; bool rising_; int ix_; int inc_; bool down_; void advance(int newix); }; extern const uint8_t pitchenv_rate[]; extern const int8_t pitchenv_tab[]; #endif // __PITCHENV_H