/* 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 int32_t rates[4], const int32_t levels[4]); // Result is in Q24/octave int32_t getsample(); void keydown(bool down); void getPosition(char *step); private: static int32_t unit_; int32_t rates_[4]; int32_t levels_[4]; int32_t level_; int32_t targetlevel_; bool rising_; int32_t ix_; int32_t inc_; bool down_; void advance(int newix); }; extern const uint8_t pitchenv_rate[]; extern const int8_t pitchenv_tab[]; #endif