Deluge Firmware
Loading...
Searching...
No Matches
functions.h
Go to the documentation of this file.
1/*
2 * Copyright © 2014-2023 Synthstrom Audible Limited
3 *
4 * This file is part of The Synthstrom Audible Deluge Firmware.
5 *
6 * The Synthstrom Audible Deluge Firmware is free software: you can redistribute it and/or modify it under the
7 * terms of the GNU General Public License as published by the Free Software Foundation,
8 * either version 3 of the License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
11 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12 * See the GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License along with this program.
15 * If not, see <https://www.gnu.org/licenses/>.
16*/
17
18#ifndef FUNCTIONS_H
19#define FUNCTIONS_H
20
21#include "r_typedefs.h"
22#include "lookuptables.h"
23#include <string.h>
24#include "ff.h"
25#include "definitions.h"
26
27extern "C" {
28#include "cfunctions.h"
29}
30
31
32
33class UI;
34
35extern UI* getCurrentUI();
36
37extern const uint8_t modButtonX[];
38extern const uint8_t modButtonY[];
39extern const uint8_t modLedX[];
40extern const uint8_t modLedY[];
41
42extern uint8_t subModeToReturnTo;
43
44extern int32_t paramRanges[];
45extern int32_t paramNeutralValues[];
46
47void functionsInit();
48
49static inline void intToString(int32_t number, char* buffer) {
50 intToString(number, buffer, 1);
51}
52
53bool memIsNumericChars(char const* mem, int size);
54bool stringIsNumericChars(char const* str);
55char const* getThingName(uint8_t instrumentType);
56
57
58char halfByteToHexChar(uint8_t thisHalfByte);
59void intToHex(uint32_t number, char* output, int numChars = 8);
60uint32_t hexToInt(char const* string);
61uint32_t hexToIntFixedLength(char const* __restrict__ hexChars, int length);
62
63void byteToHex(uint8_t number, char* buffer);
64uint8_t hexToByte(char const* firstChar);
65
66
67// computes (((int64_t)a[31:0] * (int64_t)b[31:0]) >> 32)
68static inline int32_t multiply_32x32_rshift32(int32_t a, int32_t b) __attribute__((always_inline, unused));
69static inline int32_t multiply_32x32_rshift32(int32_t a, int32_t b)
70{
71 int32_t out;
72 asm ("smmul %0, %1, %2" : "=r" (out) : "r" (a), "r" (b));
73 return out;
74}
75
76// computes (((int64_t)a[31:0] * (int64_t)b[31:0] + 0x8000000) >> 32)
77static inline int32_t multiply_32x32_rshift32_rounded(int32_t a, int32_t b) __attribute__((always_inline, unused));
78static inline int32_t multiply_32x32_rshift32_rounded(int32_t a, int32_t b)
79{
80 int32_t out;
81 asm ("smmulr %0, %1, %2" : "=r" (out) : "r" (a), "r" (b));
82 return out;
83}
84
85// computes sum + (((int64_t)a[31:0] * (int64_t)b[31:0] + 0x8000000) >> 32)
86static inline int32_t multiply_accumulate_32x32_rshift32_rounded(int32_t sum, int32_t a, int32_t b) __attribute__((always_inline, unused));
87static inline int32_t multiply_accumulate_32x32_rshift32_rounded(int32_t sum, int32_t a, int32_t b)
88{
89 int32_t out;
90 asm ("smmlar %0, %2, %3, %1" : "=r" (out) : "r" (sum), "r" (a), "r" (b));
91 return out;
92}
93
94// computes sum - (((int64_t)a[31:0] * (int64_t)b[31:0] + 0x8000000) >> 32)
95static inline int32_t multiply_subtract_32x32_rshift32_rounded(int32_t sum, int32_t a, int32_t b) __attribute__((always_inline, unused));
96static inline int32_t multiply_subtract_32x32_rshift32_rounded(int32_t sum, int32_t a, int32_t b)
97{
98 int32_t out;
99 asm ("smmlsr %0, %2, %3, %1" : "=r" (out) : "r" (sum), "r" (a), "r" (b));
100 return out;
101}
102
103static inline int32_t add_saturation(int32_t a, int32_t b) __attribute__((always_inline, unused));
104static inline int32_t add_saturation(int32_t a, int32_t b)
105{
106 int32_t out;
107 asm ("qadd %0, %1, %2" : "=r" (out) : "r" (a), "r" (b));
108 return out;
109}
110
111// computes limit((val >> rshift), 2**bits)
112static inline int32_t signed_saturate(int32_t val, uint8_t bits) __attribute__((always_inline, unused));
113static inline int32_t signed_saturate(int32_t val, uint8_t bits)
114{
115 int32_t out;
116 asm ("ssat %0, %1, %2" : "=r" (out) : "I" (bits), "r" (val));
117 return out;
118}
119
120// bits must be *less* than 32! I.e. 31 or less
121inline int32_t signed_saturate_operand_unknown(int32_t val, int bits) {
122
123 // Despite having this switch at the per-audio-sample level, it doesn't introduce any slowdown compared to just always saturating by the same amount!
124 switch(bits) {
125 case 31:
126 return signed_saturate(val, 31);
127 case 30:
128 return signed_saturate(val, 30);
129 case 29:
130 return signed_saturate(val, 29);
131 case 28:
132 return signed_saturate(val, 28);
133 case 27:
134 return signed_saturate(val, 27);
135 case 26:
136 return signed_saturate(val, 26);
137 case 25:
138 return signed_saturate(val, 25);
139 case 24:
140 return signed_saturate(val, 24);
141 case 23:
142 return signed_saturate(val, 23);
143 case 22:
144 return signed_saturate(val, 22);
145 case 21:
146 return signed_saturate(val, 21);
147 case 20:
148 return signed_saturate(val, 20);
149 case 19:
150 return signed_saturate(val, 19);
151 case 18:
152 return signed_saturate(val, 18);
153 case 17:
154 return signed_saturate(val, 17);
155 case 16:
156 return signed_saturate(val, 16);
157 case 15:
158 return signed_saturate(val, 15);
159 case 14:
160 return signed_saturate(val, 14);
161 case 13:
162 return signed_saturate(val, 13);
163 default:
164 return signed_saturate(val, 12);
165 }
166}
167
168inline int32_t lshiftAndSaturate(int32_t val, uint8_t lshift) {
169 return signed_saturate(val, 32 - lshift) << lshift;
170}
171
172// lshift must be greater than 0! Not 0
173inline int32_t lshiftAndSaturateUnknown(int32_t val, uint8_t lshift) {
174 return signed_saturate_operand_unknown(val, 32 - lshift) << lshift;
175}
176
177
178int32_t stringToInt(char const* string);
179int32_t stringToUIntOrError(char const* mem);
180int32_t memToUIntOrError(char const* mem, char const* const memEnd);
181void getInstrumentPresetFilename(char const * filePrefix, int16_t presetNumber, int8_t presetSubslotNumber, char* fileName);
182char const* oscTypeToString(unsigned int oscType);
183int stringToOscType(char const* string);
184char const* lfoTypeToString(int oscType);
185int stringToLFOType(char const* string);
186
187char const* synthModeToString(int synthMode);
188int stringToSynthMode(char const* string);
189char const* polyphonyModeToString(int synthMode);
190int stringToPolyphonyMode(char const* string);
191char const* fxTypeToString(int fxType);
192int stringToFXType(char const* string);
193char const* modFXParamToString(int fxType);
194int stringToModFXParam(char const* string);
195char const* filterTypeToString(int fxType);
196int stringToFilterType(char const* string);
197char const* arpModeToString(int mode);
198int stringToArpMode(char const* string);
199char const* lpfTypeToString(int lpfType);
200int stringToLPFType(char const* string);
201char const* inputChannelToString(int inputChannel);
202int stringToInputChannel(char const* string);
203char const* sequenceDirectionModeToString(int sequenceDirectionMode);
204int stringToSequenceDirectionMode(char const* string);
205
206
207
208
209char const* getInstrumentFolder(uint8_t instrumentType);
210void getThingFilename(char const* thingName, int16_t currentSlot, int8_t currentSubSlot, char* buffer);
211
212
213int32_t getExp(int32_t presetValue, int32_t adjustment);
214
215
216inline void renderRingmodSample(int32_t* __restrict__ thisSample, int32_t amplitude, int32_t waveValueA, int32_t waveValueB) {
217 *thisSample += multiply_32x32_rshift32_rounded(
218 multiply_32x32_rshift32(waveValueA, waveValueB),
219 amplitude
220 );
221}
222
223bool isAudioFilename(char const* filename);
224bool isAiffFilename(char const* filename);
225
226char const* getFileNameFromEndOfPath(char const* filePathChars);
227
228
229int32_t lookupReleaseRate(int32_t input);
230int32_t getParamFromUserValue(uint8_t p, int8_t userValue);
231int getLookupIndexFromValue(int32_t value, const int32_t* table, int maxIndex);
232uint32_t rshift_round(uint32_t value, unsigned int rshift);
233int32_t rshift_round_signed(int32_t value, unsigned int rshift);
234int32_t instantTan(int32_t input);
235
236int32_t combineHitStrengths(int32_t strength1, int32_t strength2);
237
238int32_t cableToLinearParamShortcut(int32_t sourceValue);
239int32_t cableToExpParamShortcut(int32_t sourceValue);
240
241class Sound;
242class StereoSample;
243int32_t getFinalParameterValueVolume(int32_t paramNeutralValue, int32_t patchedValue);
244int32_t getFinalParameterValueLinear(int32_t paramNeutralValue, int32_t patchedValue);
245int32_t getFinalParameterValueHybrid(int32_t paramNeutralValue, int32_t patchedValue);
246int32_t getFinalParameterValueExp(int32_t paramNeutralValue, int32_t patchedValue);
247int32_t getFinalParameterValueExpWithDumbEnvelopeHack(int32_t paramNeutralValue, int32_t patchedValue, int p);
248
249void addAudio(StereoSample* inputBuffer, StereoSample* outputBuffer, int numSamples);
250
251void setRefreshTime(int newTime);
252void changeRefreshTime(int offset);
253void changeDimmerInterval(int offset);
254void setDimmerInterval(int newInterval);
255
256#if HAVE_OLED
257char const* getSourceDisplayNameForOLED(int s);
258char const* getPatchedParamDisplayNameForOled(int p);
259#endif
260
261char const* sourceToString(uint8_t source);
262uint8_t stringToSource(char const* string);
263bool paramNeedsLPF(int p, bool fromAutomation);
264int32_t shiftVolumeByDB(int32_t oldValue, float offset);
265int32_t quickLog(uint32_t input);
266
267
268static void convertFloatToIntAtMemoryLocation(uint32_t* pos) {
269
270 //*(int32_t*)pos = *(float*)pos * 2147483648;
271
272
273 uint32_t readValue = *(uint32_t*)pos;
274 int exponent = (int)((readValue >> 23) & 255) - 127;
275
276 int32_t outputValue = (exponent >= 0) ?
277 2147483647 :
278 (uint32_t)((readValue << 8) | 0x80000000) >> (-exponent);
279
280 // Sign bit
281 if (readValue >> 31) outputValue = -outputValue;
282
283 *pos = outputValue;
284}
285
286
287static int32_t floatToInt(float theFloat) {
288 uint32_t readValue = *(uint32_t*)&theFloat;
289 int exponent = (int)((readValue >> 23) & 255) - 127;
290
291 int32_t outputValue = (exponent >= 0) ?
292 2147483647 :
293 (uint32_t)((readValue << 8) | 0x80000000) >> (-exponent);
294
295 // Sign bit
296 if (readValue >> 31) outputValue = -outputValue;
297
298 return outputValue;
299}
300
301static int32_t floatBitPatternToInt(uint32_t readValue) {
302 int exponent = (int)((readValue >> 23) & 255) - 127;
303
304 int32_t outputValue = (exponent >= 0) ?
305 2147483647 :
306 (uint32_t)((readValue << 8) | 0x80000000) >> (-exponent);
307
308 // Sign bit
309 if (readValue >> 31) outputValue = -outputValue;
310
311 return outputValue;
312}
313
314
315// input must not have any extra bits set than numBitsInInput specifies
316inline int32_t interpolateTableSigned(uint32_t input, int numBitsInInput, const int16_t* table, int numBitsInTableSize = 8) {
317 int whichValue = input >> (numBitsInInput - numBitsInTableSize);
319 uint32_t rshifted;
320 if (rshiftAmount >= 0) rshifted = input >> rshiftAmount;
321 else rshifted = input << (-rshiftAmount);
322 int strength2 = rshifted & 65535;
323 int strength1 = 65536 - strength2;
324 return (int32_t)table[whichValue] * strength1 + (int32_t)table[whichValue + 1] * strength2;
325}
326
327
328
329int32_t interpolateTable(uint32_t input, int numBitsInInput, const uint16_t* table, int numBitsInTableSize = 8);
330uint32_t interpolateTableInverse(int32_t tableValueBig, int numBitsInLookupOutput, const uint16_t* table, int numBitsInTableSize = 8);
331
332
333// input must not have any extra bits set than numBitsInInput specifies
334// Output of this function (unlike the regular 1d one) is only +- 1073741824
335inline int32_t interpolateTableSigned2d(uint32_t inputX, uint32_t inputY, int numBitsInInputX, int numBitsInInputY, const int16_t* table, int numBitsInTableSizeX, int numBitsInTableSizeY) {
336
337 int whichValue = inputY >> (numBitsInInputY - numBitsInTableSizeY);
338
339 int tableSizeOneRow = (1 << numBitsInTableSizeX) + 1;
340
341 int32_t value1 = interpolateTableSigned(inputX, numBitsInInputX, &table[whichValue * tableSizeOneRow], numBitsInTableSizeX);
342 int32_t value2 = interpolateTableSigned(inputX, numBitsInInputX, &table[(whichValue + 1) * tableSizeOneRow], numBitsInTableSizeX);
343
344 int lshiftAmount = 31 + numBitsInTableSizeY - numBitsInInputY;
345
346 uint32_t strength2;
347
348
349 if (lshiftAmount >= 0) strength2 = (inputY << lshiftAmount) & 2147483647;
350 else strength2 = (inputY >> (0 - lshiftAmount)) & 2147483647;
351
352 uint32_t strength1 = 2147483647 - strength2;
353 return multiply_32x32_rshift32(value1, strength1) + multiply_32x32_rshift32(value2, strength2);
354}
355
356
357inline int32_t getTanH(int32_t input, unsigned int saturationAmount) {
358 uint32_t workingValue;
359
360 if (saturationAmount)
361 workingValue = (uint32_t)lshiftAndSaturate(input, saturationAmount) + 2147483648u;
362 else
363 workingValue = (uint32_t)input + 2147483648u;
364
365 return interpolateTableSigned(workingValue, 32, tanHSmall, 8) >> (saturationAmount + 2);
366}
367
368inline int32_t getTanHUnknown(int32_t input, unsigned int saturationAmount) {
369 uint32_t workingValue;
370
371 if (saturationAmount)
372 workingValue = (uint32_t)lshiftAndSaturateUnknown(input, saturationAmount) + 2147483648u;
373 else
374 workingValue = (uint32_t)input + 2147483648u;
375
376 return interpolateTableSigned(workingValue, 32, tanHSmall, 8) >> (saturationAmount + 2);
377}
378
379inline int32_t getTanHAntialiased(int32_t input, uint32_t* lastWorkingValue, unsigned int saturationAmount) {
380
381 uint32_t workingValue = (uint32_t)lshiftAndSaturateUnknown(input, saturationAmount) + 2147483648u;
382
383 int32_t toReturn = interpolateTableSigned2d(workingValue, *lastWorkingValue, 32, 32, &tanH2d[0][0], 7, 6) >> (saturationAmount + 1);
384 *lastWorkingValue = workingValue;
385 return toReturn;
386}
387
388
389inline int32_t getSine(uint32_t phase, uint8_t numBitsInInput = 32) {
391}
392
393inline int32_t getSquare(uint32_t phase, uint32_t phaseWidth = 2147483648u) {
394 return ((phase >= phaseWidth) ? (-2147483648) : 2147483647);
395}
396
397inline int32_t getSquareSmall(uint32_t phase, uint32_t phaseWidth = 2147483648u) {
398 return ((phase >= phaseWidth) ? (-1073741824) : 1073741823);
399}
400
401
402/* Should be faster, but isn't...
403 * inline int32_t getTriangleSmall(int32_t phase) {
404 int32_t multiplier = (phase >> 31) | 1;
405 phase *= multiplier;
406 */
407
408inline int32_t getTriangleSmall(uint32_t phase) {
409 if (phase >= 2147483648u) phase = -phase;
410 return phase - 1073741824;
411}
412
413inline int32_t getTriangle(uint32_t phase) {
414 return ((phase < 2147483648u) ? 2 : -2) * phase + 2147483648u;
415 //return getTriangleSmall(phase) << 1;
416}
417
418
419int32_t getDecay8(uint32_t input, uint8_t numBitsInInput);
420int32_t getDecay4(uint32_t input, uint8_t numBitsInInput);
421
422
423#define znew (z=36969*(z&65535)+(z>>16))
424#define wnew (w=18000*(w&65535)+(w>>16))
425#define MWC (int32_t)((znew<<16)+wnew)
426#define CONG (jcong=69069*jcong+1234567)
427
428extern uint32_t z, w, jcong;
429
430
431inline uint8_t getRandom255() {
432 return CONG >> 24;
433}
434
435inline int32_t getNoise() {
436 return CONG;
437}
438
439void seedRandom();
440
441int random(int upperLimit);
442bool shouldDoPanning(int32_t panAmount, int32_t* amplitudeL, int32_t* amplitudeR);
443void hueToRGB(int32_t hue, unsigned char* rgb);
444void hueToRGBPastel(int32_t hue, unsigned char* rgb);
445uint32_t getLFOInitialPhaseForNegativeExtreme(uint8_t waveType);
446uint32_t getLFOInitialPhaseForZero(uint8_t waveType);
447uint32_t getOscInitialPhaseForZero(uint8_t waveType);
448int32_t fastPythag(int32_t x, int32_t y);
449int strcmpspecial(char const* first, char const* second, bool shouldInterpretNoteNames = false, bool octaveStartsFromA = false);
450int32_t doLanczos(int32_t* data, int32_t pos, uint32_t posWithinPos, int memoryNumElements);
451int32_t doLanczosCircular(int32_t* data, int32_t pos, uint32_t posWithinPos, int memoryNumElements);
452int stringToFirmwareVersion(char const* firmwareVersionString);
453
454// intensity is out of 65536 now
455// occupancyMask is out of 64 now
456inline void drawSquare(uint8_t squareColour[], int intensity, uint8_t square[], uint8_t* occupancyMask, int occupancyFromWhichColourCame) {
457
458 int modifiedIntensity = intensity;//(intensity * occupancyFromWhichColourCame) >> 6; // Out of 65536
459
460 // Make new colour being drawn into this square marginalise the colour already in the square
461 int colourRemainingAmount = 65536;
462
463 // We know how much colour we want to add to this square, so constrain any existing colour to the remaining "space" that it may still occupy
464 int maxOldOccupancy = (65536 - modifiedIntensity) >> 10;
465
466 // If the square has more colour in it than it's allowed to retain, then plan to reduce it
467 if (*occupancyMask > maxOldOccupancy) colourRemainingAmount = (maxOldOccupancy << 16) / *occupancyMask; // out of 65536
468
469 // Add the new colour, reducing the old if that's what we're doing
470 int newOccupancyMaskValue = rshift_round(*occupancyMask * colourRemainingAmount, 16)
471 + rshift_round(modifiedIntensity, 10);
472 *occupancyMask = getMin(64, newOccupancyMaskValue);
473
474 for (int colour = 0; colour < 3; colour++) {
475 int newColourValue = rshift_round((int)square[colour] * colourRemainingAmount, 16)
476 + rshift_round((int)squareColour[colour] * modifiedIntensity, 16);
477 square[colour] = getMin(255, newColourValue);
478 }
479}
480
481inline void drawSolidSquare(uint8_t squareColour[], uint8_t square[], uint8_t* occupancyMask) {
482 memcpy(square, squareColour, 3);
483 *occupancyMask = 64;
484}
485
486inline void getTailColour(uint8_t rgb[], uint8_t fromRgb[]) {
487 unsigned int averageBrightness = ((unsigned int) fromRgb[0] + fromRgb[1] + fromRgb[2]);
488 rgb[0] = (((int)fromRgb[0] * 21 + averageBrightness) * 157) >> 14;
489 rgb[1] = (((int)fromRgb[1] * 21 + averageBrightness) * 157) >> 14;
490
491#if DELUGE_MODEL == DELUGE_MODEL_40_PAD
492 rgb[2] = (((int)averageBrightness) * 157) >> 14;
493#else
494 rgb[2] = (((int)fromRgb[2] * 21 + averageBrightness) * 157) >> 14;
495#endif
496}
497
498inline void getBlurColour(uint8_t rgb[], uint8_t fromRgb[]) {
499 unsigned int averageBrightness = (unsigned int) fromRgb[0] * 5 + fromRgb[1] * 9 + fromRgb[2] * 9;
500 rgb[0] = ((unsigned int)fromRgb[0] * 5 + averageBrightness) >> 5;
501 rgb[1] = ((unsigned int)fromRgb[1] * 5 + averageBrightness) >> 5;
502 rgb[2] = ((unsigned int)fromRgb[2] * 1 + averageBrightness) >> 5;
503}
504
505inline int increaseMagnitude(int number, int magnitude) {
506 if (magnitude >= 0) return number << magnitude;
507 else return number >> (-magnitude);
508}
509
510inline int increaseMagnitudeAndSaturate(int32_t number, int magnitude) {
511 if (magnitude > 0) return lshiftAndSaturateUnknown(number, magnitude);
512 else return number >> (-magnitude);
513}
514
515int howMuchMoreMagnitude(unsigned int to, unsigned int from);
516void noteCodeToString(int noteCode, char* buffer, int* getLengthWithoutDot = NULL);
517double ConvertFromIeeeExtended(unsigned char* bytes /* LCN */);
518int32_t divide_round_negative(int32_t dividend, int32_t divisor);
519void dissectIterationDependence(int probability, int* getDivisor, int* getWhichIterationWithinDivisor);
520int encodeIterationDependence(int divisor, int iterationWithinDivisor);
521
522
523inline uint32_t swapEndianness32(uint32_t input) {
524 int32_t out;
525 asm ("rev %0, %1" : "=r" (out) : "r" (input));
526 return out;
527}
528
529inline uint32_t swapEndianness2x16(uint32_t input) {
530 int32_t out;
531 asm ("rev16 %0, %1" : "=r" (out) : "r" (input));
532 return out;
533}
534
535inline int32_t clz(uint32_t input) {
536 int32_t out;
537 asm ("clz %0, %1" : "=r" (out) : "r" (input));
538 return out;
539}
540
541inline int32_t getMagnitudeOld(uint32_t input) {
542 return 32 - clz(input);
543}
544
545inline int32_t getMagnitude(uint32_t input) {
546 return 31 - clz(input);
547}
548
549inline bool isPowerOfTwo(uint32_t input) {
550 return (input == 1 << getMagnitude(input));
551}
552
553int getWhichKernel(int32_t phaseIncrement);
554
555int memcasecmp(char const* first, char const* second, int size);
556int getHowManyCharsAreTheSame(char const* a, char const* b);
557void greyColourOut(const uint8_t* input, uint8_t* output, int32_t greyProportion);
558void dimColour(uint8_t colour[3]);
559bool charCaseEqual(char firstChar, char secondChar);
560bool shouldAbortLoading();
561void getNoteLengthNameFromMagnitude(char* text, int32_t magnitude, bool clarifyPerColumn = false);
562bool doesFilenameFitPrefixFormat(char const* fileName, char const* filePrefix, int prefixLength);
563int fresultToDelugeErrorCode(FRESULT result);
564
565inline void writeInt16(char** address, uint16_t number) {
566 *(uint16_t*)*address = number;
567 *address += 2;
568}
569
570
571inline void writeInt32(char** address, uint32_t number) {
572 *(uint32_t*)*address = number;
573 *address += 4;
574}
575
576
577extern char miscStringBuffer[];
578extern char shortStringBuffer[];
579
580
581
582#endif // FUNCTIONS_H
#define numBitsInInput
Definition: WaveTable.cpp:76
#define lshiftAmount
Definition: WaveTable.cpp:78
void intToString(int32_t number, char *__restrict__ buffer, int minNumDigits)
Definition: cfunctions.c:33
#define getMin(a, b)
Definition: cfunctions.h:25
Definition: sound.h:66
Definition: AudioSample.h:25
Definition: UI.h:82
char miscStringBuffer[FILENAME_BUFFER_SIZE] __attribute__((aligned(CACHE_LINE_SIZE)))
void getThingFilename(char const *thingName, int16_t currentSlot, int8_t currentSubSlot, char *buffer)
Definition: functions.cpp:1192
bool memIsNumericChars(char const *mem, int size)
Definition: functions.cpp:778
int32_t getTriangle(uint32_t phase)
Definition: functions.h:413
void functionsInit()
Definition: functions.cpp:159
int32_t getDecay8(uint32_t input, uint8_t numBitsInInput)
Definition: functions.cpp:749
void greyColourOut(const uint8_t *input, uint8_t *output, int32_t greyProportion)
Definition: functions.cpp:2130
void drawSquare(uint8_t squareColour[], int intensity, uint8_t square[], uint8_t *occupancyMask, int occupancyFromWhichColourCame)
Definition: functions.h:456
uint32_t getOscInitialPhaseForZero(uint8_t waveType)
Definition: functions.cpp:1393
int32_t getSine(uint32_t phase, uint8_t numBitsInInput=32)
Definition: functions.h:389
int32_t clz(uint32_t input)
Definition: functions.h:535
int random(int upperLimit)
Definition: functions.cpp:1312
int32_t getMagnitudeOld(uint32_t input)
Definition: functions.h:541
int32_t getParamFromUserValue(uint8_t p, int8_t userValue)
Definition: functions.cpp:1238
int stringToFXType(char const *string)
Definition: functions.cpp:1028
void setRefreshTime(int newTime)
Definition: functions.cpp:269
void getBlurColour(uint8_t rgb[], uint8_t fromRgb[])
Definition: functions.h:498
int32_t rshift_round_signed(int32_t value, unsigned int rshift)
Definition: functions.cpp:1286
char const * polyphonyModeToString(int synthMode)
Definition: functions.cpp:981
void getNoteLengthNameFromMagnitude(char *text, int32_t magnitude, bool clarifyPerColumn=false)
Definition: functions.cpp:2158
int stringToLFOType(char const *string)
Definition: functions.cpp:952
int32_t getTanHUnknown(int32_t input, unsigned int saturationAmount)
Definition: functions.h:368
void seedRandom()
Definition: functions.cpp:2005
int32_t getSquareSmall(uint32_t phase, uint32_t phaseWidth=2147483648u)
Definition: functions.h:397
char const * getFileNameFromEndOfPath(char const *filePathChars)
Definition: functions.cpp:2206
#define CONG
Definition: functions.h:426
uint32_t getLFOInitialPhaseForNegativeExtreme(uint8_t waveType)
Definition: functions.cpp:1368
uint8_t subModeToReturnTo
const uint8_t modLedX[]
Definition: functions.cpp:42
int stringToSynthMode(char const *string)
Definition: functions.cpp:974
void hueToRGBPastel(int32_t hue, unsigned char *rgb)
Definition: functions.cpp:1346
char miscStringBuffer[]
void writeInt32(char **address, uint32_t number)
Definition: functions.h:571
const uint8_t modButtonX[]
Definition: functions.cpp:40
int32_t getTanHAntialiased(int32_t input, uint32_t *lastWorkingValue, unsigned int saturationAmount)
Definition: functions.h:379
uint32_t rshift_round(uint32_t value, unsigned int rshift)
Definition: functions.cpp:1282
int32_t shiftVolumeByDB(int32_t oldValue, float offset)
Definition: functions.cpp:649
int32_t getFinalParameterValueExpWithDumbEnvelopeHack(int32_t paramNeutralValue, int32_t patchedValue, int p)
Definition: functions.cpp:233
UI * getCurrentUI()
Definition: UI.cpp:133
void hueToRGB(int32_t hue, unsigned char *rgb)
Definition: functions.cpp:1328
char const * lpfTypeToString(int lpfType)
Definition: functions.cpp:1103
int32_t getFinalParameterValueHybrid(int32_t paramNeutralValue, int32_t patchedValue)
Definition: functions.cpp:172
uint32_t swapEndianness2x16(uint32_t input)
Definition: functions.h:529
uint32_t getLFOInitialPhaseForZero(uint8_t waveType)
Definition: functions.cpp:1382
bool shouldDoPanning(int32_t panAmount, int32_t *amplitudeL, int32_t *amplitudeR)
Definition: functions.cpp:1317
bool charCaseEqual(char firstChar, char secondChar)
Definition: functions.cpp:1727
int32_t memToUIntOrError(char const *mem, char const *const memEnd)
const uint8_t modLedY[]
Definition: functions.cpp:43
void setDimmerInterval(int newInterval)
Definition: functions.cpp:301
bool isAiffFilename(char const *filename)
Definition: functions.cpp:1215
int32_t doLanczosCircular(int32_t *data, int32_t pos, uint32_t posWithinPos, int memoryNumElements)
Definition: functions.cpp:1494
void addAudio(StereoSample *inputBuffer, StereoSample *outputBuffer, int numSamples)
Definition: functions.cpp:243
int32_t signed_saturate_operand_unknown(int32_t val, int bits)
Definition: functions.h:121
int32_t cableToExpParamShortcut(int32_t sourceValue)
Definition: functions.cpp:261
int32_t paramNeutralValues[]
Definition: functions.cpp:53
int getWhichKernel(int32_t phaseIncrement)
Definition: functions.cpp:2064
void byteToHex(uint8_t number, char *buffer)
Definition: functions.cpp:797
int32_t getExp(int32_t presetValue, int32_t adjustment)
Definition: functions.cpp:758
void changeDimmerInterval(int offset)
Definition: functions.cpp:284
int stringToFilterType(char const *string)
Definition: functions.cpp:1069
int32_t getTanH(int32_t input, unsigned int saturationAmount)
Definition: functions.h:357
int32_t fastPythag(int32_t x, int32_t y)
Definition: functions.cpp:1423
int32_t divide_round_negative(int32_t dividend, int32_t divisor)
Definition: functions.cpp:2052
int32_t combineHitStrengths(int32_t strength1, int32_t strength2)
Definition: functions.cpp:1300
int32_t stringToInt(char const *string)
double ConvertFromIeeeExtended(unsigned char *bytes)
Definition: functions.cpp:2012
char const * modFXParamToString(int fxType)
Definition: functions.cpp:1036
char const * inputChannelToString(int inputChannel)
Definition: functions.cpp:1123
int32_t getMagnitude(uint32_t input)
Definition: functions.h:545
int memcasecmp(char const *first, char const *second, int size)
Definition: functions.cpp:1735
void writeInt16(char **address, uint16_t number)
Definition: functions.h:565
uint32_t swapEndianness32(uint32_t input)
Definition: functions.h:523
int32_t getFinalParameterValueVolume(int32_t paramNeutralValue, int32_t patchedValue)
Definition: functions.cpp:179
int getHowManyCharsAreTheSame(char const *a, char const *b)
Definition: functions.cpp:2109
int32_t instantTan(int32_t input)
Definition: functions.cpp:1291
bool paramNeedsLPF(int p, bool fromAutomation)
Definition: functions.cpp:553
uint8_t hexToByte(char const *firstChar)
Definition: functions.cpp:803
int stringToArpMode(char const *string)
Definition: functions.cpp:1095
int32_t getFinalParameterValueLinear(int32_t paramNeutralValue, int32_t patchedValue)
Definition: functions.cpp:213
char const * sequenceDirectionModeToString(int sequenceDirectionMode)
Definition: functions.cpp:1158
void getInstrumentPresetFilename(char const *filePrefix, int16_t presetNumber, int8_t presetSubslotNumber, char *fileName)
Definition: functions.cpp:866
int stringToModFXParam(char const *string)
Definition: functions.cpp:1049
int32_t quickLog(uint32_t input)
Definition: functions.cpp:768
int increaseMagnitude(int number, int magnitude)
Definition: functions.h:505
int encodeIterationDependence(int divisor, int iterationWithinDivisor)
Definition: functions.cpp:2101
uint8_t stringToSource(char const *string)
Definition: functions.cpp:545
uint32_t interpolateTableInverse(int32_t tableValueBig, int numBitsInLookupOutput, const uint16_t *table, int numBitsInTableSize=8)
Definition: functions.cpp:716
int stringToSequenceDirectionMode(char const *string)
Definition: functions.cpp:1178
int32_t getSquare(uint32_t phase, uint32_t phaseWidth=2147483648u)
Definition: functions.h:393
void dissectIterationDependence(int probability, int *getDivisor, int *getWhichIterationWithinDivisor)
Definition: functions.cpp:2083
void dimColour(uint8_t colour[3])
Definition: functions.cpp:2145
static int32_t unused
Definition: functions.h:68
int fresultToDelugeErrorCode(FRESULT result)
Definition: functions.cpp:2228
int stringToFirmwareVersion(char const *firmwareVersionString)
Definition: functions.cpp:1762
int32_t lookupReleaseRate(int32_t input)
Definition: functions.cpp:1224
int32_t getDecay4(uint32_t input, uint8_t numBitsInInput)
Definition: functions.cpp:754
int32_t cableToLinearParamShortcut(int32_t sourceValue)
Definition: functions.cpp:257
void getTailColour(uint8_t rgb[], uint8_t fromRgb[])
Definition: functions.h:486
char const * filterTypeToString(int fxType)
Definition: functions.cpp:1056
int32_t doLanczos(int32_t *data, int32_t pos, uint32_t posWithinPos, int memoryNumElements)
Definition: functions.cpp:1467
int32_t interpolateTable(uint32_t input, int numBitsInInput, const uint16_t *table, int numBitsInTableSize=8)
Definition: functions.cpp:700
char const * fxTypeToString(int fxType)
Definition: functions.cpp:1012
uint32_t hexToIntFixedLength(char const *__restrict__ hexChars, int length)
Definition: functions.cpp:616
int stringToInputChannel(char const *string)
Definition: functions.cpp:1148
int32_t stringToUIntOrError(char const *mem)
bool doesFilenameFitPrefixFormat(char const *fileName, char const *filePrefix, int prefixLength)
Definition: functions.cpp:2212
int32_t getNoise()
Definition: functions.h:435
char shortStringBuffer[]
void renderRingmodSample(int32_t *__restrict__ thisSample, int32_t amplitude, int32_t waveValueA, int32_t waveValueB)
Definition: functions.h:216
uint32_t jcong
Definition: functions.h:428
char const * oscTypeToString(unsigned int oscType)
Definition: functions.cpp:878
char const * sourceToString(uint8_t source)
Definition: functions.cpp:323
char const * getInstrumentFolder(uint8_t instrumentType)
Definition: functions.cpp:1186
void drawSolidSquare(uint8_t squareColour[], uint8_t square[], uint8_t *occupancyMask)
Definition: functions.h:481
int howMuchMoreMagnitude(unsigned int to, unsigned int from)
Definition: functions.cpp:1981
bool isPowerOfTwo(uint32_t input)
Definition: functions.h:549
uint32_t w
Definition: functions.h:428
int stringToPolyphonyMode(char const *string)
Definition: functions.cpp:1001
int32_t interpolateTableSigned2d(uint32_t inputX, uint32_t inputY, int numBitsInInputX, int numBitsInInputY, const int16_t *table, int numBitsInTableSizeX, int numBitsInTableSizeY)
Definition: functions.h:335
const uint8_t modButtonY[]
Definition: functions.cpp:41
bool isAudioFilename(char const *filename)
Definition: functions.cpp:1206
uint32_t hexToInt(char const *string)
Definition: functions.cpp:605
int getLookupIndexFromValue(int32_t value, const int32_t *table, int maxIndex)
Definition: functions.cpp:1267
uint32_t z
Definition: functions.cpp:1309
char halfByteToHexChar(uint8_t thisHalfByte)
Definition: functions.cpp:587
int32_t getFinalParameterValueExp(int32_t paramNeutralValue, int32_t patchedValue)
Definition: functions.cpp:229
int32_t getTriangleSmall(uint32_t phase)
Definition: functions.h:408
int stringToOscType(char const *string)
Definition: functions.cpp:918
char const * getThingName(uint8_t instrumentType)
Definition: functions.cpp:791
void intToHex(uint32_t number, char *output, int numChars=8)
Definition: functions.cpp:597
int increaseMagnitudeAndSaturate(int32_t number, int magnitude)
Definition: functions.h:510
char const * synthModeToString(int synthMode)
Definition: functions.cpp:961
char const * arpModeToString(int mode)
Definition: functions.cpp:1076
int32_t paramRanges[]
Definition: functions.cpp:52
uint8_t getRandom255()
Definition: functions.h:431
int32_t lshiftAndSaturate(int32_t val, uint8_t lshift)
Definition: functions.h:168
int stringToLPFType(char const *string)
Definition: functions.cpp:1116
int strcmpspecial(char const *first, char const *second, bool shouldInterpretNoteNames=false, bool octaveStartsFromA=false)
Definition: functions.cpp:1520
char const * lfoTypeToString(int oscType)
Definition: functions.cpp:936
void changeRefreshTime(int offset)
Definition: functions.cpp:275
bool stringIsNumericChars(char const *str)
Definition: functions.cpp:786
bool shouldAbortLoading()
Definition: functions.cpp:2152
int32_t interpolateTableSigned(uint32_t input, int numBitsInInput, const int16_t *table, int numBitsInTableSize=8)
Definition: functions.h:316
int32_t lshiftAndSaturateUnknown(int32_t val, uint8_t lshift)
Definition: functions.h:173
void noteCodeToString(int noteCode, char *buffer, int *getLengthWithoutDot=NULL)
Definition: functions.cpp:1986
#define numBitsInTableSize
Definition: interpolate.h:19
#define rshiftAmount
Definition: interpolate.h:20
int16_t strength2
Definition: interpolate.h:28
uint32_t rshifted
Definition: interpolate.h:23
int16_t strength1
Definition: interpolatelinear.h:19
const int16_t tanH2d[][129]
Definition: lookuptables.cpp:192
const int16_t sineWaveSmall[257]
Definition: lookuptables.cpp:92
const int16_t tanHSmall[]
Definition: lookuptables.cpp:163