Showing the changes to LEAF/Src_cpp/leaf-math.cpp (1 of 6 files). Show all
Unified · Split
| @@ -136,6 +136,91 @@ float LEAF_tanh(float x) · 135 unmodified lines | |||
| 136 | else | 136 | else |
| 137 | return x * ( 27 + x * x ) / ( 27 + 9 * x * x ); | 137 | return x * ( 27 + x * x ) / ( 27 + 9 * x * x ); |
| 138 | } | 138 | } |
| 139 | |||
| 140 | |||
| 141 | void LEAF_generate_sine(float* buffer, int size) | ||
| 142 | { | ||
| 143 | float phase; | ||
| 144 | for (int i = 0; i < size; i++) | ||
| 145 | { | ||
| 146 | phase = (float) i / (float) size; | ||
| 147 | buffer[i] = sinf(phase * TWO_PI); | ||
| 148 | } | ||
| 149 | } | ||
| 150 | |||
| 151 | void LEAF_generate_sawtooth(float* buffer, float basefreq, int size) | ||
| 152 | { | ||
| 153 | int harmonic = 1; | ||
| 154 | float phase = 0.0f; | ||
| 155 | float freq = harmonic * basefreq; | ||
| 156 | float amp; | ||
| 157 | |||
| 158 | while (freq < (leaf.sampleRate * 0.5)) | ||
| 159 | { | ||
| 160 | amp = 1.0f / harmonic; | ||
| 161 | for (int i = 0; i < size; i++) | ||
| 162 | { | ||
| 163 | phase = (float) i / (float) size; | ||
| 164 | buffer[i] += (amp * sinf(harmonic * phase * TWO_PI)); | ||
| 165 | } | ||
| 166 | |||
| 167 | harmonic++; | ||
| 168 | freq = harmonic * basefreq; | ||
| 169 | } | ||
| 170 | } | ||
| 171 | |||
| 172 | |||
| 173 | void LEAF_generate_triangle(float* buffer, float basefreq, int size) | ||
| 174 | { | ||
| 175 | int harmonic = 1; | ||
| 176 | float phase = 0.0f; | ||
| 177 | float freq = harmonic * basefreq; | ||
| 178 | float amp = 1.0f; | ||
| 179 | |||
| 180 | int count = 0; | ||
| 181 | float mult = 1.0f; | ||
| 182 | |||
| 183 | while (freq < (leaf.sampleRate * 0.5)) | ||
| 184 | { | ||
| 185 | amp = 1.0f / (float)(harmonic * harmonic); | ||
| 186 | |||
| 187 | if (count % 2) mult = -1.0f; | ||
| 188 | else mult = 1.0f; | ||
| 189 | |||
| 190 | for (int i = 0; i < size; i++) | ||
| 191 | { | ||
| 192 | phase = (float) i / (float) size; | ||
| 193 | buffer[i] += (mult * amp * sinf(harmonic * phase * TWO_PI)); | ||
| 194 | } | ||
| 195 | |||
| 196 | count++; | ||
| 197 | harmonic += 2; | ||
| 198 | freq = harmonic * basefreq; | ||
| 199 | } | ||
| 200 | } | ||
| 201 | |||
| 202 | void LEAF_generate_square(float* buffer, float basefreq, int size) | ||
| 203 | { | ||
| 204 | int harmonic = 1; | ||
| 205 | float phase = 0.0f; | ||
| 206 | float freq = harmonic * basefreq; | ||
| 207 | float amp = 1.0f; | ||
| 208 | |||
| 209 | while (freq < (leaf.sampleRate * 0.5)) | ||
| 210 | { | ||
| 211 | amp = 1.0f / (float)(harmonic); | ||
| 212 | |||
| 213 | for (int i = 0; i < size; i++) | ||
| 214 | { | ||
| 215 | phase = (float) i / (float) size; | ||
| 216 | buffer[i] += (amp * sinf(harmonic * phase * TWO_PI)); | ||
| 217 | } | ||
| 218 | |||
| 219 | harmonic += 2; | ||
| 220 | freq = harmonic * basefreq; | ||
| 221 | } | ||
| 222 | } | ||
| 223 | |||
| 139 | 224 | ||
| 140 | //----------------------------------------------------------------------------- | 225 | //----------------------------------------------------------------------------- |
| 141 | // name: mtof() | 226 | // name: mtof() |