History

First commit.

mulshine committed 7 years ago

Commit 127a1131 parent 824e8d1147 files · +49021 −-7Browse files

Showing the changes to LEAF/Src_cpp/leaf-math.cpp (1 of 147 files). Show all

Unified · Split

LEAF/Src_cpp/leaf-math.cpp+149−0
@@ -0,0 +1,149 @@
1/*
2 ==============================================================================
3
4 LEAFMath.c
5 Created: 22 Jan 2017 7:02:56pm
6 Author: Michael R Mulshine
7
8 ==============================================================================
9*/
10
11#if _WIN32 || _WIN64
12
13#include "..\Inc\leaf-math.h"
14#include "..\Inc\leaf-wavetables.h"
15
16#else
17
18#include "../Inc/leaf-math.h"
19#include "../Inc/leaf-wavetables.h"
20
21#endif
22
23// The C-embedded Audio Library.
24#define TWO_TO_16 65536.f
25
26#define EXPONENTIAL_TABLE_SIZE 65536
27
28
29
30
31
32// dope af
33float LEAF_chebyshevT(float in, int n){
34 if (n == 0) return 1;
35 else if (n == 1) return in;
36 else return 2.0f * in * LEAF_chebyshevT(in, n-1) - LEAF_chebyshevT(in, n-2);
37}
38
39#if !(_WIN32 || _WIN64)
40float LEAF_CompoundChebyshevT(float in, int n, float* amps){
41 float T[n+1];
42 T[0] = 1.0f;
43 T[1] = in;
44 for (int i = 2; i <= n; ++i)
45 T[i] = 2*in*T[i-1] - T[i-2];
46 float out = 0;
47 float amp = 0;
48 for (int i = 0; i < n; ++i){
49 out += amps[i]*T[i+1];
50 amp += amps[i];
51 }
52 return out / amp ;
53}
54#endif
55
56float LEAF_frequencyToMidi(float f)
57{
58 return (69.0f + 12.0f * log2(f * INV_440));
59}
60
61// Erbe shaper
62float LEAF_shaper(float input, float m_drive)
63{
64 float fx = input * 2.0f; // prescale
65 float w, c, xc, xc2, xc4;
66
67 xc = LEAF_clip(-SQRT8, fx, SQRT8);
68 xc2 = xc*xc;
69 c = 0.5f*fx*(3.0f - (xc2));
70 xc4 = xc2 * xc2;
71 w = (1.0f - xc2*0.25f + xc4*0.015625f) * WSCALE;
72 float shaperOut = w*(c+ 0.05f*xc2)*(m_drive + 0.75f);
73 shaperOut *= 0.5f; // post_scale
74 return shaperOut;
75}
76
77float LEAF_reedTable(float input, float offset, float slope)
78{
79 float output = offset + (slope * input);
80 if ( output > 1.0f) output = 1.0f;
81 if ( output < -1.0f) output = -1.0f;
82 return output;
83}
84
85float LEAF_softClip(float val, float thresh)
86{
87 float x;
88
89 if(val > thresh)
90 {
91 x = thresh / val;
92 return (1.0f - x) * (1.0f - thresh) + thresh;
93 }
94 else if(val < -thresh)
95 {
96 x = -thresh / val;
97 return -((1.0f - x) * (1.0f - thresh) + thresh);
98 }
99 else
100 {
101 return val;
102 }
103}
104
105float LEAF_clip(float min, float val, float max)
106 {
107
108 if (val < min) {
109 return min;
110 } else if (val > max) {
111 return max;
112 } else {
113 return val;
114 }
115}
116
117oBool LEAF_isPrime(uint64_t number )
118{
119 if ( number == 2 ) return OTRUE;
120 if ( number & 1 ) {
121 for ( int i=3; i<(int)sqrt((double)number)+1; i+=2 )
122 if ( (number % i) == 0 ) return OFALSE;
123 return OTRUE; // prime
124 }
125 else return OFALSE; // even
126}
127
128// Adapted from MusicDSP: http://www.musicdsp.org/showone.php?id=238
129float LEAF_tanh(float x)
130{
131
132 if( x < -3 )
133 return -1;
134 else if( x > 3 )
135 return 1;
136 else
137 return x * ( 27 + x * x ) / ( 27 + 9 * x * x );
138}
139
140//-----------------------------------------------------------------------------
141// name: mtof()
142// desc: midi to freq, from PD source
143//-----------------------------------------------------------------------------
144float LEAF_midiToFrequency(float f)
145{
146 if( f <= -1500.0f ) return (0);
147 else if( f > 1499.0f ) return (LEAF_midiToFrequency(1499.0f));
148 else return ( powf(2.0f, (f - 69.0f) / 12.0f) * 440.0f );
149}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t