/*
rakarrack - a guitar effects software
Compressor.h - Compressor Effect definitions
Based on artscompressor.cc by Matthias Kretz <kretz@kde.org>
Stefan Westerfeld <stefan@space.twc.de>
Copyright (C) 2008-2010 Josep Andreu
Author: Josep Andreu & Ryan Billing
This program is free software; you can redistribute it and/or modify
it under the terms of version 2 of the GNU General Public License
as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License (version 2) for more details.
You should have received a copy of the GNU General Public License
(version2) along with this program; if not, write to the Free Software
Foundation,
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef RR_GLOBAL_H
#define RR_GLOBAL_H
#include "Klang.hpp"
// #define PI 3.141598f
#define D_PI 6.283185f
#define LOG_10 2.302585f
#define LOG_2 0.693147f
#define LN2R 1.442695041f
#define CNST_E 2.71828182845905f
#define AMPLITUDE_INTERPOLATION_THRESHOLD 0.0001f
#define FF_MAX_VOWELS 6
#define FF_MAX_FORMANTS 12
#define FF_MAX_SEQUENCE 8
#define MAX_FILTER_STAGES 5
#define RND (rand() / (RAND_MAX + 1.0))
#define RND1 (((float)rand()) / (((float)RAND_MAX) + 1.0f))
#define F2I(f, i) (i) = ((f > 0) ? ((int)(f)) : ((int)(f - 1.0f)))
#define dB2rap(dB) (float)((expf((dB)*LOG_10 / 20.0f)))
#define rap2dB(rap) (float)((20 * log(rap) / LOG_10))
#define CLAMP(x, low, high) (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x)))
#define INTERPOLATE_AMPLITUDE(a, b, x, size) ((a) + ((b) - (a)) * (float)(x) / (float)(size))
#define ABOVE_AMPLITUDE_THRESHOLD(a, b) ((2.0f * fabs((b) - (a)) / (fabs((b) + (a) + 0.0000000001f))) > AMPLITUDE_INTERPOLATION_THRESHOLD)
#define POLY 8
#define DENORMAL_GUARD 1e-18f // Make it smaller until CPU problem re-appears
#define SwapFourBytes(data) ((((data) >> 24) & 0x000000ff) | (((data) >> 8) & 0x0000ff00) | (((data) << 8) & 0x00ff0000) | (((data) << 24) & 0xff000000))
#define D_NOTE 1.059463f
#define LOG_D_NOTE 0.057762f
#define D_NOTE_SQRT 1.029302f
#define MAX_PEAKS 8
#define MAX_ALIENWAH_DELAY 100
#define ATTACK 0.175f // crossover time for reverse delay
#define MAX_DELAY 2 // Number of Seconds
#define MAXHARMS 8 // max number of harmonics available
#define MAX_PHASER_STAGES 12
#define MAX_CHORUS_DELAY 250.0f // ms
#define LN2 (1.0f) // Uncomment for att/rel to behave more like a capacitor.
#define MUG_CORR_FACT 0.4f
#define Thi 0.67f // High threshold for limiting onset /* ----------- */ Crunch waveshaping constants
#define Tlo -0.65f // Low threshold for limiting onset
#define Tlc -0.6139445f // Tlo + sqrt(Tlo/500)
#define Thc 0.6365834f // Thi - sqrt(Thi/600)
#define CRUNCH_GAIN 100.0f // Typical voltage gain for most OD stompboxes
#define DIV_TLC_CONST 0.002f // 1/300
#define DIV_THC_CONST 0.0016666f // 1/600 (approximately) /* ----------- */ End waveshaping constants
#define D_FLANGE_MAX_DELAY 0.055f // Number of Seconds - 50ms corresponds to fdepth = 20 (Hz). Added some extra for padding
#define LFO_CONSTANT 9.765625e-04 // 1/(2^LOG_FMAX - 1)
#define LOG_FMAX 10.0f // -- This optimizes LFO sweep for useful range.
#define MINDEPTH 20.0f // won't allow filter lower than 20Hz
#define MAXDEPTH 15000.0f // Keeps delay greater than 2 samples at 44kHz SR
#define MAX_EQ_BANDS 16
#define CLOSED 1
#define OPENING 2
#define OPEN 3
#define CLOSING 4
#define ENV_TR 0.0001f
#define HARMONICS 11
#define REV_COMBS 8
#define REV_APS 4
#define MAX_SFILTER_STAGES 12
#define SAMPLE_RATE KLANG_AUDIO_RATE
#define cSAMPLE_RATE (1.0f / (float)SAMPLE_RATE)
#define PERIOD KLANG_SAMPLES_PER_AUDIO_BLOCK
#endif // RR_GLOBAL_H