21#ifndef __CALF_PRIMITIVES_H
22#define __CALF_PRIMITIVES_H
34#define M_PI 3.14159265358979323846264338327
51inline void zero(uint64_t &
v) {
v = 0; };
59inline void zero(int64_t &
v) {
v = 0; };
72 for (
unsigned int i=0;
i<
size;
i++)
79 for (
unsigned int i=0;
i<
size;
i++)
187 v.left =
shr(
v.left, bits);
188 v.right =
shr(
v.right, bits);
208 return (1.0/16777216.0);
214 return (1.0/16777216.0);
226 return shr(
v.left+
v.right);
241 return (
value<0) ? -1.0 : 1.0;
248 return (
value<0) ? -1.0f : 1.0f;
253 double a = fabs(
value-0.5);
255 return (
a<0) ? -0.0 : 1.0;
260 float a = fabsf(
value-0.5f);
261 if (
a<=0.5f)
return value;
262 return (
value < 0) ? -0.0f : 1.0f;
266template<
typename T,
typename U>
268 return v1+(
v2-v1)*mix;
321 return pow(times, 1.0 / cycles);
323 inline void age_exp(
double constant,
double epsilon) {
334 inline void age_lin(
double constant,
double epsilon) {
360 const int val = *
reinterpret_cast <const int *
> (&
value);
361 if ((
val & 0x7F800000) == 0 && (
val & 0x007FFFFF) != 0)
376 if (!std::isnormal(
value))
385 if (!std::isnormal(
value))
417 return (
value & 0xFFFF) * (1.0 / 65536.0);
423template<
class T,
int N,
int Multiplier>
433 for (
int i=0;
i<
N+1;
i++)
438template<
class T,
int N,
int Multiplier>
441template<
class T,
int N,
int Multiplier>
449 __asm (
"flds %1; fistpl %0" :
"=m"(
v) :
"m"(
f));
452 return (
int)nearbyintf(
f);
457inline float note_to_hz(
double note,
double detune_cents = 0.0)
459 return 440 * pow(2.0, (note - 69 + detune_cents/100.0) / 12.0);
472 return (2*t3 - 3*t2 + 1) * p0 + (t3 - 2*t2 +
t) * m0 + (-2*t3 + 3*t2) * p1 + (t3-t2) * m1;
485 float width = x1 - x0;
494 float ct2 = -3 * p0 - 2 * m0 + 3 * p1 - m1;
495 float ct3 = 2 * p0 + m0 - 2 * p1 + m1;
497 return ct3 * t3 + ct2 * t2 + ct1 *
t + ct0;
504 return 20 * log10(amp);
509 return exp((db / 20.0) * log(10.0));
516 unsigned char *
b = (
unsigned char*) ptr;
518 for (
int i =
size - 1;
i >=0 ;
i--) {
519 for (
int j = 7;
j >= 0;
j--) {
520 byte =
b[
i] & (1<<
j);
541 static const char notenames[] =
"C\0\0C#\0D\0\0D#\0E\0\0F\0\0F#\0G\0\0G#\0A\0\0A#\0B\0\0";
542 double f2 = log2(hz / tune);
543 double cn = fmod(f2 * 1200., 100.);
545 desc.
note = std::max(0., round(12 * f2 + 69));
546 desc.
name = notenames + (desc.
note % 12) * 3;
547 desc.
cents = (cn < -50) ? 100 + cn : (cn > 50) ? -(100 - cn) : cn;
560 if (unit_in == unit_out)
uint8_t a
Definition Spc_Cpu.h:141
#define byte
Definition blargg_source.h:87
double initial
Definition primitives.h:282
static double calc_exp_constant(double times, double cycles)
Definition primitives.h:317
void age_exp(double constant, double epsilon)
Definition primitives.h:323
unsigned int mask
Definition primitives.h:283
void deactivate()
Definition primitives.h:345
void age_lin(double constant, double epsilon)
Definition primitives.h:334
bool get_active()
Definition primitives.h:291
double get()
Definition primitives.h:294
void set(double v)
Definition primitives.h:297
double value
Definition primitives.h:282
void reinit()
reinitialise envelope (must be called if shape changes from linear to exponential or vice versa in th...
Definition primitives.h:303
unsigned int age
Definition primitives.h:283
bool active
Definition primitives.h:284
decay()
Definition primitives.h:286
void add(double v)
Definition primitives.h:308
sine_table()
Definition primitives.h:429
static bool initialized
Definition primitives.h:427
static T data[N+1]
Definition primitives.h:428
#define M_PI
Definition compat.h:149
struct huft * t
Definition inflate.c:943
register unsigned j
Definition inflate.c:1576
unsigned v[N_MAX]
Definition inflate.c:1584
register unsigned i
Definition inflate.c:1575
unsigned x[BMAX+1]
Definition inflate.c:1586
unsigned f
Definition inflate.c:1572
static void v2(register WDL_FFT_REAL *a)
Definition fft.c:1099
#define U(x)
Definition fmopl.c:132
static PuglViewHint int value
Definition pugl.h:1708
static int width
Definition pugl.h:1593
JHUFF_TBL long freq[]
Definition jchuff.h:50
int val
Definition jpeglib.h:956
unsigned short uint16_t
Definition mid.cpp:99
int int32_t
Definition mid.cpp:97
unsigned int uint32_t
Definition mid.cpp:100
short int16_t
Definition mid.cpp:96
unsigned char uint8_t
Definition mid.cpp:98
signed char int8_t
Definition mid.cpp:95
double clip01(double value)
Clip a double to [0.0, +1.0].
Definition primitives.h:252
float _sanitize(float value)
Definition primitives.h:364
T lerp(T v1, T v2, U mix)
Definition primitives.h:267
void zero(float &v)
Set a float to zero.
Definition primitives.h:41
stereo_sample< T > operator-(const T &value, const stereo_sample< T > &value2)
Subtract stereo_value from constant (yields stereo_value of course).
Definition primitives.h:180
double convert_periodic(double val, periodic_unit unit_in, periodic_unit unit_out)
Definition primitives.h:555
fixed_point< T, FractBits > operator*(int v, fixed_point< T, FractBits > v2)
Definition fixed_point.h:258
stereo_sample< T > operator+(const T &value, const stereo_sample< T > &value2)
Add constant to stereo_value.
Definition primitives.h:174
periodic_unit
Definition primitives.h:553
@ UNIT_HZ
Definition primitives.h:553
@ UNIT_SYNC
Definition primitives.h:553
@ UNIT_MS
Definition primitives.h:553
@ UNIT_BPM
Definition primitives.h:553
T sine_table< T, N, Multiplier >::data[N+1]
Definition primitives.h:442
float dB2amp(float db)
convert dB to amplitude value
Definition primitives.h:507
uint32_t shr(uint32_t v, int bits=1)
Definition fixed_point.h:26
T small_value()
'Small value' for integer and other types
Definition primitives.h:201
float normalized_hermite(float t, float p0, float p1, float m0, float m1)
Definition primitives.h:468
float fract16(unsigned int value)
Definition primitives.h:415
double clip11(double value)
Clip a double to [-1.0, +1.0].
Definition primitives.h:238
note_desc hz_to_note(double hz, double tune)
Definition primitives.h:538
int fastf2i_drm(float f)
fast float to int conversion using default rounding mode
Definition primitives.h:445
void sanitize(float &value)
Definition primitives.h:354
float small_value< float >()
'Small value' for floats (2^-24) - used for primitive underrun prevention. The value is pretty much a...
Definition primitives.h:207
double small_value< double >()
'Small value' for doubles (2^-24) - used for primitive underrun prevention. The value is pretty much ...
Definition primitives.h:213
float hermite_interpolation(float x, float x0, float x1, float p0, float p1, float m0, float m1)
Definition primitives.h:483
void print_bits(size_t const size, void const *const ptr)
Definition primitives.h:514
float mono(T v)
Convert a single value to single value = do nothing :) (but it's a generic with specialisation for st...
Definition primitives.h:219
void sanitize_denormal(float &value)
Definition primitives.h:374
T clip(T value, T min, T max)
Clip a value to [min, max].
Definition primitives.h:231
float note_to_hz(double note, double detune_cents=0.0)
Convert MIDI note to frequency in Hz.
Definition primitives.h:457
void fill(Buf &buf, T value)
Definition buffer.h:50
float amp2dB(float amp)
convert amplitude value to dB
Definition primitives.h:502
#define N
Definition nseel-cfunc.c:36
#define min(x, y)
Definition os.h:74
#define max(x, y)
Definition os.h:78
Definition primitives.h:530
double freq
Definition primitives.h:533
const char * name
Definition primitives.h:535
int octave
Definition primitives.h:534
int note
Definition primitives.h:531
double cents
Definition primitives.h:532
Definition primitives.h:83
stereo_sample< T > operator+(const stereo_sample< T > &value)
Definition primitives.h:140
stereo_sample< T > operator+(const T &value)
Definition primitives.h:146
stereo_sample< double > operator-(double value)
Definition primitives.h:161
stereo_sample(const stereo_sample< U > &value)
Definition primitives.h:97
stereo_sample & operator*=(const T &multiplier)
Definition primitives.h:116
stereo_sample< double > operator+(double value)
Definition primitives.h:158
stereo_sample< T > operator-(const stereo_sample< T > &value)
Definition primitives.h:143
stereo_sample< float > operator-(float value)
Definition primitives.h:155
stereo_sample()
default constructor - preserves T's semantics (ie. no implicit initialization to 0)
Definition primitives.h:87
stereo_sample(T _both)
Definition primitives.h:93
stereo_sample< U > operator*(const U &value) const
Definition primitives.h:131
stereo_sample & operator=(const T &value)
Definition primitives.h:101
T right
Definition primitives.h:85
stereo_sample & operator=(const stereo_sample< U > &value)
Definition primitives.h:106
stereo_sample & operator-=(const stereo_sample< T > &value)
Definition primitives.h:126
T left
Definition primitives.h:84
stereo_sample< T > operator-(const T &value)
Definition primitives.h:149
stereo_sample(T _left, T _right)
Definition primitives.h:89
stereo_sample & operator+=(const stereo_sample< T > &value)
Definition primitives.h:121
stereo_sample< float > operator+(float value)
Definition primitives.h:152
typedef int(UZ_EXP MsgFn)()