ref: 69671e50422797756d6679068c18a3d7f526504f
parent: 844078b59ddd849b2ae43d8dd2297e69ba2bc44e
parent: 41afc5ad5cda59b2db0a6d3330296203269102cf
author: Matthew Wang <mjw7@princeton.edu>
date: Mon Dec 21 14:53:04 EST 2020
merge with pitchshiftRework
--- a/TestPlugin/LEAF.jucer
+++ b/TestPlugin/LEAF.jucer
@@ -76,6 +76,7 @@
<FILE id="VTmuyj" name="leaf-tables.c" compile="1" resource="0" file="../leaf/Src/leaf-tables.c"/>
<FILE id="HKEtqp" name="leaf.c" compile="1" resource="0" file="../leaf/Src/leaf.c"/>
</GROUP>
+ <FILE id="a85MuA" name="leaf-config.h" compile="0" resource="0" file="../leaf/leaf-config.h"/>
<FILE id="a1IWV9" name="leaf.cpp" compile="1" resource="0" file="../leaf/leaf.cpp"/>
<FILE id="TzDyuj" name="leaf.h" compile="0" resource="0" file="../leaf/leaf.h"/>
</GROUP>
--- a/TestPlugin/Source/LEAFLink.cpp
+++ b/TestPlugin/Source/LEAFLink.cpp
@@ -20,9 +20,9 @@
std::vector<juce::String> cSliderNames = std::vector<juce::String>
{
- "on/off",
- "mod freq",
- "mod depth"
+ "slider1",
+ "slider2",
+ "slider3"
};
std::vector<juce::String> cComboBoxNames = std::vector<juce::String>
--- a/TestPlugin/Source/MyTest.cpp
+++ b/TestPlugin/Source/MyTest.cpp
@@ -18,7 +18,8 @@
tMBTriangle btri;
tMBPulse bpulse;
-tDualPitchDetector detector;
+tRetune retune;
+tSimpleRetune sretune;
tCompressor compressor;
@@ -54,36 +55,9 @@
{
LEAF_init(&leaf, sampleRate, blockSize, memory, MSIZE, &getRandomFloat);
- tMBSaw_init(&bsaw, &leaf);
- tMBSaw_setFreq(&bsaw, -100);
- tMBTriangle_init(&btri, &leaf);
- tMBTriangle_setFreq(&btri, -200);
- tMBPulse_init(&bpulse, &leaf);
- tMBPulse_setFreq(&bpulse, -500);
-
- bufIn = (float*) leaf_alloc(&leaf, sizeof(float) * 4096);
- bufOut = (float*) leaf_alloc(&leaf, sizeof(float) * 4096);
-
- tDualPitchDetector_init(&detector, mtof(48), mtof(84), &leaf);
-
- tCompressor_init(&compressor, &leaf);
-
- tSVF_init(&lp, SVFTypeLowpass, mtof(84) * 2.0f, 1.0f, &leaf);
- tSVF_init(&hp, SVFTypeHighpass, mtof(48) * 0.5f, 1.0f, &leaf);
-
- tPeriodDetection_init(&pd, bufIn, bufOut, 4096, 1024, &leaf);
-
- tZeroCrossingCounter_init(&zc, 128, &leaf);
- tEnvelopeFollower_init(&ef, 0.02f, 0.9999f, &leaf);
-
- tTriangle_init(&tri, &leaf);
- tTriangle_setFreq(&tri, 100);
-
- tBuffer_init(&samp, 5.0f * leaf.sampleRate, &leaf);
- tMBSampler_init(&sampler, &samp, &leaf);
-
- tMBSampler_setMode(&sampler, PlayLoop);
- tMBSampler_setEnd(&sampler, samp->bufferLength);
+ tRetune_init(&retune, 1, mtof(48), mtof(72), 2048, &leaf);
+ tSimpleRetune_init(&sretune, 1, mtof(48), mtof(72), 2048, &leaf);
+ tSimpleRetune_setMode(&sretune, 1);
}
inline double getSawFall(double angle) {
@@ -97,41 +71,8 @@
float LEAFTest_tick (float input)
{
-// tBuffer_tick(&samp, input);
-//
-// return tMBSampler_tick(&sampler);
-
- tMBTriangle_tick(&btri);
- tMBSaw_syncIn(&bsaw, tMBTriangle_syncOut(&btri));
- return tMBSaw_tick(&bsaw);
-
-// tMBSaw_setFreq(&bsaw, x);
-// tMBTriangle_setFreq(&btri, x);
-// tMBPulse_setFreq(&bpulse, x);
-//
-// tMBTriangle_setWidth(&btri, y);
-// tMBPulse_setWidth(&bpulse, y);
-//
-//// return tMBSaw_tick(&bsaw);
-//// return tMBTriangle_tick(&btri);
-// return tMBPulse_tick(&bpulse);
-
-// input = tSVF_tick(&hp, tSVF_tick(&lp, tCompressor_tick(&compressor, input)));
-//
-//// float freq = 1.0f/tPeriodDetection_tick(&pd, input) * leaf.sampleRate;
-// tDualPitchDetector_tick(&detector, input);
-// float altFreq = tDualPitchDetector_getFrequency(&detector);
-//
-//// if (fabsf(1.0f - (freq / altFreq)) < 0.05f)
-//// if (tZeroCrossingCounter_tick(&zc, input) < 0.05 && freq > 0.0f)
-// if (altFreq > 0.0f)
-// {
-// tTriangle_setFreq(&tri, altFreq);
-// }
-//
-// float g = tEnvelopeFollower_tick(&ef, input);
-//
-// return tTriangle_tick(&tri) * g;
+// return tRetune_tick(&retune, input)[0];
+ return tSimpleRetune_tick(&sretune, input);
}
int firstFrame = 1;
@@ -138,34 +79,16 @@
bool lastState = false, lastPlayState = false;
void LEAFTest_block (void)
{
- float periodicity = tDualPitchDetector_getPeriodicity(&detector);
- if (periodicity > 0.99f)
- {
- DBG(tDualPitchDetector_getFrequency(&detector));
- DBG(tDualPitchDetector_getPeriodicity(&detector));
- }
-
- float val = getSliderValue("on/off");
-
- if (val > 0.5f && !sampler->active)
- {
- tBuffer_record(&samp);
- tMBSampler_play(&sampler);
- }
- else if (val < 0.5f && sampler->active)
- {
- tMBSampler_stop(&sampler);
- }
-
- val = getSliderValue("mod freq");
-
- tMBSampler_setStart(&sampler, val * 5.0f * leaf.sampleRate);
+ float val = getSliderValue("slider1");
+ tRetune_tuneVoice(&retune, 0, val * 3.0f + 0.5f);
+ tSimpleRetune_tuneVoice(&sretune, 0, 300);
+ val = getSliderValue("slider2");
+// tRetune_setPitchFactor(&retune, val * 3.0f + 0.5f, 1);
- val = getSliderValue("mod depth");
-
- tMBSampler_setRate(&sampler, val * 8.0f - 4.0f);
-
+ val = getSliderValue("slider3");
+// tRetune_setPitchFactor(&retune, val * 3.0f + 0.5f, 2);
+
}
void LEAFTest_controllerInput (int cnum, float cval)
@@ -216,46 +139,46 @@
static void run_pool_test(void)
{
leaf_pool_report();
-
+
DBG("ALLOC BUFFER 1");
int size = 50;
float* buffer;
buffer = (float*) leaf_alloc(&leaf, sizeof(float) * size);
-
+
for (int i = 0; i < size; i++)
{
buffer[i] = (float)i;
-
+
}
-
+
leaf_pool_report();
-
+
DBG("ALLOC BUFFER 2");
size = 25;
-
+
buffer = (float*) leaf_alloc(&leaf, sizeof(float) * size);
-
+
leaf_pool_report();
-
+
for (int i = 0; i < size; i++)
{
buffer[i] = (float)(i*2);
}
leaf_free(&leaf, (char*)buffer);
-
+
leaf_pool_report();
-
+
DBG("ALLOC BUFFER 3");
size = 15;
-
+
buffer = (float*) leaf_alloc(&leaf, sizeof(float) * size);
-
+
for (int i = 0; i < size; i++)
{
buffer[i] = (float)(i*3);
}
-
+
leaf_pool_report();
-
+
leaf_pool_dump();
}
--- a/leaf/Inc/leaf-analysis.h
+++ b/leaf/Inc/leaf-analysis.h
@@ -17,6 +17,7 @@
#include "leaf-global.h"
#include "leaf-mempool.h"
+#include "leaf-distortion.h"
#include "leaf-math.h"
#include "leaf-filters.h"
#include "leaf-envelopes.h"
@@ -39,21 +40,22 @@
@{
@fn void tEnvelopeFollower_init (tEnvelopeFollower* const follower, float attackThreshold, float decayCoeff, LEAF* const leaf)
- @brief Initialize a tEnvelopeFollower to the default LEAF mempool.
- @param follower A pointer to the tEnvelopeFollower to be initialized.
+ @brief Initialize a tEnvelopeFollower to the default mempool of a LEAF instance.
+ @param follower A pointer to the tEnvelopeFollower to initialize.
@param attackThreshold Amplitude threshold for determining an envelope onset. 0.0 to 1.0
@param decayCoefficient Multiplier to determine the envelope rate of decay. 0.0 to 1.0, above 0.95 recommended.
+ @param leaf A pointer to the leaf instance.
@fn void tEnvelopeFollower_initToPool (tEnvelopeFollower* const follower, float attackThreshold, float decayCoeff, tMempool* const mempool)
@brief Initialize a tEnvelopeFollower to a specified mempool.
- @param follower A pointer to the tEnvelopeFollower to be initialized.
+ @param follower A pointer to the tEnvelopeFollower to initialize.
@param attackThreshold Amplitude threshold for determining an envelope onset. 0.0 to 1.0
@param decayCoefficient Multiplier to determine the envelope rate of decay. 0.0 to 1.0, above 0.95 recommended.
- @param mempool A pointer to the tMempool to which the tEnvelopeFollower should be initialized.
+ @param mempool A pointer to the tMempool to use.
@fn void tEnvelopeFollower_free (tEnvelopeFollower* const follower)
@brief Free a tEnvelopeFollower from its mempool.
- @param follower A pointer to the tEnvelopeFollower to be freed.
+ @param follower A pointer to the tEnvelopeFollower to free.
@fn float tEnvelopeFollower_tick (tEnvelopeFollower* const follower, float input)
@brief Tick the tEnvelopeFollower.
@@ -67,8 +69,9 @@
@param decayCoefficient Multiplier to determine the envelope rate of decay. 0.0 to 1.0, above 0.95 recommended.
@fn void tEnvelopeFollower_setAttackThreshold (tEnvelopeFollower* const follower, float attackThresh)
- @brief Set the envelope attack threshold.
+ @brief Set the envelope attack threshold.
@param follower A pointer to the relevant tEnvelopeFollower.
+ @param attackThreshold The new threshold to determine envelope onset as an amplitude from 0.0 to 1.0

@} */
@@ -95,23 +98,24 @@
/*!
@defgroup tzerocrossingcounter tZeroCrossingCounter
@ingroup analysis
- @brief Counts the amount of zero crossings within a window of the input audio data
+ @brief Count the amount of zero crossings within a window of the input audio data
@{
@fn void tZeroCrossingCounter_init (tZeroCrossingCounter* const counter, int maxWindowSize, LEAF* const leaf)
- @brief Initialize a tZeroCrossingCounter to the default LEAF mempool.
- @param counter A pointer to the tZeroCrossingCounter to be initialized.
+ @brief Initialize a tZeroCrossingCounter to the default mempool of a LEAF instance.
+ @param counter A pointer to the tZeroCrossingCounter to initialize.
@param maxWindowSize The max and initial size of the window.
+ @param leaf A pointer to the leaf instance.
@fn void tZeroCrossingCounter_initToPool (tZeroCrossingCounter* const counter, int maxWindowSize, tMempool* const mempool)
@brief Initialize a tZeroCrossingCounter to a specified mempool.
- @param counter A pointer to the tZeroCrossingCounter to be initialized.
+ @param counter A pointer to the tZeroCrossingCounter to initialize.
@param maxWindowSize The max and initial size of the window.
- @param mempool A pointer to the tMempool to which the tZeroCrossingCounter should be initialized.
+ @param mempool A pointer to the tMempool to use.
@fn void tZeroCrossingCounter_free (tZeroCrossingCounter* const counter)
@brief Free a tZeroCrossingCounter from its mempool.
- @param counter A pointer to the tZeroCrossingCounter to be freed.
+ @param counter A pointer to the tZeroCrossingCounter to free.
@fn float tZeroCrossingCounter_tick (tZeroCrossingCounter* const counter, float input)
@brief Tick the tZeroCrossingCounter.
@@ -155,32 +159,40 @@
/*!
@defgroup tpowerfollower tPowerFollower
@ingroup analysis
- @brief
+ @brief Measure and follow the power of an input signal using an exponential moving average for smoothing.
@{
@fn void tPowerFollower_init (tPowerFollower* const, float factor, LEAF* const leaf)
- @brief Initialize a tPowerFollower to the default LEAF mempool.
- @param
+ @brief Initialize a tPowerFollower to the default mempool of a LEAF instance.
+ @param follower A pointer to the tPowerFollower to initialize.
+ @param factor Smoothing factor of the moving average. 0.0-1.0, with a higher value discounting older inputs more quickly.
+ @param leaf A pointer to the leaf instance.
@fn void tPowerFollower_initToPool (tPowerFollower* const, float factor, tMempool* const)
@brief Initialize a tPowerFollower to a specified mempool.
- @param
+ @param follower A pointer to the tPowerFollower to initialize.
+ @param factor Smoothing factor of the moving average. 0.0-1.0, with a higher value discounting older inputs more quickly.
+ @param mempool A pointer to the tMempool to use.
@fn void tPowerFollower_free (tPowerFollower* const)
- @brief
- @param
+ @brief Free a tPowerFollower from its mempool.
+ @param follower A pointer to the tPowerFollower to free.
@fn float tPowerFollower_tick (tPowerFollower* const, float input)
- @brief
- @param
+ @brief Pass a sample into the power follower and return the current power.
+ @param follower A pointer to the relevant tPowerFollower.
+ @param input The input sample
+ @return The current power.
- @fn float tPowerFollower_sample (tPowerFollower* const)
- @brief
- @param
+ @fn float tPowerFollower_getPower (tPowerFollower* const)
+ @brief Get the current power.
+ @param follower A pointer to the relevant tPowerFollower.
+ @return The current power.
@fn int tPowerFollower_setFactor (tPowerFollower* const, float factor)
- @brief
- @param
+ @brief Set the smoothing factor for the moving average.
+ @param follower A pointer to the relevant tPowerFollower.
+ @param factor Smoothing factor of the moving average. 0.0-1.0, with a higher value discounting older inputs more quickly.

@} */
@@ -201,8 +213,8 @@
void tPowerFollower_free (tPowerFollower* const);
float tPowerFollower_tick (tPowerFollower* const, float input);
- float tPowerFollower_sample (tPowerFollower* const);
- int tPowerFollower_setFactor (tPowerFollower* const, float factor);
+ float tPowerFollower_getPower (tPowerFollower* const);
+ void tPowerFollower_setFactor (tPowerFollower* const, float factor);
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
@@ -213,24 +225,33 @@
@{
@fn void tEnvPD_init (tEnvPD* const, int windowSize, int hopSize, int blockSize, LEAF* const leaf)
- @brief Initialize a tEnvPD to the default LEAF mempool.
- @param
+ @brief Initialize a tEnvPD to the default mempool of a LEAF instance.
+ @param env A pointer to the tEnvPD to initialize.
+ @param windowSize
+ @param hopSize
+ @param blockSize
+ @param leaf A pointer to the leaf instance.
@fn void tEnvPD_initToPool (tEnvPD* const, int windowSize, int hopSize, int blockSize, tMempool* const)
@brief Initialize a tEnvPD to a specified mempool.
- @param
+ @param env A pointer to the tEnvPD to initialize.
+ @param windowSize
+ @param hopSize
+ @param blockSize
+ @param mempool A pointer to the tMempool to use.
@fn void tEnvPD_free (tEnvPD* const)
- @brief
- @param
+ @brief Free a tEnvPD from its mempool.
+ @param env A pointer to the tEnvPD to free.
@fn float tEnvPD_tick (tEnvPD* const)
@brief
- @param
+ @param env
@fn void tEnvPD_processBlock (tEnvPD* const, float* in)
@brief
- @param
+ @param env
+ @param inputBlock

@} */
@@ -269,44 +290,59 @@
/*!
@defgroup tattackdetection tAttackDetection
@ingroup analysis
- @brief
+ @brief Detect attacks in an input signal
@{
@fn void tAttackDetection_init (tAttackDetection* const, int blocksize, int atk, int rel, LEAF* const leaf)
- @brief Initialize a tAttackDetection to the default LEAF mempool.
- @param
+ @brief Initialize a tAttackDetection to the default mempool of a LEAF instance.
+ @param detection A pointer to the tAttackDetection to initialize.
+ @param blockSize
+ @param attack
+ @param release
+ @param leaf A pointer to the leaf instance.
@fn void tAttackDetection_initToPool (tAttackDetection* const, int blocksize, int atk, int rel, tMempool* const)
@brief Initialize a tAttackDetection to a specified mempool.
- @param
+ @param detection A pointer to the tAttackDetection to initialize.
+ @param blockSize
+ @param attack
+ @param release
+ @param mempool A pointer to the tMempool to use.
@fn void tAttackDetection_free (tAttackDetection* const)
- @brief
- @param
+ @brief Free a tAttackDetection from its mempool.
+ @param detection A pointer to the tAttackDetection to free.
@fn void tAttackDetection_setBlocksize (tAttackDetection* const, int size)
@brief Set expected input blocksize
- @param
+ @param detection A pointer to the relevant tAttackDetection.
+ @param blockSize
@fn void tAttackDetection_setSamplerate (tAttackDetection* const, int inRate)
@brief Set attack detection sample rate
- @param
+ @param detection A pointer to the relevant tAttackDetection.
+ @param sampleRate
@fn void tAttackDetection_setAttack (tAttackDetection* const, int inAtk)
@brief Set attack time and coeff
- @param
+ @param detection A pointer to the relevant tAttackDetection.
+ @param attack
@fn void tAttackDetection_setRelease (tAttackDetection* const, int inRel)
@brief Set release time and coeff
- @param
+ @param detection A pointer to the relevant tAttackDetection.
+ @param release
@fn void tAttackDetection_setThreshold (tAttackDetection* const, float thres)
@brief Set level above which values are identified as attacks
- @param
+ @param detection A pointer to the relevant tAttackDetection.
+ @param threshold
@fn int tAttackDetection_detect (tAttackDetection* const, float *in)
@brief Find the largest transient in input block, return index of attack
- @param
+ @param detection A pointer to the relevant tAttackDetection.
+ @param inputBlock
+ @return Index of the largest transient in the input.

@} */
@@ -317,9 +353,7 @@
typedef struct _tAttackDetection
{
-
tMempool mempool;
-
float env;
//Attack & Release times in msec
@@ -357,44 +391,56 @@
/*!
@defgroup tsnac tSNAC
@ingroup analysis
- @brief Period detection algorithm from Katja Vetters http://www.katjaas.nl/helmholtz/helmholtz.html
+ @brief Component of period detection algorithm from Katja Vetters http://www.katjaas.nl/helmholtz/helmholtz.html
@{
@fn void tSNAC_init (tSNAC* const, int overlaparg, LEAF* const leaf)
- @brief Initialize a tSNAC to the default LEAF mempool.
- @param
+ @brief Initialize a tSNAC to the default mempool of a LEAF instance.
+ @param snac A pointer to the tSNAC to initialize.
+ @param overlap
+ @param leaf A pointer to the leaf instance.
@fn void tSNAC_initToPool (tSNAC* const, int overlaparg, tMempool* const)
@brief Initialize a tSNAC to a specified mempool.
- @param
+ @param snac A pointer to the tSNAC to initialize.
+ @param overlap
+ @param mempool A pointer to the tMempool to use.
@fn void tSNAC_free (tSNAC* const)
- @brief
- @param
+ @brief Free a tSNAC from its mempool.
+ @param snac A pointer to the tSNAC to free.
@fn void tSNAC_ioSamples (tSNAC *s, float *in, float *out, int size)
@brief
- @param
+ @param snac A pointer to the relevant tSNAC.
+ @param input
+ @param output
+ @param size
@fn void tSNAC_setOverlap (tSNAC *s, int lap)
@brief
- @param
+ @param snac A pointer to the relevant tSNAC.
+ @param overlap
@fn void tSNAC_setBias (tSNAC *s, float bias)
@brief
- @param
+ @param snac A pointer to the relevant tSNAC.
+ @param bias
@fn void tSNAC_setMinRMS (tSNAC *s, float rms)
@brief
- @param
+ @param snac A pointer to the relevant tSNAC.
+ @param rms
@fn float tSNAC_getPeriod (tSNAC *s)
@brief
- @param
+ @param snac A pointer to the relevant tSNAC.
+ @return The detected period of the input
@fn float tSNAC_getFidelity (tSNAC *s)
@brief
- @param
+ @param snac A pointer to the relevant tSNAC.
+ @return The periodic fidelity of the input

@} */
@@ -406,7 +452,6 @@
typedef struct _tSNAC
{
-
tMempool mempool;
float* inputbuf;
@@ -431,7 +476,7 @@
void tSNAC_initToPool (tSNAC* const, int overlaparg, tMempool* const);
void tSNAC_free (tSNAC* const);
- void tSNAC_ioSamples (tSNAC *s, float *in, float *out, int size);
+ void tSNAC_ioSamples (tSNAC *s, float *in, int size);
void tSNAC_setOverlap (tSNAC *s, int lap);
void tSNAC_setBias (tSNAC *s, float bias);
void tSNAC_setMinRMS (tSNAC *s, float rms);
@@ -440,68 +485,81 @@
float tSNAC_getPeriod (tSNAC *s);
float tSNAC_getFidelity (tSNAC *s);
-
/*!
@defgroup tperioddetection tPeriodDetection
@ingroup analysis
- @brief
+ @brief Period detection algorithm from Katja Vetters http://www.katjaas.nl/helmholtz/helmholtz.html
@{
- */
-
-
- /*!
+
@fn void tPeriodDetection_init (tPeriodDetection* const, float* in, float* out, int bufSize, int frameSize, LEAF* const leaf)
- @brief Initialize a tPeriodDetection to the default LEAF mempool.
- @param
+ @brief Initialize a tPeriodDetection to the default mempool of a LEAF instance.
+ @param detection A pointer to the tPeriodDetection to initialize.
+ @param in
+ @param out
+ @param bufferSize
+ @param frameSize
+ @param leaf A pointer to the leaf instance.
@fn void tPeriodDetection_initToPool (tPeriodDetection* const, float* in, float* out, int bufSize, int frameSize, tMempool* const)
@brief Initialize a tPeriodDetection to a specified mempool.
- @param
+ @param detection A pointer to the tPeriodDetection to initialize.
+ @param in
+ @param out
+ @param bufferSize
+ @param frameSize
+ @param mempool A pointer to the tMempool to use.
@fn void tPeriodDetection_free (tPeriodDetection* const)
- @brief
- @param
+ @brief Free a tPeriodDetection from its mempool.
+ @param detection A pointer to the tPeriodDetection to free.
@fn float tPeriodDetection_tick (tPeriodDetection* const, float sample)
@brief
- @param
+ @param detection A pointer to the relevant tPeriodDetection.
+ @param input
+ @return
@fn float tPeriodDetection_getPeriod (tPeriodDetection* const)
@brief
- @param
+ @param detection A pointer to the relevant tPeriodDetection.
+ @return The detected period.
@fn void tPeriodDetection_setHopSize (tPeriodDetection* const, int hs)
@brief
- @param
+ @param detection A pointer to the relevant tPeriodDetection.
+ @param hopSize
@fn void tPeriodDetection_setWindowSize (tPeriodDetection* const, int ws)
@brief
- @param
+ @param detection A pointer to the relevant tPeriodDetection.
+ @param windowSize
@fn void tPeriodDetection_setFidelityThreshold(tPeriodDetection* const, float threshold)
@brief
- @param
+ @param detection A pointer to the relevant tPeriodDetection.
+ @param threshold
@fn void tPeriodDetection_setAlpha (tPeriodDetection* const, float alpha)
@brief
- @param
+ @param detection A pointer to the relevant tPeriodDetection.
+ @param alpha
@fn void tPeriodDetection_setTolerance (tPeriodDetection* const, float tolerance)
@brief
- @param
+ @param detection A pointer to the relevant tPeriodDetection.
+ @param tolerance

@} */
-#define DEFPITCHRATIO 2.0f
+#define DEFPITCHRATIO 1.0f
#define DEFTIMECONSTANT 100.0f
#define DEFHOPSIZE 64
#define DEFWINDOWSIZE 64
#define FBA 20
-#define HPFREQ 40.0f
+#define HPFREQ 20.0f
typedef struct _tPeriodDetection
{
-
tMempool mempool;
tEnvPD env;
@@ -539,12 +597,13 @@
typedef _tPeriodDetection* tPeriodDetection;
- void tPeriodDetection_init (tPeriodDetection* const, float* in, float* out, int bufSize, int frameSize, LEAF* const leaf);
- void tPeriodDetection_initToPool (tPeriodDetection* const, float* in, float* out, int bufSize, int frameSize, tMempool* const);
+ void tPeriodDetection_init (tPeriodDetection* const, float* in, int bufSize, int frameSize, LEAF* const leaf);
+ void tPeriodDetection_initToPool (tPeriodDetection* const, float* in, int bufSize, int frameSize, tMempool* const);
void tPeriodDetection_free (tPeriodDetection* const);
float tPeriodDetection_tick (tPeriodDetection* const, float sample);
float tPeriodDetection_getPeriod (tPeriodDetection* const);
+ float tPeriodDetection_getFidelity (tPeriodDetection* pd);
void tPeriodDetection_setHopSize (tPeriodDetection* const, int hs);
void tPeriodDetection_setWindowSize (tPeriodDetection* const, int ws);
void tPeriodDetection_setFidelityThreshold(tPeriodDetection* const, float threshold);
@@ -553,8 +612,7 @@
//==============================================================================
- // Maybe keep these up to PeriodDetector internal?
-
+ // Maybe keep from here to tPeriodDetector internal?
typedef struct _tZeroCrossingInfo
{
@@ -681,20 +739,22 @@
/*!
@defgroup tperioddetector tPeriodDetector
@ingroup analysis
- @brief
+ @brief Period detection algorithm from Joel de Guzman's Q Audio DSP Library
@{
@fn void tPeriodDetector_init (tPeriodDetector* const detector, float lowestFreq, float highestFreq, float hysteresis, LEAF* const leaf)
- @brief Initialize a tPeriodDetector to the default LEAF mempool.
+ @brief Initialize a tPeriodDetector to the default mempool of a LEAF instance.
@param
+ @param leaf A pointer to the leaf instance.
@fn void tPeriodDetector_initToPool (tPeriodDetector* const detector, float lowestFreq, float highestFreq, float hysteresis, tMempool* const mempool)
@brief Initialize a tPeriodDetector to a specified mempool.
@param
+ @param mempool A pointer to the tMempool to use.
@fn void tPeriodDetector_free (tPeriodDetector* const detector)
- @brief
- @param
+ @brief Free a tPeriodDetector from its mempool.
+ @param detector A pointer to the tPeriodDetector to free.
@fn int tPeriodDetector_tick (tPeriodDetector* const detector, float sample)
@brief
@@ -769,7 +829,6 @@
typedef struct _tPeriodDetector
{
-
tMempool mempool;
tZeroCrossingCollector _zc;
@@ -813,14 +872,15 @@
/*!
@defgroup tpitchdetector tPitchDetector
@ingroup analysis
- @brief
+ @brief Pitch detection algorithm from Joel de Guzman's Q Audio DSP Library
@{
@fn void tPitchDetector_init (tPitchDetector* const detector, float lowestFreq, float highestFreq, LEAF* const leaf)
- @brief Initialize a tPitchDetector to the default LEAF mempool.
+ @brief Initialize a tPitchDetector to the default mempool of a LEAF instance.
@param detector A pointer to the relevant tPitchDetector.
@param lowestFreq
@param highestFreq
+ @param leaf A pointer to the leaf instance.
@fn void tPitchDetector_initToPool (tPitchDetector* const detector, float lowestFreq, float highestFreq, tMempool* const mempool)
@@ -828,15 +888,16 @@
@param detector A pointer to the relevant tPitchDetector.
@param lowestFreq
@param highestFreq
- @param mempool
+ @param mempool A pointer to the tMempool to use.
@fn void tPitchDetector_free (tPitchDetector* const detector)
- @brief
+ @brief Free a tPitchDetector from its mempool.
@param detector A pointer to the relevant tPitchDetector.
@fn int tPitchDetector_tick (tPitchDetector* const detector, float sample)
@brief
@param detector A pointer to the relevant tPitchDetector.
+ @param input
@fn float tPitchDetector_getFrequency (tPitchDetector* const detector)
@brief
@@ -849,6 +910,7 @@
@fn float tPitchDetector_harmonic (tPitchDetector* const detector, int harmonicIndex)
@brief
@param detector A pointer to the relevant tPitchDetector.
+ @param harmonicIndex
@fn float tPitchDetector_predictFrequency (tPitchDetector* const detector)
@brief
@@ -863,7 +925,7 @@
#define ONSET_PERIODICITY 0.95f
#define MIN_PERIODICITY 0.9f
-#define DEFAULT_HYSTERESIS -40.0f
+#define DEFAULT_HYSTERESIS -200.0f
typedef struct _pitch_info
{
@@ -898,13 +960,79 @@
void tPitchDetector_setHysteresis (tPitchDetector* const detector, float hysteresis);
+ //==============================================================================
+
+ /*!
+ @defgroup tdualpitchdetector tPitchDetector
+ @ingroup analysis
+ @brief Combined pitch detection algorithm using boht Joel de Guzman's Q Audio DSP Library and Katya Vetters algorithms
+ @{
+
+ @fn void tDualPitchDetector_init (tDualPitchDetector* const detector, float lowestFreq, float highestFreq, float* inBuffer, int bufSize, LEAF* const leaf)
+ @brief Initialize a tDualPitchDetector to the default mempool of a LEAF instance.
+ @param detector A pointer to the relevant tDualPitchDetector.
+ @param lowestFreq
+ @param highestFreq
+ @param inputBuffer A buffer of float to store input to the pitch detector.
+ @param bufferSize Size of the input buffer.
+ @param leaf A pointer to the leaf instance.
+
+ @fn void tDualPitchDetector_initToPool (tDualPitchDetector* const detector, float lowestFreq, float highestFreq, float* inBuffer, int bufSize, tMempool* const mempool)
+ @brief Initialize a tDualPitchDetector to a specified mempool.
+ @param detector A pointer to the relevant tPitchDualDetector.
+ @param lowestFreq
+ @param highestFreq
+ @param inputBuffer A buffer of float to store input to the pitch detector.
+ @param bufferSize Size of the input buffer.
+ @param mempool A pointer to the tMempool to use.
+
+ @fn void tDualPitchDetector_free (tDualPitchDetector* const detector)
+ @brief Free a tDualPitchDetector from its mempool.
+ @param detector A pointer to the relevant tDualPitchDetector.
+
+ @fn int tDualPitchDetector_tick (tDualPitchDetector* const detector, float sample)
+ @brief
+ @param detector A pointer to the relevant tDualPitchDetector.
+ @param input
+
+ @fn float tDualPitchDetector_getFrequency (tDualPitchDetector* const detector)
+ @brief
+ @param detector A pointer to the relevant tDualPitchDetector.
+ @return The detected frequency.
+
+ @fn float tDualPitchDetector_getPeriodicity (tDualPitchDetector* const detector)
+ @brief
+ @param detector A pointer to the relevant tDualPitchDetector.
+ @return The periodicity of the input.
+
+ @fn float tDualPitchDetector_harmonic (tDualPitchDetector* const detector, int harmonicIndex)
+ @brief
+ @param detector A pointer to the relevant tDualPitchDetector.
+ @param harmonicIndex
+ @return
+
+ @fn float tDualPitchDetector_predictFrequency (tDualPitchDetector* const detector)
+ @brief
+ @param detector A pointer to the relevant tDualPitchDetector.
+ @return The predicted frequency in Hz.
+
+ @fn void tDualPitchDetector_setHysteresis (tDualPitchDetector* const detector, float hysteresis)
+ @brief Set the hysteresis used in zero crossing detection.
+ @param detector A pointer to the relevant tDualPitchDetector.
+ @param hysteresis The hysteresis in decibels. Defaults to -40db.
+
+ @fn void tDualPitchDetector_setPeriodicityThreshold (tDualPitchDetector* const detector, float thresh)
+ @brief Set the threshold for periodicity of a signal to be considered as pitched.
+ @param detector A pointer to the relevant tDualPitchDetector.
+ @param threshold The periodicity threshold from 0.0 to 1.0 with 1.0 being perfectly periodic.
+ 
+ @} */
typedef struct _tDualPitchDetector
{
-
tMempool mempool;
- tPitchDetector _pd1;
+ tPeriodDetection _pd1;
tPitchDetector _pd2;
_pitch_info _current;
float _mean;
@@ -911,12 +1039,15 @@
float _predicted_frequency;
int _first;
+ float highest, lowest;
+ float thresh;
+
} _tDualPitchDetector;
typedef _tDualPitchDetector* tDualPitchDetector;
- void tDualPitchDetector_init (tDualPitchDetector* const detector, float lowestFreq, float highestFreq, LEAF* const leaf);
- void tDualPitchDetector_initToPool (tDualPitchDetector* const detector, float lowestFreq, float highestFreq, tMempool* const mempool);
+ void tDualPitchDetector_init (tDualPitchDetector* const detector, float lowestFreq, float highestFreq, float* inBuffer, int bufSize, LEAF* const leaf);
+ void tDualPitchDetector_initToPool (tDualPitchDetector* const detector, float lowestFreq, float highestFreq, float* inBuffer, int bufSize, tMempool* const mempool);
void tDualPitchDetector_free (tDualPitchDetector* const detector);
int tDualPitchDetector_tick (tDualPitchDetector* const detector, float sample);
@@ -926,6 +1057,7 @@
float tDualPitchDetector_predictFrequency (tDualPitchDetector* const detector);
void tDualPitchDetector_setHysteresis (tDualPitchDetector* const detector, float hysteresis);
+ void tDualPitchDetector_setPeriodicityThreshold (tDualPitchDetector* const detector, float thresh);
--- a/leaf/Inc/leaf-delay.h
+++ b/leaf/Inc/leaf-delay.h
@@ -35,58 +35,76 @@
@{
@fn void tDelay_init (tDelay* const, uint32_t delay, uint32_t maxDelay, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tDelay to the default mempool of a LEAF instance.
+ @param delay A pointer to the tDelay to initialize.
+ @param initalLength
+ @param maxLength
+ @param leaf A pointer to the leaf instance.
@fn void tDelay_initToPool (tDelay* const, uint32_t delay, uint32_t maxDelay, tMempool* const)
- @brief
- @param
+ @brief Initialize a tDelay to a specified mempool.
+ @param delay A pointer to the tDelay to initialize.
+ @param initalLength
+ @param maxLength
+ @param mempool A pointer to the tMempool to use.
@fn void tDelay_free (tDelay* const)
- @brief
- @param
+ @brief Free a tDelay from its mempool.
+ @param delay A pointer to the tDelay to free.
@fn void tDelay_clear (tDelay* const)
@brief
- @param
+ @param delay A pointer to the relevant tDelay.
- @fn int tDelay_setDelay (tDelay* const, uint32_t delay)
+ @fn void tDelay_setDelay (tDelay* const, uint32_t delay)
@brief
- @param
+ @param delay A pointer to the relevant tDelay.
+ @param delayLength The new delay length in samples. Cannot be greater than the max delay length given on initialization.
@fn uint32_t tDelay_getDelay (tDelay* const)
@brief
- @param
+ @param delay A pointer to the relevant tDelay.
+ @return The current delay length.
@fn void tDelay_tapIn (tDelay* const, float in, uint32_t tapDelay)
@brief
- @param
+ @param delay A pointer to the relevant tDelay.
+ @param input
+ @param position
@fn float tDelay_tapOut (tDelay* const, uint32_t tapDelay)
@brief
- @param
+ @param delay A pointer to the relevant tDelay.
+ @param position
+ @return
@fn float tDelay_addTo (tDelay* const, float value, uint32_t tapDelay)
@brief
- @param
+ @param delay A pointer to the relevant tDelay.
+ @param input
+ @param position
+ @return
@fn float tDelay_tick (tDelay* const, float sample)
@brief
- @param
+ @param delay A pointer to the relevant tDelay.
+ @param input
+ @return
@fn float tDelay_getLastOut (tDelay* const)
@brief
- @param
+ @param delay A pointer to the relevant tDelay.
+ @return
@fn float tDelay_getLastIn (tDelay* const)
@brief
- @param
+ @param delay A pointer to the relevant tDelay.
+ @return

@} */
typedef struct _tDelay
{
-
tMempool mempool;
float gain;
@@ -107,7 +125,7 @@
void tDelay_free (tDelay* const);
void tDelay_clear (tDelay* const);
- int tDelay_setDelay (tDelay* const, uint32_t delay);
+ void tDelay_setDelay (tDelay* const, uint32_t delay);
uint32_t tDelay_getDelay (tDelay* const);
void tDelay_tapIn (tDelay* const, float in, uint32_t tapDelay);
float tDelay_tapOut (tDelay* const, uint32_t tapDelay);
@@ -125,66 +143,86 @@
@{
@fn void tLinearDelay_init (tLinearDelay* const, float delay, uint32_t maxDelay, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tLinearDelay to the default mempool of a LEAF instance.
+ @param delay A pointer to the tLinearDelay to initialize.
+ @param initialLength
+ @param maxLength
+ @param leaf A pointer to the leaf instance.
@fn void tLinearDelay_initToPool (tLinearDelay* const, float delay, uint32_t maxDelay, tMempool* const)
- @brief
- @param
+ @brief Initialize a tLinearDelay to a specified mempool.
+ @param delay A pointer to the tLinearDelay to initialize.
+ @param initialLength
+ @param maxLength
+ @param mempool A pointer to the tMempool to use.
@fn void tLinearDelay_free (tLinearDelay* const)
- @brief
- @param
+ @brief Free a tLinearDelay from its mempool.
+ @param delay A pointer to the tLinearDelay to free.
@fn void tLinearDelay_clear (tLinearDelay* const dl)
@brief
- @param
+ @param delay A pointer to the relevant tLinearDelay.
- @fn int tLinearDelay_setDelay (tLinearDelay* const, float delay)
+ @fn void tLinearDelay_setDelay (tLinearDelay* const, float delay)
@brief
- @param
+ @param delay A pointer to the relevant tLinearDelay.
+ @param delayLength The new delay length in samples. Cannot be greater than the max delay length given on initialization.
@fn float tLinearDelay_getDelay (tLinearDelay* const)
@brief
- @param
+ @param delay A pointer to the relevant tLinearDelay.
+ @return
@fn void tLinearDelay_tapIn (tLinearDelay* const, float in, uint32_t tapDelay)
@brief
- @param
+ @param delay A pointer to the relevant tLinearDelay.
+ @param input
+ @param position
@fn float tLinearDelay_tapOut (tLinearDelay* const, uint32_t tapDelay)
@brief
- @param
+ @param delay A pointer to the relevant tLinearDelay.
+ @param position
+ @return
@fn float tLinearDelay_addTo (tLinearDelay* const, float value, uint32_t tapDelay)
@brief
- @param
+ @param delay A pointer to the relevant tLinearDelay.
+ @param input
+ @param position
+ @return
@fn float tLinearDelay_tick (tLinearDelay* const, float sample)
@brief
- @param
+ @param delay A pointer to the relevant tLinearDelay.
+ @param input
+ @return
@fn void tLinearDelay_tickIn (tLinearDelay* const, float input)
@brief
- @param
+ @param delay A pointer to the relevant tLinearDelay.
+ @param input
@fn float tLinearDelay_tickOut (tLinearDelay* const)
@brief
- @param
+ @param delay A pointer to the relevant tLinearDelay.
+ @return
@fn float tLinearDelay_getLastOut (tLinearDelay* const)
@brief
- @param
+ @param delay A pointer to the relevant tLinearDelay.
+ @return
@fn float tLinearDelay_getLastIn (tLinearDelay* const)
@brief
- @param
+ @param delay A pointer to the relevant tLinearDelay.
+ @return

@} */
typedef struct _tLinearDelay
{
-
tMempool mempool;
float gain;
@@ -209,10 +247,10 @@
void tLinearDelay_free (tLinearDelay* const);
void tLinearDelay_clear (tLinearDelay* const dl);
- int tLinearDelay_setDelay (tLinearDelay* const, float delay);
+ void tLinearDelay_setDelay (tLinearDelay* const, float delay);
float tLinearDelay_getDelay (tLinearDelay* const);
void tLinearDelay_tapIn (tLinearDelay* const, float in, uint32_t tapDelay);
- float tLinearDelay_tapOut (tLinearDelay* const, uint32_t tapDelay);
+ float tLinearDelay_tapOut (tLinearDelay* const, uint32_t tapDelay);
float tLinearDelay_addTo (tLinearDelay* const, float value, uint32_t tapDelay);
float tLinearDelay_tick (tLinearDelay* const, float sample);
void tLinearDelay_tickIn (tLinearDelay* const, float input);
@@ -231,74 +269,96 @@
@{
@fn void tHermiteDelay_init (tHermiteDelay* const dl, float delay, uint32_t maxDelay, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tHermiteDelay to the default mempool of a LEAF instance.
+ @param delay A pointer to the tHermiteDelay to initialize.
+ @param initialLength
+ @param maxLength
+ @param leaf A pointer to the leaf instance.
@fn void tHermiteDelay_initToPool (tHermiteDelay* const dl, float delay, uint32_t maxDelay, tMempool* const mp)
- @brief
- @param
+ @brief Initialize a tHermiteDelay to a specified mempool.
+ @param delay A pointer to the tHermiteDelay to initialize.
+ @param initialLength
+ @param maxLength
+ @param mempool A pointer to the tMempool to use.
@fn void tHermiteDelay_free (tHermiteDelay* const dl)
- @brief
- @param
+ @brief Free a tHermiteDelay from its mempool.
+ @param delay A pointer to the tHermiteDelay to free.
@fn void tHermiteDelay_clear (tHermiteDelay* const dl)
@brief
- @param
+ @param delay A pointer to the relevant tHermiteDelay.
@fn float tHermiteDelay_tick (tHermiteDelay* const dl, float input)
@brief
- @param
+ @param delay A pointer to the relevant tHermiteDelay.
+ @param input
+ @return
@fn void tHermiteDelay_tickIn (tHermiteDelay* const dl, float input)
@brief
- @param
+ @param delay A pointer to the relevant tHermiteDelay.
+ @param input
@fn float tHermiteDelay_tickOut (tHermiteDelay* const dl)
@brief
- @param
+ @param delay A pointer to the relevant tHermiteDelay.
+ @return
- @fn int tHermiteDelay_setDelay (tHermiteDelay* const dl, float delay)
+ @fn void tHermiteDelay_setDelay (tHermiteDelay* const dl, float delay)
@brief
- @param
+ @param delay A pointer to the relevant tHermiteDelay.
+ @param delayLength The new delay length in samples. Cannot be greater than the max delay length given on initialization.
@fn float tHermiteDelay_tapOut (tHermiteDelay* const dl, uint32_t tapDelay)
@brief
- @param
+ @param delay A pointer to the relevant tHermiteDelay.
+ @param position
+ @return
@fn void tHermiteDelay_tapIn (tHermiteDelay* const dl, float value, uint32_t tapDelay)
@brief
- @param
+ @param delay A pointer to the relevant tHermiteDelay.
+ @param input
+ @param position
@fn float tHermiteDelay_addTo (tHermiteDelay* const dl, float value, uint32_t tapDelay)
@brief
- @param
+ @param delay A pointer to the relevant tHermiteDelay.
+ @param input
+ @param position
+ @return
@fn float tHermiteDelay_getDelay (tHermiteDelay* const dl)
@brief
- @param
+ @param delay A pointer to the relevant tHermiteDelay.
+ @return
@fn float tHermiteDelay_getLastOut (tHermiteDelay* const dl)
@brief
- @param
+ @param delay A pointer to the relevant tHermiteDelay.
+ @return
@fn float tHermiteDelay_getLastIn (tHermiteDelay* const dl)
@brief
- @param
+ @param delay A pointer to the relevant tHermiteDelay.
+ @return
@fn void tHermiteDelay_setGain (tHermiteDelay* const dl, float gain)
@brief
- @param
+ @param delay A pointer to the relevant tHermiteDelay.
+ @param gain
@fn float tHermiteDelay_getGain (tHermiteDelay* const dl)
@brief
- @param
+ @param delay A pointer to the relevant tHermiteDelay.
+ @return

@} */
typedef struct _tHermiteDelay
{
-
tMempool mempool;
float gain;
@@ -317,23 +377,23 @@
typedef _tHermiteDelay* tHermiteDelay;
- void tHermiteDelay_init (tHermiteDelay* const dl, float delay, uint32_t maxDelay, LEAF* const leaf);
- void tHermiteDelay_initToPool (tHermiteDelay* const dl, float delay, uint32_t maxDelay, tMempool* const mp);
- void tHermiteDelay_free (tHermiteDelay* const dl);
+ void tHermiteDelay_init (tHermiteDelay* const dl, float delay, uint32_t maxDelay, LEAF* const leaf);
+ void tHermiteDelay_initToPool (tHermiteDelay* const dl, float delay, uint32_t maxDelay, tMempool* const mp);
+ void tHermiteDelay_free (tHermiteDelay* const dl);
- void tHermiteDelay_clear (tHermiteDelay* const dl);
- float tHermiteDelay_tick (tHermiteDelay* const dl, float input);
- void tHermiteDelay_tickIn (tHermiteDelay* const dl, float input);
- float tHermiteDelay_tickOut (tHermiteDelay* const dl);
- int tHermiteDelay_setDelay (tHermiteDelay* const dl, float delay);
- float tHermiteDelay_tapOut (tHermiteDelay* const dl, uint32_t tapDelay);
- void tHermiteDelay_tapIn (tHermiteDelay* const dl, float value, uint32_t tapDelay);
- float tHermiteDelay_addTo (tHermiteDelay* const dl, float value, uint32_t tapDelay);
- float tHermiteDelay_getDelay (tHermiteDelay* const dl);
- float tHermiteDelay_getLastOut (tHermiteDelay* const dl);
+ void tHermiteDelay_clear (tHermiteDelay* const dl);
+ float tHermiteDelay_tick (tHermiteDelay* const dl, float input);
+ void tHermiteDelay_tickIn (tHermiteDelay* const dl, float input);
+ float tHermiteDelay_tickOut (tHermiteDelay* const dl);
+ void tHermiteDelay_setDelay (tHermiteDelay* const dl, float delay);
+ float tHermiteDelay_tapOut (tHermiteDelay* const dl, uint32_t tapDelay);
+ void tHermiteDelay_tapIn (tHermiteDelay* const dl, float value, uint32_t tapDelay);
+ float tHermiteDelay_addTo (tHermiteDelay* const dl, float value, uint32_t tapDelay);
+ float tHermiteDelay_getDelay (tHermiteDelay* const dl);
+ float tHermiteDelay_getLastOut (tHermiteDelay* const dl);
float tHermiteDelay_getLastIn (tHermiteDelay* const dl);
- void tHermiteDelay_setGain (tHermiteDelay* const dl, float gain);
- float tHermiteDelay_getGain (tHermiteDelay* const dl);
+ void tHermiteDelay_setGain (tHermiteDelay* const dl, float gain);
+ float tHermiteDelay_getGain (tHermiteDelay* const dl);
//==============================================================================
@@ -345,58 +405,76 @@
@{
@fn void tAllpassDelay_init (tAllpassDelay* const, float delay, uint32_t maxDelay, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tAllpassDelay to the default mempool of a LEAF instance.
+ @param delay A pointer to the tAllpassDelay to initialize.
+ @param initialLength
+ @param maxLength
+ @param leaf A pointer to the leaf instance.
@fn void tAllpassDelay_initToPool (tAllpassDelay* const, float delay, uint32_t maxDelay, tMempool* const)
- @brief
- @param
+ @brief Initialize a tAllpassDelay to a specified mempool.
+ @param delay A pointer to the tAllpassDelay to initialize.
+ @param initialLength
+ @param maxLength
+ @param mempool A pointer to the tMempool to use.
@fn void tAllpassDelay_free (tAllpassDelay* const)
- @brief
- @param
+ @brief Free a tAllpassDelay from its mempool.
+ @param delay A pointer to the tAllpassDelay to free.
@fn void tAllpassDelay_clear (tAllpassDelay* const)
@brief
- @param
+ @param delay A pointer to the relevant tAllpassDelay.
- @fn int tAllpassDelay_setDelay (tAllpassDelay* const, float delay)
+ @fn void tAllpassDelay_setDelay (tAllpassDelay* const, float delay)
@brief
- @param
+ @param delay A pointer to the relevant tAllpassDelay.
+ @param delayLength The new delay length in samples. Cannot be greater than the max delay length given on initialization.
@fn float tAllpassDelay_getDelay (tAllpassDelay* const)
@brief
- @param
+ @param delay A pointer to the relevant tAllpassDelay.
+ @return The current delay length in samples.
@fn void tAllpassDelay_tapIn (tAllpassDelay* const, float in, uint32_t tapDelay)
@brief
- @param
+ @param delay A pointer to the relevant tAllpassDelay.
+ @param inptu
+ @param position
@fn float tAllpassDelay_tapOut (tAllpassDelay* const, uint32_t tapDelay)
@brief
- @param
+ @param delay A pointer to the relevant tAllpassDelay.
+ @param position
+ @return
@fn float tAllpassDelay_addTo (tAllpassDelay* const, float value, uint32_t tapDelay)
@brief
- @param
+ @param delay A pointer to the relevant tAllpassDelay.
+ @param input
+ @param position
+ @return
@fn float tAllpassDelay_tick (tAllpassDelay* const, float sample)
@brief
- @param
+ @param delay A pointer to the relevant tAllpassDelay.
+ @param input
+ @return
@fn float tAllpassDelay_getLastOut (tAllpassDelay* const)
@brief
- @param
+ @param delay A pointer to the relevant tAllpassDelay.
+ @return
@fn float tAllpassDelay_getLastIn (tAllpassDelay* const)
@brief
- @param
+ @param delay A pointer to the relevant tAllpassDelay.
+ @return

@} */
typedef struct _tAllpassDelay
{
-
tMempool mempool;
float gain;
@@ -423,7 +501,7 @@
void tAllpassDelay_free (tAllpassDelay* const);
void tAllpassDelay_clear (tAllpassDelay* const);
- int tAllpassDelay_setDelay (tAllpassDelay* const, float delay);
+ void tAllpassDelay_setDelay (tAllpassDelay* const, float delay);
float tAllpassDelay_getDelay (tAllpassDelay* const);
void tAllpassDelay_tapIn (tAllpassDelay* const, float in, uint32_t tapDelay);
float tAllpassDelay_tapOut (tAllpassDelay* const, uint32_t tapDelay);
@@ -441,62 +519,80 @@
@{
@fn void tTapeDelay_init (tTapeDelay* const, float delay, uint32_t maxDelay, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tTapeDelay to the default mempool of a LEAF instance.
+ @param delay A pointer to the tTapeDelay to initialize.
+ @param initialLength
+ @param maxLength
+ @param leaf A pointer to the leaf instance.
@fn void tTapeDelay_initToPool (tTapeDelay* const, float delay, uint32_t maxDelay, tMempool* const)
- @brief
- @param
+ @brief Initialize a tTapeDelay to a specified mempool.
+ @param delay A pointer to the tTapeDelay to initialize.
+ @param initialLength
+ @param maxLength
+ @param mempool A pointer to the tMempool to use.
@fn void tTapeDelay_free (tTapeDelay* const)
- @brief
- @param
+ @brief Free a tTapeDelay from its mempool.
+ @param delay A pointer to the tTapeDelay to free.
@fn void tTapeDelay_clear (tTapeDelay* const)
- @brief
- @param
+ @brief
+ @param delay A pointer to the relevant tTapeDelay.
@fn void tTapeDelay_setDelay (tTapeDelay* const, float delay)
@brief
- @param
+ @param delay A pointer to the relevant tTapeDelay.
+ @param delayLength The new delay length in samples. Cannot be greater than the max delay length given on initialization.
@fn float tTapeDelay_getDelay (tTapeDelay* const)
@brief
- @param
+ @param delay A pointer to the relevant tTapeDelay.
+ @return
@fn void tTapeDelay_tapIn (tTapeDelay* const, float in, uint32_t tapDelay)
@brief
- @param
+ @param delay A pointer to the relevant tTapeDelay.
+ @param input
+ @param position
@fn float tTapeDelay_tapOut (tTapeDelay* const d, float tapDelay)
@brief
- @param
+ @param delay A pointer to the relevant tTapeDelay.
+ @param position
+ @return
@fn float tTapeDelay_addTo (tTapeDelay* const, float value, uint32_t tapDelay)
@brief
- @param
+ @param delay A pointer to the relevant tTapeDelay.
+ @param input
+ @param position
+ @return
@fn float tTapeDelay_tick (tTapeDelay* const, float sample)
@brief
- @param
+ @param delay A pointer to the relevant tTapeDelay.
+ @param input
+ @return
@fn void tTapeDelay_incrementInPoint(tTapeDelay* const dl)
@brief
- @param
+ @param delay A pointer to the relevant tTapeDelay.
@fn float tTapeDelay_getLastOut (tTapeDelay* const)
@brief
- @param
+ @param delay A pointer to the relevant tTapeDelay.
+ @return
@fn float tTapeDelay_getLastIn (tTapeDelay* const)
@brief
- @param
+ @param delay A pointer to the relevant tTapeDelay.
+ @return

@} */
typedef struct _tTapeDelay
{
-
tMempool mempool;
float gain;
@@ -540,40 +636,46 @@
@{
@fn void tRingBuffer_init (tRingBuffer* const ring, int size, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tRingBuffer to the default mempool of a LEAF instance.
+ @param buffer A pointer to the tRingbuffer to initialize.
+ @param size Size of the buffer. Should be a power of 2. Will otherwise be adjusted to the nearest greater power of 2.
+ @param leaf A pointer to the leaf instance.
@fn void tRingBuffer_initToPool (tRingBuffer* const ring, int size, tMempool* const mempool)
- @brief
- @param
+ @brief Initialize a tRingBuffer to a specified mempool.
+ @param buffer A pointer to the tRingbuffer to initialize.
+ @param size Size of the buffer. Should be a power of 2. Will otherwise be adjusted to the nearest greater power of 2.
+ @param mempool A pointer to the tMempool to use.
@fn void tRingBuffer_free (tRingBuffer* const ring)
- @brief
- @param
+ @brief Free a tRingBuffer from its mempool.
+ @param buffer A pointer to the tRingBuffer to free.
@fn void tRingBuffer_push (tRingBuffer* const ring, float val)
- @brief
- @param
+ @brief Push a value to the ring buffer, overwriting the oldest value if the buffer is full.
+ @param buffer A pointer to the relevant tRingBuffer.
+ @param input The value to push to the buffer.
@fn float tRingBuffer_getNewest (tRingBuffer* const ring)
- @brief
- @param
+ @brief Get the newest value in the ring buffer.
+ @param buffer A pointer to the relevant tRingBuffer.
+ @return The newest value in the ring buffer.
@fn float tRingBuffer_getOldest (tRingBuffer* const ring)
- @brief
- @param
+ @brief Get the oldest value in the ring buffer.
+ @param buffer A pointer to the relevant tRingBuffer.
+ @return The oldest value in the ring buffer.
@fn float tRingBuffer_get (tRingBuffer* const ring, int index)
- @brief
- @param
-
- @fn float tRingBuffer_clear (tRingBuffer* const ring)
- @brief
- @param
-
+ @brief Get the value at an index of the buffer.
+ @param buffer A pointer to the relevant tRingBuffer.
+ @param index The index to access.
+ @return The value at the given index.
+
@fn int tRingBuffer_getSize (tRingBuffer* const ring)
- @brief
- @param
+ @brief Get the size of the ring buffer.
+ @param buffer A pointer to the relevant tRingBuffer.
+ @return The size of the buffer.

@} */
typedef struct _tRingBuffer
@@ -597,7 +699,6 @@
float tRingBuffer_getNewest (tRingBuffer* const ring);
float tRingBuffer_getOldest (tRingBuffer* const ring);
float tRingBuffer_get (tRingBuffer* const ring, int index);
- float tRingBuffer_clear (tRingBuffer* const ring);
int tRingBuffer_getSize (tRingBuffer* const ring);
#ifdef __cplusplus
--- a/leaf/Inc/leaf-distortion.h
+++ b/leaf/Inc/leaf-distortion.h
@@ -36,24 +36,26 @@
@{
@fn void tSampleReducer_init (tSampleReducer* const, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tSampleReducer to the default mempool of a LEAF instance.
+ @param reducer A pointer to the tSampleReducer to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tSampleReducer_initToPool (tSampleReducer* const, tMempool* const)
- @brief
- @param
+ @brief Initialize a tSampleReducer to a specified mempool.
+ @param reducer A pointer to the tSampleReducer to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tSampleReducer_free (tSampleReducer* const)
- @brief
- @param
+ @brief Free a tSampleReducer from its mempool.
+ @param reducer A pointer to the tSampleReducer to free.
@fn float tSampleReducer_tick (tSampleReducer* const, float input)
@brief
- @param
+ @param reducer A pointer to the relevant tSampleReducer.
@fn void tSampleReducer_setRatio (tSampleReducer* const, float ratio)
@brief
- @param
+ @param reducer A pointer to the relevant tSampleReducer.

@} */
@@ -84,32 +86,34 @@
@{
@fn void tOversampler_init (tOversampler* const, int order, int extraQuality, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tOversampler to the default mempool of a LEAF instance.
+ @param oversampler A pointer to the tOversampler to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tOversampler_initToPool (tOversampler* const, int order, int extraQuality, tMempool* const)
- @brief
- @param
+ @brief Initialize a tOversampler to a specified mempool.
+ @param oversampler A pointer to the tOversampler to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tOversampler_free (tOversampler* const)
- @brief
- @param
+ @brief Free a tOversampler from its mempool.
+ @param oversampler A pointer to the tOversampler to free.
@fn void tOversampler_upsample (tOversampler* const, float input, float* output)
@brief
- @param
+ @param oversampler A pointer to the relevant tOversampler.
@fn float tOversampler_downsample (tOversampler* const os, float* input)
@brief
- @param
+ @param oversampler A pointer to the relevant tOversampler.
@fn float tOversampler_tick (tOversampler* const, float input, float* oversample, float (*effectTick)(float))
@brief
- @param
+ @param oversampler A pointer to the relevant tOversampler.
@fn int tOversampler_getLatency (tOversampler* const os)
@brief
- @param
+ @param oversampler A pointer to the relevant tOversampler.

@} */
@@ -145,20 +149,22 @@
@{
@fn void tLockhartWavefolder_init (tLockhartWavefolder* const, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tLockhartWavefolder to the default mempool of a LEAF instance.
+ @param wavefolder A pointer to the tLockhartWavefolder to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tLockhartWavefolder_initToPool (tLockhartWavefolder* const, tMempool* const)
- @brief
- @param
+ @brief Initialize a tLockhartWavefolder to a specified mempool.
+ @param wavefolder A pointer to the tLockhartWavefolder to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tLockhartWavefolder_free (tLockhartWavefolder* const)
- @brief
- @param
+ @brief Free a tLockhartWavefolder from its mempool.
+ @param wavefolder A pointer to the tLockhartWavefolder to free.
@fn float tLockhartWavefolder_tick (tLockhartWavefolder* const, float samp)
@brief
- @param
+ @param wavefolder A pointer to the relevant tLockhartWavefolder.

@} */
@@ -211,35 +217,41 @@
@{
@fn void tCrusher_init (tCrusher* const, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tCrusher to the default mempool of a LEAF instance.
+ @param crusher A pointer to the tCrusher to initialize.
+ @param leaf A pointer to the leaf instance.f
@fn void tCrusher_initToPool (tCrusher* const, tMempool* const)
- @brief
- @param
+ @brief Initialize a tCrusher to a specified mempool.
+ @param crusher A pointer to the tCrusher to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tCrusher_free (tCrusher* const)
- @brief
- @param
+ @brief Free a tCrusher from its mempool.
+ @param crusher A pointer to the tCrusher to free.
@fn float tCrusher_tick (tCrusher* const, float input)
@brief
- @param
+ @param crusher A pointer to the relevant tCrusher.
@fn void tCrusher_setOperation (tCrusher* const, float op)
@brief
- @param 0.0 - 1.0
+ @param crusher A pointer to the relevant tCrusher.
+ @param operation 0.0 - 1.0
@fn void tCrusher_setQuality (tCrusher* const, float val)
@brief
- @param 0.0 - 1.0
+ @param crusher A pointer to the relevant tCrusher.
+ @param quality 0.0 - 1.0
@fn void tCrusher_setRound (tCrusher* const, float rnd)
@brief
+ @param crusher A pointer to the relevant tCrusher.
@param what division to round to
@fn void tCrusher_setSamplingRatio (tCrusher* const, float ratio)
@brief
+ @param crusher A pointer to the relevant tCrusher.
@param sampling ratio

@} */
--- a/leaf/Inc/leaf-dynamics.h
+++ b/leaf/Inc/leaf-dynamics.h
@@ -38,20 +38,22 @@
@{
@fn void tCompressor_init (tCompressor* const, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tCompressor to the default mempool of a LEAF instance.
+ @param compressor A pointer to the tCompressor to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tCompressor_initToPool (tCompressor* const, tMempool* const)
- @brief
- @param
+ @brief Initialize a tCompressor to a specified mempool.
+ @param compressor A pointer to the tCompressor to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tCompressor_free (tCompressor* const)
- @brief
- @param
+ @brief Free a tCompressor from its mempool.
+ @param compressor A pointer to the tCompressor to free.
@fn float tCompressor_tick (tCompressor* const, float input)
@brief
- @param
+ @param compressor A pointer to the relevant tCompressor.

@} */
@@ -82,44 +84,47 @@
@defgroup tfeedbackleveler tFeedbackLeveler
@ingroup dynamics
@brief An auto VCA that you put into a feedback circuit to make it stay at the same level.
- @detail An auto VCA that you put into a feedback circuit to make it stay at the same level. It can enforce level bidirectionally (amplifying and attenuating as needed) or just attenutating. The former option allows for infinite sustain strings, for example, while The latter option allows for decaying strings, which can never exceed a specific level.
+ @detail An auto VCA that you put into a feedback circuit to make it stay at the same level. It can enforce level bidirectionally (amplifying and attenuating as needed) or just attenutating. The former option allows for infinite sustain strings, for example, while the latter option allows for decaying strings, which can never exceed a specific level.
@{
@fn void tFeedbackLeveler_init (tFeedbackLeveler* const, float targetLevel, float factor, float strength, int mode, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tFeedbackLeveler to the default mempool of a LEAF instance.
+ @param leveler A pointer to the tFeedbackLeveler to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tFeedbackLeveler_initToPool (tFeedbackLeveler* const, float targetLevel, float factor, float strength, int mode, tMempool* const)
- @brief
- @param
+ @brief Initialize a tFeedbackLeveler to a specified mempool.
+ @param leveler A pointer to the tFeedbackLeveler to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tFeedbackLeveler_free (tFeedbackLeveler* const)
- @brief
- @param
+ @brief Free a tFeedbackLeveler from its mempool.
+ @param leveler A pointer to the tFeedbackLeveler to free.
@fn float tFeedbackLeveler_tick (tFeedbackLeveler* const, float input)
@brief
- @param
+ @param leveler A pointer to the relevant tFeedbackLeveler.
@fn float tFeedbackLeveler_sample (tFeedbackLeveler* const)
@brief
- @param
+ @param leveler A pointer to the relevant tFeedbackLeveler.
@fn void tFeedbackLeveler_setTargetLevel (tFeedbackLeveler* const, float TargetLevel)
@brief
- @param
+ @param leveler A pointer to the relevant tFeedbackLeveler.
@fn void tFeedbackLeveler_setFactor (tFeedbackLeveler* const, float factor)
@brief
- @param
+ @param leveler A pointer to the relevant tFeedbackLeveler.
@fn void tFeedbackLeveler_setMode (tFeedbackLeveler* const, int mode)
@brief
- @param 0 for upwards limiting only, 1 for biderctional limiting
+ @param leveler A pointer to the relevant tFeedbackLeveler.
+ @param mode 0 for upwards limiting only, 1 for biderctional limiting
@fn void tFeedbackLeveler_setStrength (tFeedbackLeveler* const, float strength)
@brief
- @param
+ @param leveler A pointer to the relevant tFeedbackLeveler.

@} */
@@ -159,28 +164,30 @@
@{
@fn void tThreshold_init (tThreshold* const, float low, float high, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tThreshold to the default mempool of a LEAF instance.
+ @param threshold A pointer to the tThreshold to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tThreshold_initToPool (tThreshold* const, float low, float high, tMempool* const)
- @brief
- @param
+ @brief Initialize a tThreshold to a specified mempool.
+ @param threshold A pointer to the tThreshold to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tThreshold_free (tThreshold* const)
- @brief
- @param
+ @brief Free a tThreshold from its mempool.
+ @param threshold A pointer to the tThreshold to free.
@fn int tThreshold_tick (tThreshold* const, float input)
@brief
- @param
+ @param threshold A pointer to the relevant tThreshold.
@fn void tThreshold_setLow (tThreshold* const, float low)
@brief
- @param
+ @param threshold A pointer to the relevant tThreshold.
@fn void tThreshold_setHigh (tThreshold* const, float high)
@brief
- @param
+ @param threshold A pointer to the relevant tThreshold.
@} */
@@ -198,7 +205,7 @@
void tThreshold_initToPool (tThreshold* const, float low, float high, tMempool* const);
void tThreshold_free (tThreshold* const);
- int tThreshold_tick (tThreshold* const, float input);
+ int tThreshold_tick (tThreshold* const, float input);
void tThreshold_setLow (tThreshold* const, float low);
void tThreshold_setHigh (tThreshold* const, float high);
--- a/leaf/Inc/leaf-effects.h
+++ b/leaf/Inc/leaf-effects.h
@@ -31,60 +31,62 @@
@{
@fn void tTalkbox_init (tTalkbox* const, int bufsize, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tTalkbox to the default mempool of a LEAF instance.
+ @param talkbox A pointer to the tTalkbox to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tTalkbox_initToPool (tTalkbox* const, int bufsize, tMempool* const)
- @brief
- @param
+ @brief Initialize a tTalkbox to a specified mempool.
+ @param talkbox A pointer to the tTalkbox to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tTalkbox_free (tTalkbox* const)
- @brief
- @param
+ @brief Free a tTalkbox from its mempool.
+ @param talkbox A pointer to the tTalkbox to free.
@fn float tTalkbox_tick (tTalkbox* const, float synth, float voice)
@brief
- @param
+ @param talkbox A pointer to the relevant tTalkbox.
@fn float tTalkbox_tickFrozen (tTalkbox* const voc, float synth, float voice)
@brief
- @param
+ @param talkbox A pointer to the relevant tTalkbox.
@fn void tTalkbox_update (tTalkbox* const)
@brief
- @param
+ @param talkbox A pointer to the relevant tTalkbox.
@fn void tTalkbox_suspend (tTalkbox* const)
@brief
- @param
+ @param talkbox A pointer to the relevant tTalkbox.
@fn void tTalkbox_lpcDurbin (float *r, int p, float *k, float *g)
@brief
- @param
+ @param talkbox A pointer to the relevant tTalkbox.
@fn void tTalkbox_lpc (float *buf, float *car, double* dl, double* Rt, int32_t n, int32_t o, float warp, int warpOn, float *k, int freeze, float *G)
@brief
- @param
+ @param talkbox A pointer to the relevant tTalkbox.
@fn void tTalkbox_setQuality (tTalkbox* const, float quality)
@brief
- @param
+ @param talkbox A pointer to the relevant tTalkbox.
@fn void tTalkbox_setWarpFactor (tTalkbox* const voc, float warp)
@brief
- @param
+ @param talkbox A pointer to the relevant tTalkbox.
@fn void tTalkbox_setWarpOn (tTalkbox* const voc, float warpOn)
@brief
- @param
+ @param talkbox A pointer to the relevant tTalkbox.
@fn void tTalkbox_setFreeze (tTalkbox* const voc, float freeze)
@brief
- @param
+ @param talkbox A pointer to the relevant tTalkbox.
@fn void tTalkbox_warpedAutocorrelate (float * x, double* dl, double* Rt, unsigned int L, float * R, unsigned int P, float lambda)
@brief
- @param
+ @param talkbox A pointer to the relevant tTalkbox.
@} */
@@ -148,60 +150,62 @@
@{
@fn void tTalkboxFloat_init (tTalkboxFloat* const, int bufsize, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tTalkboxFloat to the default mempool of a LEAF instance.
+ @param talkbox A pointer to the tTalkboxFloat to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tTalkboxFloat_initToPool (tTalkboxFloat* const, int bufsize, tMempool* const)
- @brief
- @param
+ @brief Initialize a tTalkboxFloat to a specified mempool.
+ @param talkbox A pointer to the tTalkboxFloat to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tTalkboxFloat_free (tTalkboxFloat* const)
- @brief
- @param
+ @brief Free a tTalkboxFloat from its mempool.
+ @param talkbox A pointer to the tTalkboxFloat to free.
@fn float tTalkboxFloat_tick (tTalkboxFloat* const, float synth, float voice)
@brief
- @param
+ @param talkbox A pointer to the relevant tTalkboxFloat.
@fn float tTalkboxFloat_tickFrozen (tTalkboxFloat* const voc, float synth, float voice)
@brief
- @param
+ @param talkbox A pointer to the relevant tTalkboxFloat.
@fn void tTalkboxFloat_update (tTalkboxFloat* const)
@brief
- @param
+ @param talkbox A pointer to the relevant tTalkboxFloat.
@fn void tTalkboxFloat_suspend (tTalkboxFloat* const)
@brief
- @param
+ @param talkbox A pointer to the relevant tTalkboxFloat.
@fn void tTalkboxFloat_lpcDurbin (float *r, int p, float *k, float *g)
@brief
- @param
+ @param talkbox A pointer to the relevant tTalkboxFloat.
@fn void tTalkboxFloat_lpc (float *buf, float *car, float* dl, float* Rt, int32_t n, int32_t o, float warp, int warpOn, float *k, int freeze, float *G)
@brief
- @param
+ @param talkbox A pointer to the relevant tTalkboxFloat.
@fn void tTalkboxFloat_setQuality (tTalkboxFloat* const, float quality)
@brief
- @param
+ @param talkbox A pointer to the relevant tTalkboxFloat.
@fn void tTalkboxFloat_setWarpFactor (tTalkboxFloat* const voc, float warp)
@brief
- @param
+ @param talkbox A pointer to the relevant tTalkboxFloat.
@fn void tTalkboxFloat_setWarpOn (tTalkboxFloat* const voc, float warpOn)
@brief
- @param
+ @param talkbox A pointer to the relevant tTalkboxFloat.
@fn void tTalkboxFloat_setFreeze (tTalkboxFloat* const voc, float freeze)
@brief
- @param
+ @param talkbox A pointer to the relevant tTalkboxFloat.
@fn void tTalkboxFloat_warpedAutocorrelate (float * x, float* dl, float* Rt, unsigned int L, float * R, unsigned int P, float lambda)
@brief
- @param
+ @param talkbox A pointer to the relevant tTalkboxFloat.
@} */
@@ -260,28 +264,30 @@
@{
@fn void tVocoder_init (tVocoder* const, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tVocoder to the default mempool of a LEAF instance.
+ @param vocoder A pointer to the tVocoder to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tVocoder_initToPool (tVocoder* const, tMempool* const)
- @brief
- @param
+ @brief Initialize a tVocoder to a specified mempool.
+ @param vocoder A pointer to the tVocoder to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tVocoder_free (tVocoder* const)
- @brief
- @param
+ @brief Free a tVocoder from its mempool.
+ @param vocoder A pointer to the tVocoder to free.
@fn float tVocoder_tick (tVocoder* const, float synth, float voice)
@brief
- @param
+ @param vocoder A pointer to the relevant tVocoder.
@fn void tVocoder_update (tVocoder* const)
@brief
- @param
+ @param vocoder A pointer to the relevant tVocoder.
@fn void tVocoder_suspend (tVocoder* const)
@brief
- @param
+ @param vocoder A pointer to the relevant tVocoder.
@} */
@@ -325,40 +331,42 @@
@{
@fn void tRosenbergGlottalPulse_init (tRosenbergGlottalPulse* const, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tRosenbergGlottalPulse to the default mempool of a LEAF instance.
+ @param pulse A pointer to the tRosenbergGlottalPulse to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tRosenbergGlottalPulse_initToPool (tRosenbergGlottalPulse* const, tMempool* const)
- @brief
- @param
+ @brief Initialize a tRosenbergGlottalPulse to a specified mempool.
+ @param pulse A pointer to the tRosenbergGlottalPulse to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tRosenbergGlottalPulse_free (tRosenbergGlottalPulse* const)
- @brief
- @param
+ @brief Free a tRosenbergGlottalPulse from its mempool.
+ @param pulse A pointer to the tRosenbergGlottalPulse to free.
@fn float tRosenbergGlottalPulse_tick (tRosenbergGlottalPulse* const)
@brief
- @param
+ @param pulse A pointer to the relevant tRosenbergGlottalPulse.
@fn float tRosenbergGlottalPulse_tickHQ (tRosenbergGlottalPulse* const gp)
@brief
- @param
+ @param pulse A pointer to the relevant tRosenbergGlottalPulse.
@fn void tRosenbergGlottalPulse_setFreq (tRosenbergGlottalPulse* const, float freq)
@brief
- @param
+ @param pulse A pointer to the relevant tRosenbergGlottalPulse.
@fn void tRosenbergGlottalPulse_setOpenLength (tRosenbergGlottalPulse* const, float openLength)
@brief
- @param
+ @param pulse A pointer to the relevant tRosenbergGlottalPulse.
@fn void tRosenbergGlottalPulse_setPulseLength (tRosenbergGlottalPulse* const, float pulseLength)
@brief
- @param
+ @param pulse A pointer to the relevant tRosenbergGlottalPulse.
@fn void tRosenbergGlottalPulse_setOpenLengthAndPulseLength (tRosenbergGlottalPulse* const gp, float openLength, float pulseLength)
@brief
- @param
+ @param pulse A pointer to the relevant tRosenbergGlottalPulse.
@} */
@@ -397,51 +405,56 @@
@{
@fn void tSOLAD_init (tSOLAD* const, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tSOLAD to the default mempool of a LEAF instance.
+ @param solad A pointer to the tSOLAD to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tSOLAD_initToPool (tSOLAD* const, tMempool* const)
- @brief
- @param
+ @brief Initialize a tSOLAD to a specified mempool.
+ @param solad A pointer to the tSOLAD to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tSOLAD_free (tSOLAD* const)
- @brief
- @param
+ @brief Free a tSOLAD from its mempool.
+ @param solad A pointer to the tSOLAD to free.
@fn void tSOLAD_ioSamples (tSOLAD *w, float* in, float* out, int blocksize)
- @brief send one block of input samples, receive one block of output samples
- @param
+ @brief Send one block of input samples, receive one block of output samples
+ @param solad A pointer to the relevant tSOLAD.
@fn void tSOLAD_setPeriod (tSOLAD *w, float period)
- @brief set periodicity analysis data
- @param
+ @brief Set periodicity analysis data
+ @param solad A pointer to the relevant tSOLAD.
@fn void tSOLAD_setPitchFactor (tSOLAD *w, float pitchfactor)
- @brief set pitch factor between 0.25 and 4
- @param
+ @brief Set pitch factor between 0.25 and 4
+ @param solad A pointer to the relevant tSOLAD.
@fn void tSOLAD_setReadLag (tSOLAD *w, float readlag)
- @brief force readpointer lag
- @param
+ @brief Force readpointer lag
+ @param solad A pointer to the relevant tSOLAD.
@fn void tSOLAD_resetState (tSOLAD *w)
- @brief reset state variables
- @param
+ @brief Reset state variables
+ @param solad A pointer to the relevant tSOLAD.
@} */
-#define LOOPSIZE (2048*2) // (4096*2) // loop size must be power of two
-#define LOOPMASK (LOOPSIZE - 1)
+//#define LOOPSIZE (2048*2) // (4096*2) // loop size must be power of two
+//#define LOOPMASK (LOOPSIZE - 1)
#define PITCHFACTORDEFAULT 1.0f
#define INITPERIOD 64.0f
-#define MAXPERIOD (float)((LOOPSIZE - w->blocksize) * 0.8f)
+//#define MAXPERIOD (float)((LOOPSIZE - w->blocksize) * 0.8f)
#define MINPERIOD 8.0f
typedef struct _tSOLAD
{
-
tMempool mempool;
+ tAttackDetection ad;
+ tHighpass hp;
+
+ int loopSize;
uint16_t timeindex; // current reference time, write index
uint16_t blocksize; // signal input / output block size
float pitchfactor; // pitch factor between 0.25 and 4
@@ -457,8 +470,8 @@
typedef _tSOLAD* tSOLAD;
- void tSOLAD_init (tSOLAD* const, LEAF* const leaf);
- void tSOLAD_initToPool (tSOLAD* const, tMempool* const);
+ void tSOLAD_init (tSOLAD* const, int loopSize, LEAF* const leaf);
+ void tSOLAD_initToPool (tSOLAD* const, int loopSize, tMempool* const);
void tSOLAD_free (tSOLAD* const);
// send one block of input samples, receive one block of output samples
@@ -479,286 +492,209 @@
@{
@fn void tPitchShift_init (tPitchShift* const, tPeriodDetection* const, float* out, int bufSize, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tPitchShift to the default mempool of a LEAF instance.
+ @param pitchshift A pointer to the tPitchShift to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tPitchShift_initToPool (tPitchShift* const, tPeriodDetection* const, float* out, int bufSize, tMempool* const)
- @brief
- @param
+ @brief Initialize a tPitchShift to a specified mempool.
+ @param pitchshift A pointer to the tPitchShift to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tPitchShift_free (tPitchShift* const)
- @brief
- @param
+ @brief Free a tPitchShift from its mempool.
+ @param pitchshift A pointer to the tPitchShift to free.
@fn float tPitchShift_shift (tPitchShift* const)
@brief
- @param
+ @param pitchshift A pointer to the relevant tPitchShift.
@fn float tPitchShift_shiftToFunc (tPitchShift* const, float (*fun)(float))
@brief
- @param
+ @param pitchshift A pointer to the relevant tPitchShift.
@fn float tPitchShift_shiftToFreq (tPitchShift* const, float freq)
@brief
- @param
+ @param pitchshift A pointer to the relevant tPitchShift.
@fn void tPitchShift_setPitchFactor (tPitchShift* const, float pf)
@brief
- @param
+ @param pitchshift A pointer to the relevant tPitchShift.
@} */
typedef struct _tPitchShift
{
-
tMempool mempool;
+ _tDualPitchDetector* pd;
tSOLAD sola;
- tHighpass hp;
- tPeriodDetection* p;
float* outBuffer;
- int frameSize;
+ float* inBuffer;
int bufSize;
-
- int framesPerBuffer;
- int curBlock;
- int lastBlock;
int index;
- float pitchFactor;
- float timeConstant;
- float radius;
+ float pickiness;
} _tPitchShift;
typedef _tPitchShift* tPitchShift;
- void tPitchShift_init (tPitchShift* const, tPeriodDetection* const, float* out, int bufSize, LEAF* const leaf);
- void tPitchShift_initToPool (tPitchShift* const, tPeriodDetection* const, float* out, int bufSize, tMempool* const);
- void tPitchShift_free (tPitchShift* const);
+ void tPitchShift_init (tPitchShift* const, tDualPitchDetector* const, int bufSize, LEAF* const leaf);
+ void tPitchShift_initToPool (tPitchShift* const, tDualPitchDetector* const, int bufSize, tMempool* const);
+ void tPitchShift_free (tPitchShift* const);
- float tPitchShift_shift (tPitchShift* const);
- float tPitchShift_shiftToFunc (tPitchShift* const, float (*fun)(float));
- float tPitchShift_shiftToFreq (tPitchShift* const, float freq);
- void tPitchShift_setPitchFactor (tPitchShift* const, float pf);
+ void tPitchShift_shiftBy (tPitchShift* const, float factor, float* in, float* out);
+ void tPitchShift_shiftTo (tPitchShift* const, float freq, float* in, float* out);
+ void tPitchShift_setPickiness (tPitchShift* const, float p);
+
/*!
- @defgroup tretune tRetune
+ @defgroup tsimpleretune tSimpleRetune
@ingroup effects
@brief
@{
- @fn void tRetune_init (tRetune* const, int numVoices, int bufSize, int frameSize, LEAF* const leaf)
- @brief
- @param
+ @fn void tSimpleRetune_init (tSimpleRetune* const, int numVoices, int bufSize, int frameSize, LEAF* const leaf)
+ @brief Initialize a tSimpleRetune to the default mempool of a LEAF instance.
+ @param retune A pointer to the tSimpleRetune to initialize.
+ @param leaf A pointer to the leaf instance.
- @fn void tRetune_initToPool (tRetune* const, int numVoices, int bufSize, int frameSize, tMempool* const)
- @brief
- @param
+ @fn void tSimpleRetune_initToPool (tSimpleRetune* const, int numVoices, int bufSize, int frameSize, tMempool* const)
+ @brief Initialize a tSimpleRetune to a specified mempool.
+ @param retune A pointer to the tSimpleRetune to initialize.
+ @param mempool A pointer to the tMempool to use.
- @fn void tRetune_free (tRetune* const)
- @brief
- @param
+ @fn void tSimpleRetune_free (tSimpleRetune* const)
+ @brief Free a tSimpleRetune from its mempool.
+ @param retune A pointer to the tSimpleRetune to free.
- @fn float* tRetune_tick (tRetune* const, float sample)
+ @fn float* tSimpleRetune_tick (tSimpleRetune* const, float sample)
@brief
- @param
+ @param retune A pointer to the relevant tSimpleRetune.
- @fn void tRetune_setNumVoices (tRetune* const, int numVoices)
+ @fn void tSimpleRetune_setNumVoices (tSimpleRetune* const, int numVoices)
@brief
- @param
+ @param retune A pointer to the relevant tSimpleRetune.
- @fn void tRetune_setPitchFactors (tRetune* const, float pf)
+ @fn void tSimpleRetune_tuneVoices (tSimpleRetune* const, float f)
@brief
- @param
+ @param retune A pointer to the relevant tSimpleRetune.
- @fn void tRetune_setPitchFactor (tRetune* const, float pf, int voice)
+ @fn void tSimpleRetune_tuneVoice (tSimpleRetune* const, float f, int voice)
@brief
- @param
+ @param retune A pointer to the relevant tSimpleRetune.
- @fn void tRetune_setTimeConstant (tRetune* const, float tc)
- @brief
- @param
-
- @fn void tRetune_setHopSize (tRetune* const, int hs)
- @brief
- @param
-
- @fn void tRetune_setWindowSize (tRetune* const, int ws)
- @brief
- @param
-
- @fn void tRetune_setFidelityThreshold(tRetune* const, float threshold)
- @brief
- @param
-
- @fn float tRetune_getInputPeriod (tRetune* const)
- @brief
- @param
-
- @fn float tRetune_getInputFreq (tRetune* const)
- @brief
- @param
-
@} */
- typedef struct _tRetune
+ typedef struct _tSimpleRetune
{
-
tMempool mempool;
- tPeriodDetection pd;
+ tDualPitchDetector dp;
+ float minInputFreq, maxInputFreq;
+
tPitchShift* ps;
float* inBuffer;
- float** outBuffers;
- float* tickOutput;
- int frameSize;
+ float* outBuffer;
int bufSize;
+ int index;
- uint16_t hopSize;
- uint16_t windowSize;
- uint8_t fba;
+ void (*shiftFunction)(tPitchShift* const, float, float*, float*);
- float* pitchFactor;
- float timeConstant;
- float radius;
-
- float inputPeriod;
-
+ float* shiftValues;
int numVoices;
- } _tRetune;
+ } _tSimpleRetune;
- typedef _tRetune* tRetune;
+ typedef _tSimpleRetune* tSimpleRetune;
- void tRetune_init (tRetune* const, int numVoices, int bufSize, int frameSize, LEAF* const leaf);
- void tRetune_initToPool (tRetune* const, int numVoices, int bufSize, int frameSize, tMempool* const);
- void tRetune_free (tRetune* const);
+ void tSimpleRetune_init (tSimpleRetune* const, int numVoices, float minInputFreq, float maxInputFreq, int bufSize, LEAF* const leaf);
+ void tSimpleRetune_initToPool (tSimpleRetune* const, int numVoices, float minInputFreq, float maxInputFreq, int bufSize, tMempool* const);
+ void tSimpleRetune_free (tSimpleRetune* const);
- float* tRetune_tick (tRetune* const, float sample);
- void tRetune_setNumVoices (tRetune* const, int numVoices);
- void tRetune_setPitchFactors (tRetune* const, float pf);
- void tRetune_setPitchFactor (tRetune* const, float pf, int voice);
- void tRetune_setTimeConstant (tRetune* const, float tc);
- void tRetune_setHopSize (tRetune* const, int hs);
- void tRetune_setWindowSize (tRetune* const, int ws);
- void tRetune_setFidelityThreshold(tRetune* const, float threshold);
- float tRetune_getInputPeriod (tRetune* const);
- float tRetune_getInputFreq (tRetune* const);
+ float tSimpleRetune_tick (tSimpleRetune* const, float sample);
+ void tSimpleRetune_setMode (tSimpleRetune* const, int mode);
+ void tSimpleRetune_setNumVoices (tSimpleRetune* const, int numVoices);
+ void tSimpleRetune_setPickiness (tSimpleRetune* const, float p);
+ void tSimpleRetune_tuneVoices (tSimpleRetune* const, float* t);
+ void tSimpleRetune_tuneVoice (tSimpleRetune* const, int voice, float t);
+ float tSimpleRetune_getInputFrequency (tSimpleRetune* const);
/*!
- @defgroup tautotune tAutotune
+ @defgroup tretune tRetune
@ingroup effects
@brief
@{
- @fn void tAutotune_init (tAutotune* const, int numVoices, int bufSize, int frameSize, LEAF* const leaf)
- @brief
- @param
+ @fn void tRetune_init (tRetune* const, int numVoices, int bufSize, int frameSize, LEAF* const leaf)
+ @brief Initialize a tRetune to the default mempool of a LEAF instance.
+ @param retune A pointer to the tRetune to initialize.
+ @param leaf A pointer to the leaf instance.
- @fn void tAutotune_initToPool (tAutotune* const, int numVoices, int bufSize, int frameSize, tMempool* const)
- @brief
- @param
+ @fn void tRetune_initToPool (tRetune* const, int numVoices, int bufSize, int frameSize, tMempool* const)
+ @brief Initialize a tRetune to a specified mempool.
+ @param retune A pointer to the tRetune to initialize.
+ @param mempool A pointer to the tMempool to use.
- @fn void tAutotune_free (tAutotune* const)
- @brief
- @param
+ @fn void tRetune_free (tRetune* const)
+ @brief Free a tRetune from its mempool.
+ @param retune A pointer to the tRetune to free.
- @fn float* tAutotune_tick (tAutotune* const, float sample)
+ @fn float* tRetune_tick (tRetune* const, float sample)
@brief
- @param
+ @param retune A pointer to the relevant tRetune.
- @fn void tAutotune_setNumVoices (tAutotune* const, int numVoices)
+ @fn void tRetune_setNumVoices (tRetune* const, int numVoices)
@brief
- @param
+ @param retune A pointer to the relevant tRetune.
- @fn void tAutotune_setFreqs (tAutotune* const, float f)
+ @fn void tRetune_setPitchFactors (tRetune* const, float pf)
@brief
- @param
+ @param retune A pointer to the relevant tRetune.
- @fn void tAutotune_setFreq (tAutotune* const, float f, int voice)
+ @fn void tRetune_setPitchFactor (tRetune* const, float pf, int voice)
@brief
- @param
+ @param retune A pointer to the relevant tRetune.
- @fn void tAutotune_setTimeConstant (tAutotune* const, float tc)
- @brief
- @param
-
- @fn void tAutotune_setHopSize (tAutotune* const, int hs)
- @brief
- @param
-
- @fn void tAutotune_setWindowSize (tAutotune* const, int ws)
- @brief
- @param
-
- @fn void tAutotune_setFidelityThreshold (tAutotune* const, float threshold)
- @brief
- @param
-
- @fn void tAutotune_setAlpha (tAutotune* const, float alpha)
- @brief
- @param
-
- @fn void tAutotune_setTolerance (tAutotune* const, float tolerance)
- @brief
- @param
-
- @fn float tAutotune_getInputPeriod (tAutotune* const)
- @brief
- @param
-
- @fn float tAutotune_getInputFreq (tAutotune* const)
- @brief
- @param
-
@} */
- typedef struct _tAutotune
+ typedef struct _tRetune
{
-
tMempool mempool;
- tPeriodDetection pd;
+ tDualPitchDetector dp;
+ float minInputFreq, maxInputFreq;
+
tPitchShift* ps;
+ float* pdBuffer;
float* inBuffer;
float** outBuffers;
- float* tickOutput;
- int frameSize;
int bufSize;
+ int index;
- uint16_t hopSize;
- uint16_t windowSize;
- uint8_t fba;
+ float* output;
- float* freq;
- float timeConstant;
- float radius;
+ void (*shiftFunction)(tPitchShift* const, float, float*, float*);
- float inputPeriod;
- int shiftOn;
+ float* shiftValues;
int numVoices;
- } _tAutotune;
+ } _tRetune;
- typedef _tAutotune* tAutotune;
+ typedef _tRetune* tRetune;
- void tAutotune_init (tAutotune* const, int numVoices, int bufSize, int frameSize, LEAF* const leaf);
- void tAutotune_initToPool (tAutotune* const, int numVoices, int bufSize, int frameSize, tMempool* const);
- void tAutotune_free (tAutotune* const);
+ void tRetune_init (tRetune* const, int numVoices, float minInputFreq, float maxInputFreq, int bufSize, LEAF* const leaf);
+ void tRetune_initToPool (tRetune* const, int numVoices, float minInputFreq, float maxInputFreq, int bufSize, tMempool* const);
+ void tRetune_free (tRetune* const);
- float* tAutotune_tick (tAutotune* const, float sample);
- void tAutotune_setNumVoices (tAutotune* const, int numVoices);
- void tAutotune_setFreqs (tAutotune* const, float f);
- void tAutotune_setFreq (tAutotune* const, float f, int voice);
- void tAutotune_setTimeConstant (tAutotune* const, float tc);
- void tAutotune_setHopSize (tAutotune* const, int hs);
- void tAutotune_setWindowSize (tAutotune* const, int ws);
- void tAutotune_setFidelityThreshold (tAutotune* const, float threshold);
- void tAutotune_setAlpha (tAutotune* const, float alpha);
- void tAutotune_setTolerance (tAutotune* const, float tolerance);
- float tAutotune_getInputPeriod (tAutotune* const);
- float tAutotune_getInputFreq (tAutotune* const);
+ float* tRetune_tick (tRetune* const, float sample);
+ void tRetune_setMode (tRetune* const, int mode);
+ void tRetune_setNumVoices (tRetune* const, int numVoices);
+ void tRetune_setPickiness (tRetune* const, float p);
+ void tRetune_tuneVoices (tRetune* const, float* t);
+ void tRetune_tuneVoice (tRetune* const, int voice, float t);
+ float tRetune_getInputFrequency (tRetune* const);
//==============================================================================
@@ -769,40 +705,42 @@
@{
@fn void tFormantShifter_init (tFormantShifter* const, int order, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tFormantShifter to the default mempool of a LEAF instance.
+ @param formant A pointer to the tFormantShifter to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tFormantShifter_initToPool (tFormantShifter* const, int order, tMempool* const)
- @brief
- @param
+ @brief Initialize a tFormantShifter to a specified mempool.
+ @param formant A pointer to the tFormantShifter to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tFormantShifter_free (tFormantShifter* const)
- @brief
- @param
+ @brief Free a tFormantShifter from its mempool.
+ @param formant A pointer to the tFormantShifter to free.
@fn float tFormantShifter_tick (tFormantShifter* const, float input)
@brief
- @param
+ @param formant A pointer to the relevant tFormantShifter.
@fn float tFormantShifter_remove (tFormantShifter* const, float input)
@brief
- @param
+ @param formant A pointer to the relevant tFormantShifter.
@fn float tFormantShifter_add (tFormantShifter* const, float input)
@brief
- @param
+ @param formant A pointer to the relevant tFormantShifter.
@fn void tFormantShifter_ioSamples (tFormantShifter* const, float* in, float* out, int size, float fwarp)
@brief
- @param
+ @param formant A pointer to the relevant tFormantShifter.
@fn void tFormantShifter_setShiftFactor (tFormantShifter* const, float shiftFactor)
@brief
- @param
+ @param formant A pointer to the relevant tFormantShifter.
@fn void tFormantShifter_setIntensity (tFormantShifter* const, float intensity)
@brief
- @param
+ @param formant A pointer to the relevant tFormantShifter.
@} */
--- a/leaf/Inc/leaf-electrical.h
+++ b/leaf/Inc/leaf-electrical.h
@@ -35,57 +35,59 @@
@{
@fn void tWDF_init (tWDF* const, WDFComponentType type, float value, tWDF* const rL, tWDF* const rR, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tWDF to the default mempool of a LEAF instance.
+ @param wdf A pointer to the tWDF to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tWDF_initToPool (tWDF* const, WDFComponentType type, float value, tWDF* const rL, tWDF* const rR, tMempool* const)
- @brief
- @param
+ @brief Initialize a tWDF to a specified mempool.
+ @param wdf A pointer to the tWDF to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tWDF_free (tWDF* const)
- @brief
- @param
+ @brief Free a tWDF from its mempool.
+ @param wdf A pointer to the tWDF to free.
@fn float tWDF_tick (tWDF* const, float sample, tWDF* const outputPoint, uint8_t paramsChanged)
@brief
- @param
+ @param wdf A pointer to the relevant tWDF.
@fn void tWDF_setValue (tWDF* const, float value)
@brief
- @param
+ @param wdf A pointer to the relevant tWDF.
@fn void tWDF_setSampleRate (tWDF* const, float sample_rate)
@brief
- @param
+ @param wdf A pointer to the relevant tWDF.
@fn uint8_t tWDF_isLeaf (tWDF* const)
@brief
- @param
+ @param wdf A pointer to the relevant tWDF.
@fn float tWDF_getPortResistance (tWDF* const)
@brief
- @param
+ @param wdf A pointer to the relevant tWDF.
@fn float tWDF_getReflectedWaveUp (tWDF* const, float input)
@brief
- @param
+ @param wdf A pointer to the relevant tWDF.
@fn float tWDF_getReflectedWaveDown (tWDF* const, float input, float incident_wave)
@brief
- @param
+ @param wdf A pointer to the relevant tWDF.
@fn void tWDF_setIncidentWave (tWDF* const, float incident_wave, float input)
@brief
- @param
+ @param wdf A pointer to the relevant tWDF.
@fn float tWDF_getVoltage (tWDF* const)
@brief
- @param
+ @param wdf A pointer to the relevant tWDF.
@fn float tWDF_getCurrent (tWDF* const)
@brief
- @param
-
+ @param wdf A pointer to the relevant tWDF.
+
@} */
typedef enum WDFComponentType
--- a/leaf/Inc/leaf-envelopes.h
+++ b/leaf/Inc/leaf-envelopes.h
@@ -41,36 +41,38 @@
@{
@fn void tEnvelope_init (tEnvelope* const, float attack, float decay, int loop, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tEnvelope to the default mempool of a LEAF instance.
+ @param envelope A pointer to the tEnvelope to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tEnvelope_initToPool (tEnvelope* const, float attack, float decay, int loop, tMempool* const)
- @brief
- @param
+ @brief Initialize a tEnvelope to a specified mempool.
+ @param envelope A pointer to the tEnvelope to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tEnvelope_free (tEnvelope* const)
- @brief
- @param
+ @brief Free a tEnvelope from its mempool.
+ @param envelope A pointer to the tEnvelope to free.
@fn float tEnvelope_tick (tEnvelope* const)
@brief
- @param
+ @param envelope A pointer to the relevant tEnvelope.
@fn void tEnvelope_setAttack (tEnvelope* const, float attack)
@brief
- @param
+ @param envelope A pointer to the relevant tEnvelope.
@fn void tEnvelope_setDecay (tEnvelope* const, float decay)
@brief
- @param
+ @param envelope A pointer to the relevant tEnvelope.
@fn void tEnvelope_loop (tEnvelope* const, int loop)
@brief
- @param
+ @param envelope A pointer to the relevant tEnvelope.
@fn void tEnvelope_on (tEnvelope* const, float velocity)
@brief
- @param
+ @param envelope A pointer to the relevant tEnvelope.
@} */
@@ -119,40 +121,42 @@
@{
@fn void tExpSmooth_init (tExpSmooth* const, float val, float factor, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tExpSmooth to the default mempool of a LEAF instance.
+ @param smooth A pointer to the tExpSmooth to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tExpSmooth_initToPool (tExpSmooth* const, float val, float factor, tMempool* const)
- @brief
- @param
+ @brief Initialize a tExpSmooth to a specified mempool.
+ @param smooth A pointer to the tExpSmooth to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tExpSmooth_free (tExpSmooth* const)
- @brief
- @param
+ @brief Free a tExpSmooth from its mempool.
+ @param smooth A pointer to the tExpSmooth to free.
@fn float tExpSmooth_tick (tExpSmooth* const)
@brief
- @param
+ @param smooth A pointer to the relevant tExpSmooth.
@fn float tExpSmooth_sample (tExpSmooth* const)
@brief
- @param
+ @param smooth A pointer to the relevant tExpSmooth.
@fn void tExpSmooth_setFactor (tExpSmooth* const, float factor)
@brief
- @param
+ @param smooth A pointer to the relevant tExpSmooth.
@fn void tExpSmooth_setDest (tExpSmooth* const, float dest)
@brief
- @param
+ @param smooth A pointer to the relevant tExpSmooth.
@fn void tExpSmooth_setVal (tExpSmooth* const, float val)
@brief
- @param
+ @param smooth A pointer to the relevant tExpSmooth.
@fn void tExpSmooth_setValAndDest(tExpSmooth* const expsmooth, float val)
@brief
- @param
+ @param smooth A pointer to the relevant tExpSmooth.
@} */
@@ -189,48 +193,50 @@
@{
@fn void tADSR_init (tADSR* const adsrenv, float attack, float decay, float sustain, float release, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tADSR to the default mempool of a LEAF instance.
+ @param adsr A pointer to the tADSR to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tADSR_initToPool (tADSR* const adsrenv, float attack, float decay, float sustain, float release, tMempool* const mp)
- @brief
- @param
+ @brief Initialize a tADSR to a specified mempool.
+ @param adsr A pointer to the tADSR to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tADSR_free (tADSR* const)
- @brief
- @param
+ @brief Free a tADSR from its mempool.
+ @param adsr A pointer to the tADSR to free.
@fn float tADSR_tick (tADSR* const)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR.
@fn void tADSR_setAttack (tADSR* const, float attack)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR.
@fn void tADSR_setDecay (tADSR* const, float decay)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR.
@fn void tADSR_setSustain (tADSR* const, float sustain)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR.
@fn void tADSR_setRelease (tADSR* const, float release)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR.
@fn void tADSR_setLeakFactor (tADSR* const, float leakFactor)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR.
@fn void tADSR_on (tADSR* const, float velocity)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR.
@fn void tADSR_off (tADSR* const)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR.
@} */
@@ -281,48 +287,50 @@
@{
@fn void tADSR2_init (tADSR2* const, float attack, float decay, float sustain, float release, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tADSR2 to the default mempool of a LEAF instance.
+ @param adsr A pointer to the tADSR2 to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tADSR2_initToPool (tADSR2* const, float attack, float decay, float sustain, float release, tMempool* const)
- @brief
- @param
+ @brief Initialize a tADSR2 to a specified mempool.
+ @param adsr A pointer to the tADSR2 to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tADSR2_free (tADSR2* const)
- @brief
- @param
+ @brief Free a tADSR2 from its mempool.
+ @param adsr A pointer to the tADSR2 to free.
@fn float tADSR2_tick (tADSR2* const)
@brief
- @param
-
+ @param adsr A pointer to the relevant tADSR2.
+
@fn void tADSR2_setAttack (tADSR2* const, float attack)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR2.
@fn void tADSR2_setDecay (tADSR2* const, float decay)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR2.
@fn void tADSR2_setSustain (tADSR2* const, float sustain)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR2.
@fn void tADSR2_setRelease (tADSR2* const, float release)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR2.
@fn void tADSR2_setLeakFactor (tADSR2* const, float leakFactor)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR2.
@fn void tADSR2_on (tADSR2* const, float velocity)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR2.
@fn void tADSR2_off (tADSR2* const)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR2.
@} */
@@ -375,48 +383,50 @@
@{
@fn void tADSR3_init (tADSR3* const, float attack, float decay, float sustain, float release, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tADSR3 to the default mempool of a LEAF instance.
+ @param adsr A pointer to the tADSR3 to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tADSR3_initToPool (tADSR3* const, float attack, float decay, float sustain, float release, tMempool* const)
- @brief
- @param
+ @brief Initialize a tADSR3 to a specified mempool.
+ @param adsr A pointer to the tADSR3 to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tADSR3_free (tADSR3* const)
- @brief
- @param
+ @brief Free a tADSR3 from its mempool.
+ @param adsr A pointer to the tADSR3 to free.
@fn float tADSR3_tick (tADSR3* const)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR3.
@fn void tADSR3_setAttack (tADSR3* const, float attack)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR3.
@fn void tADSR3_setDecay (tADSR3* const, float decay)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR3.
@fn void tADSR3_setSustain (tADSR3* const, float sustain)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR3.
@fn void tADSR3_setRelease (tADSR3* const, float release)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR3.
@fn void tADSR3_setLeakFactor (tADSR3* const, float leakFactor)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR3.
@fn void tADSR3_on (tADSR3* const, float velocity)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR3.
@fn void tADSR3_off (tADSR3* const)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR3.
@} */
@@ -480,52 +490,54 @@
@{
@fn void tADSR4_init (tADSR4* const, float attack, float decay, float sustain, float release, float* expBuffer, int bufferSize, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tADSR4 to the default mempool of a LEAF instance.
+ @param adsr A pointer to the tADSR4 to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tADSR4_initToPool (tADSR4* const, float attack, float decay, float sustain, float release, float* expBuffer, int bufferSize, tMempool* const)
- @brief
- @param
+ @brief Initialize a tADSR4 to a specified mempool.
+ @param adsr A pointer to the tADSR4 to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tADSR4_free (tADSR4* const)
- @brief
- @param
+ @brief Free a tADSR4 from its mempool.
+ @param adsr A pointer to the tADSR4 to free.
@fn float tADSR4_tick (tADSR4* const)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR4.
@fn float tADSR4_tickNoInterp (tADSR4* const adsrenv)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR4.
@fn void tADSR4_setAttack (tADSR4* const, float attack)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR4.
@fn void tADSR4_setDecay (tADSR4* const, float decay)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR4.
@fn void tADSR4_setSustain (tADSR4* const, float sustain)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR4.
@fn void tADSR4_setRelease (tADSR4* const, float release)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR4.
@fn void tADSR4_setLeakFactor (tADSR4* const, float leakFactor)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR4.
@fn void tADSR4_on (tADSR4* const, float velocity)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR4.
@fn void tADSR4_off (tADSR4* const)
@brief
- @param
+ @param adsr A pointer to the relevant tADSR4.
@} */
@@ -575,36 +587,38 @@
@{
@fn void tRamp_init (tRamp* const, float time, int samplesPerTick, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tRamp to the default mempool of a LEAF instance.
+ @param ramp A pointer to the tRamp to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tRamp_initToPool (tRamp* const, float time, int samplesPerTick, tMempool* const)
- @brief
- @param
+ @brief Initialize a tRamp to a specified mempool.
+ @param ramp A pointer to the tRamp to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tRamp_free (tRamp* const)
- @brief
- @param
+ @brief Free a tRamp from its mempool.
+ @param ramp A pointer to the tRamp to free.
@fn float tRamp_tick (tRamp* const)
@brief
- @param
+ @param ramp A pointer to the relevant tRamp.
@fn float tRamp_sample (tRamp* const)
@brief
- @param
+ @param ramp A pointer to the relevant tRamp.
@fn void tRamp_setTime (tRamp* const, float time)
@brief
- @param
+ @param ramp A pointer to the relevant tRamp.
@fn void tRamp_setDest (tRamp* const, float dest)
@brief
- @param
+ @param ramp A pointer to the relevant tRamp.
@fn void tRamp_setVal (tRamp* const, float val)
@brief
- @param
+ @param ramp A pointer to the relevant tRamp.
@} */
@@ -640,40 +654,42 @@
@{
@fn void tRampUpDown_init (tRampUpDown* const, float upTime, float downTime, int samplesPerTick, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tRampUpDown to the default mempool of a LEAF instance.
+ @param ramp A pointer to the tRampUpDown to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tRampUpDown_initToPool (tRampUpDown* const, float upTime, float downTime, int samplesPerTick, tMempool* const)
- @brief
- @param
+ @brief Initialize a tRampUpDown to a specified mempool.
+ @param ramp A pointer to the tRampUpDown to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tRampUpDown_free (tRampUpDown* const)
- @brief
- @param
+ @brief Free a tRampUpDown from its mempool.
+ @param ramp A pointer to the tRampUpDown to free.
@fn float tRampUpDown_tick (tRampUpDown* const)
@brief
- @param
+ @param ramp A pointer to the relevant tRampUpDown.
@fn float tRampUpDown_sample (tRampUpDown* const)
@brief
- @param
+ @param ramp A pointer to the relevant tRampUpDown.
@fn void tRampUpDown_setUpTime (tRampUpDown* const, float upTime)
@brief
- @param
+ @param ramp A pointer to the relevant tRampUpDown.
@fn void tRampUpDown_setDownTime (tRampUpDown* const, float downTime)
@brief
- @param
+ @param ramp A pointer to the relevant tRampUpDown.
@fn void tRampUpDown_setDest (tRampUpDown* const, float dest)
@brief
- @param
+ @param ramp A pointer to the relevant tRampUpDown.
@fn void tRampUpDown_setVal (tRampUpDown* const, float val)
@brief
- @param
+ @param ramp A pointer to the relevant tRampUpDown.
@} */
@@ -713,36 +729,38 @@
@{
@fn void tSlide_init (tSlide* const, float upSlide, float downSlide, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tSlide to the default mempool of a LEAF instance.
+ @param slide A pointer to the tSlide to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tSlide_initToPool (tSlide* const, float upSlide, float downSlide, tMempool* const)
- @brief
- @param
+ @brief Initialize a tSlide to a specified mempool.
+ @param slide A pointer to the tSlide to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tSlide_free (tSlide* const)
- @brief
- @param
+ @brief Free a tSlide from its mempool.
+ @param slide A pointer to the tSlide to free.
@fn float tSlide_tick (tSlide* const, float in)
@brief
- @param
+ @param slide A pointer to the relevant tSlide.
@fn float tSlide_tickNoInput (tSlide* const sl)
@brief
- @param
+ @param slide A pointer to the relevant tSlide.
@fn void tSlide_setUpSlide (tSlide* const sl, float upSlide)
@brief
- @param
+ @param slide A pointer to the relevant tSlide.
@fn void tSlide_setDownSlide (tSlide* const sl, float downSlide)
@brief
- @param
+ @param slide A pointer to the relevant tSlide.
@fn void tSlide_setDest (tSlide* const sl, float dest)
@brief
- @param
+ @param slide A pointer to the relevant tSlide.
@} */
--- a/leaf/Inc/leaf-filters.h
+++ b/leaf/Inc/leaf-filters.h
@@ -37,28 +37,30 @@
@{
@fn void tAllpass_init (tAllpass* const, float initDelay, uint32_t maxDelay, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tAllpass to the default mempool of a LEAF instance.
+ @param filter A pointer to the tAllpass to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tAllpass_initToPool (tAllpass* const, float initDelay, uint32_t maxDelay, tMempool* const)
- @brief
- @param
+ @brief Initialize a tAllpass to a specified mempool.
+ @param filter A pointer to the tAllpass to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tAllpass_free (tAllpass* const)
- @brief
- @param
+ @brief Free a tAllpass from its mempool.
+ @param filter A pointer to the tAllpass to free.
@fn float tAllpass_tick (tAllpass* const, float input)
@brief
- @param
+ @param filter A pointer to the relevant tAllpass.
@fn void tAllpass_setGain (tAllpass* const, float gain)
@brief
- @param
+ @param filter A pointer to the relevant tAllpass.
@fn void tAllpass_setDelay (tAllpass* const, float delay)
@brief
- @param
+ @param filter A pointer to the relevant tAllpass.

@} */
@@ -94,44 +96,46 @@
@{
@fn void tOnePole_init (tOnePole* const, float thePole, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tOnePole to the default mempool of a LEAF instance.
+ @param filter A pointer to the tOnePole to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tOnePole_initToPool (tOnePole* const, float thePole, tMempool* const)
- @brief
- @param
+ @brief Initialize a tOnePole to a specified mempool.
+ @param filter A pointer to the tOnePole to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tOnePole_free (tOnePole* const)
- @brief
- @param
+ @brief Free a tOnePole from its mempool.
+ @param filter A pointer to the tOnePole to free.
@fn float tOnePole_tick (tOnePole* const, float input)
@brief
- @param
+ @param filter A pointer to the relevant tOnePole.
@fn void tOnePole_setB0 (tOnePole* const, float b0)
@brief
- @param
+ @param filter A pointer to the relevant tOnePole.
@fn void tOnePole_setA1 (tOnePole* const, float a1)
@brief
- @param
+ @param filter A pointer to the relevant tOnePole.
@fn void tOnePole_setPole (tOnePole* const, float thePole)
@brief
- @param
+ @param filter A pointer to the relevant tOnePole.
@fn void tOnePole_setFreq (tOnePole* const, float freq)
@brief
- @param
+ @param filter A pointer to the relevant tOnePole.
@fn void tOnePole_setCoefficients(tOnePole* const, float b0, float a1)
@brief
- @param
+ @param filter A pointer to the relevant tOnePole.
@fn void tOnePole_setGain (tOnePole* const, float gain)
@brief
- @param
+ @param filter A pointer to the relevant tOnePole.

@} */
@@ -168,44 +172,46 @@
@{
@fn void tTwoPole_init (tTwoPole* const, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tTwoPole to the default mempool of a LEAF instance.
+ @param filter A pointer to the tTwoPole to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tTwoPole_initToPool (tTwoPole* const, tMempool* const)
- @brief
- @param
+ @brief Initialize a tTwoPole to a specified mempool.
+ @param filter A pointer to the tTwoPole to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tTwoPole_free (tTwoPole* const)
- @brief
- @param
+ @brief Free a tTwoPole from its mempool.
+ @param filter A pointer to the tTwoPole to free.
@fn float tTwoPole_tick (tTwoPole* const, float input)
@brief
- @param
+ @param filter A pointer to the relevant tTwoPole.
@fn void tTwoPole_setB0 (tTwoPole* const, float b0)
@brief
- @param
+ @param filter A pointer to the relevant tTwoPole.
@fn void tTwoPole_setA1 (tTwoPole* const, float a1)
@brief
- @param
+ @param filter A pointer to the relevant tTwoPole.
@fn void tTwoPole_setA2 (tTwoPole* const, float a2)
@brief
- @param
+ @param filter A pointer to the relevant tTwoPole.
@fn void tTwoPole_setResonance (tTwoPole* const, float freq, float radius, int normalize)
@brief
- @param
+ @param filter A pointer to the relevant tTwoPole.
@fn void tTwoPole_setCoefficients(tTwoPole* const, float b0, float a1, float a2)
@brief
- @param
+ @param filter A pointer to the relevant tTwoPole.
@fn void tTwoPole_setGain (tTwoPole* const, float gain)
@brief
- @param
+ @param filter A pointer to the relevant tTwoPole.

@} */
@@ -247,44 +253,46 @@
@{
@fn void tOneZero_init (tOneZero* const, float theZero, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tOneZero to the default mempool of a LEAF instance.
+ @param filter A pointer to the tSlide to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tOneZero_initToPool (tOneZero* const, float theZero, tMempool* const)
- @brief
- @param
+ @brief Initialize a tOneZero to a specified mempool.
+ @param filter A pointer to the tOneZero to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tOneZero_free (tOneZero* const)
- @brief
- @param
+ @brief Free a tOneZero from its mempool.
+ @param filter A pointer to the tOneZero to free.
@fn float tOneZero_tick (tOneZero* const, float input)
@brief
- @param
+ @param filter A pointer to the relevant tOneZero.
@fn void tOneZero_setB0 (tOneZero* const, float b0)
@brief
- @param
+ @param filter A pointer to the relevant tOneZero.
@fn void tOneZero_setB1 (tOneZero* const, float b1)
@brief
- @param
+ @param filter A pointer to the relevant tOneZero.
@fn void tOneZero_setZero (tOneZero* const, float theZero)
@brief
- @param
+ @param filter A pointer to the relevant tOneZero.
@fn void tOneZero_setCoefficients(tOneZero* const, float b0, float b1)
@brief
- @param
+ @param filter A pointer to the relevant tOneZero.
@fn void tOneZero_setGain (tOneZero* const, float gain)
@brief
- @param
+ @param filter A pointer to the relevant tOneZero.
@fn float tOneZero_getPhaseDelay (tOneZero *f, float frequency)
@brief
- @param
+ @param filter A pointer to the relevant tOneZero.

@} */
@@ -320,44 +328,46 @@
@{
@fn void tTwoZero_init (tTwoZero* const, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tTwoZero to the default mempool of a LEAF instance.
+ @param filter A pointer to the tTwoZero to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tTwoZero_initToPool (tTwoZero* const, tMempool* const)
- @brief
- @param
+ @brief Initialize a tTwoZero to a specified mempool.
+ @param filter A pointer to the tTwoZero to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tTwoZero_free (tTwoZero* const)
- @brief
- @param
+ @brief Free a tTwoZero from its mempool.
+ @param filter A pointer to the tTwoZero to free.
@fn float tTwoZero_tick (tTwoZero* const, float input)
@brief
- @param
+ @param filter A pointer to the relevant tTwoZero.
@fn void tTwoZero_setB0 (tTwoZero* const, float b0)
@brief
- @param
+ @param filter A pointer to the relevant tTwoZero.
@fn void tTwoZero_setB1 (tTwoZero* const, float b1)
@brief
- @param
+ @param filter A pointer to the relevant tTwoZero.
@fn void tTwoZero_setB2 (tTwoZero* const, float b2)
@brief
- @param
+ @param filter A pointer to the relevant tTwoZero.
@fn void tTwoZero_setNotch (tTwoZero* const, float frequency, float radius)
@brief
- @param
+ @param filter A pointer to the relevant tTwoZero.
@fn void tTwoZero_setCoefficients(tTwoZero* const, float b0, float b1, float b2)
@brief
- @param
+ @param filter A pointer to the relevant tTwoZero.
@fn void tTwoZero_setGain (tTwoZero* const, float gain)
@brief
- @param
+ @param filter A pointer to the relevant tTwoZero.

@} */
@@ -398,49 +408,51 @@
@{
@fn void tPoleZero_init (tPoleZero* const, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tPoleZero to the default mempool of a LEAF instance.
+ @param filter A pointer to the tPoleZero to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tPoleZero_initToPool (tPoleZero* const, tMempool* const)
- @brief
- @param
+ @brief Initialize a tPoleZero to a specified mempool.
+ @param filter A pointer to the tPoleZero to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tPoleZero_free (tPoleZero* const)
- @brief
- @param
+ @brief Free a tPoleZero from its mempool.
+ @param filter A pointer to the tPoleZero to free.
@fn float tPoleZero_tick (tPoleZero* const, float input)
@brief
- @param
+ @param filter A pointer to the relevant tPoleZero.
@fn void tPoleZero_setB0 (tPoleZero* const, float b0)
@brief
- @param
+ @param filter A pointer to the relevant tPoleZero.
@fn void tPoleZero_setB1 (tPoleZero* const, float b1)
@brief
- @param
+ @param filter A pointer to the relevant tPoleZero.
@fn void tPoleZero_setA1 (tPoleZero* const, float a1)
@brief
- @param
+ @param filter A pointer to the relevant tPoleZero.
@fn void tPoleZero_setCoefficients (tPoleZero* const, float b0, float b1, float a1)
@brief
- @param
+ @param filter A pointer to the relevant tPoleZero.
@fn void tPoleZero_setAllpass (tPoleZero* const, float coeff)
@brief
- @param
+ @param filter A pointer to the relevant tPoleZero.
@fn void tPoleZero_setBlockZero (tPoleZero* const, float thePole)
@brief
- @param
+ @param filter A pointer to the relevant tPoleZero.
@fn void tPoleZero_setGain (tPoleZero* const, float gain)
@brief
- @param
+ @param filter A pointer to the relevant tPoleZero.

@} */
@@ -481,57 +493,59 @@
@{
@fn void tBiQuad_init (tBiQuad* const, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tBiQuad to the default mempool of a LEAF instance.
+ @param filter A pointer to the tBiQuad to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tBiQuad_initToPool (tBiQuad* const, tMempool* const)
- @brief
- @param
+ @brief Initialize a tBiQuad to a specified mempool.
+ @param filter A pointer to the tBiQuad to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tBiQuad_free (tBiQuad* const)
- @brief
- @param
+ @brief Free a tBiQuad from its mempool.
+ @param filter A pointer to the tBiQuad to free.
@fn float tBiQuad_tick (tBiQuad* const, float input)
@brief
- @param
+ @param filter A pointer to the relevant tBiQuad.
@fn void tBiQuad_setB0 (tBiQuad* const, float b0)
@brief
- @param
+ @param filter A pointer to the relevant tBiQuad.
@fn void tBiQuad_setB1 (tBiQuad* const, float b1)
@brief
- @param
+ @param filter A pointer to the relevant tBiQuad.
@fn void tBiQuad_setB2 (tBiQuad* const, float b2)
@brief
- @param
+ @param filter A pointer to the relevant tBiQuad.
@fn void tBiQuad_setA1 (tBiQuad* const, float a1)
@brief
- @param
+ @param filter A pointer to the relevant tBiQuad.
@fn void tBiQuad_setA2 (tBiQuad* const, float a2)
@brief
- @param
+ @param filter A pointer to the relevant tBiQuad.
@fn void tBiQuad_setNotch (tBiQuad* const, float freq, float radius)
@brief
- @param
+ @param filter A pointer to the relevant tBiQuad.
@fn void tBiQuad_setResonance (tBiQuad* const, float freq, float radius, int normalize)
@brief
- @param
+ @param filter A pointer to the relevant tBiQuad.
@fn void tBiQuad_setCoefficients(tBiQuad* const, float b0, float b1, float b2, float a1, float a2)
@brief
- @param
+ @param filter A pointer to the relevant tBiQuad.
@fn void tBiQuad_setGain (tBiQuad* const, float gain)
@brief
- @param
+ @param filter A pointer to the relevant tBiQuad.

@} */
@@ -578,32 +592,34 @@
@{
@fn void tSVF_init (tSVF* const, SVFType type, float freq, float Q, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tSVF to the default mempool of a LEAF instance.
+ @param filter A pointer to the tSVF to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tSVF_initToPool (tSVF* const, SVFType type, float freq, float Q, tMempool* const)
- @brief
- @param
+ @brief Initialize a tSVF to a specified mempool.
+ @param filter A pointer to the tSVF to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tSVF_free (tSVF* const)
- @brief
- @param
+ @brief Free a tSVF from its mempool.
+ @param filter A pointer to the tSVF to free.
@fn float tSVF_tick (tSVF* const, float v0)
-
@brief
- @param
+ @param filter A pointer to the relevant tSVF.
+
@fn void tSVF_setFreq (tSVF* const, float freq)
@brief
- @param
+ @param filter A pointer to the relevant tSVF.
@fn void tSVF_setQ (tSVF* const, float Q)
@brief
- @param
+ @param filter A pointer to the relevant tSVF.
@fn void tSVF_setFreqAndQ (tSVF* const svff, float freq, float Q)
@brief
- @param
+ @param filter A pointer to the relevant tSVF.

@} */
@@ -648,28 +664,30 @@
@{
@fn void tEfficientSVF_init (tEfficientSVF* const, SVFType type, uint16_t input, float Q, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tEfficientSVF to the default mempool of a LEAF instance.
+ @param filter A pointer to the tEfficientSVF to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tEfficientSVF_initToPool (tEfficientSVF* const, SVFType type, uint16_t input, float Q, tMempool* const)
- @brief
- @param
+ @brief Initialize a tEfficientSVF to a specified mempool.
+ @param filter A pointer to the tEfficientSVF to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tEfficientSVF_free (tEfficientSVF* const)
- @brief
- @param
+ @brief Free a tEfficientSVF from its mempool.
+ @param filter A pointer to the tEfficientSVF to free.
@fn float tEfficientSVF_tick (tEfficientSVF* const, float v0)
@brief
- @param
+ @param filter A pointer to the relevant tEfficientSVF.
@fn void tEfficientSVF_setFreq (tEfficientSVF* const, uint16_t controlFreq)
@brief
- @param
+ @param filter A pointer to the relevant tEfficientSVF.
@fn void tEfficientSVF_setQ (tEfficientSVF* const, float Q)
@brief
- @param
+ @param filter A pointer to the relevant tEfficientSVF.

@} */
@@ -702,28 +720,30 @@
@{
@fn void tHighpass_init (tHighpass* const, float freq, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tHighpass to the default mempool of a LEAF instance.
+ @param filter A pointer to the tHighpass to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tHighpass_initToPool (tHighpass* const, float freq, tMempool* const)
- @brief
- @param
+ @brief Initialize a tHighpass to a specified mempool.
+ @param filter A pointer to the tHighpass to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tHighpass_free (tHighpass* const)
- @brief
- @param
+ @brief Free a tHighpass from its mempool.
+ @param filter A pointer to the tHighpass to free.
@fn float tHighpass_tick (tHighpass* const, float x)
@brief
- @param
+ @param filter A pointer to the relevant tHighpass.
@fn void tHighpass_setFreq (tHighpass* const, float freq)
@brief
- @param
+ @param filter A pointer to the relevant tHighpass.
@fn float tHighpass_getFreq (tHighpass* const)
@brief
- @param
+ @param filter A pointer to the relevant tHighpass.

@} */
@@ -754,32 +774,34 @@
@{
@fn void tButterworth_init (tButterworth* const, int N, float f1, float f2, LEAF* const leaf, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tButterworth to the default mempool of a LEAF instance.
+ @param filter A pointer to the tButterworth to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tButterworth_initToPool (tButterworth* const, int N, float f1, float f2, tMempool* const)
- @brief
- @param
+ @brief Initialize a tButterworth to a specified mempool.
+ @param filter A pointer to the tButterworth to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tButterworth_free (tButterworth* const)
- @brief
- @param
+ @brief Free a tButterworth from its mempool.
+ @param filter A pointer to the tButterworth to free.
@fn float tButterworth_tick (tButterworth* const, float input)
@brief
- @param
+ @param filter A pointer to the relevant tButterworth.
@fn void tButterworth_setF1 (tButterworth* const, float in)
@brief
- @param
+ @param filter A pointer to the relevant tButterworth.
@fn void tButterworth_setF2 (tButterworth* const, float in)
@brief
- @param
+ @param filter A pointer to the relevant tButterworth.
@fn void tButterworth_setFreqs (tButterworth* const, float f1, float f2)
@brief
- @param
+ @param filter A pointer to the relevant tButterworth.

@} */
@@ -819,20 +841,22 @@
@{
@fn void tFIR_init (tFIR* const, float* coeffs, int numTaps, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tFIR to the default mempool of a LEAF instance.
+ @param filter A pointer to the tFIR to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tFIR_initToPool (tFIR* const, float* coeffs, int numTaps, tMempool* const)
- @brief
- @param
+ @brief Initialize a tFIR to a specified mempool.
+ @param filter A pointer to the tFIR to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tFIR_free (tFIR* const)
- @brief
- @param
+ @brief Free a tFIR from its mempool.
+ @param filter A pointer to the tFIR to free.
@fn float tFIR_tick (tFIR* const, float input)
@brief
- @param
+ @param filter A pointer to the relevant tFIR.

@} */
@@ -863,20 +887,22 @@
@{
@fn void tMedianFilter_init (tMedianFilter* const, int size, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tMedianFilter to the default mempool of a LEAF instance.
+ @param filter A pointer to the tMedianFilter to initialize.
+ @param leaf A pointer to the leaf instance.f
@fn void tMedianFilter_initToPool (tMedianFilter* const, int size, tMempool* const)
- @brief
- @param
+ @brief Initialize a tMedianFilter to a specified mempool.
+ @param filter A pointer to the tMedianFilter to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tMedianFilter_free (tMedianFilter* const)
- @brief
- @param
+ @brief Free a tMedianFilter from its mempool.
+ @param filter A pointer to the tMedianFilter to free.
@fn float tMedianFilter_tick (tMedianFilter* const, float input)
@brief
- @param
+ @param filter A pointer to the relevant tMedianFilter.

@} */
@@ -909,54 +935,58 @@
@{
@fn void tVZFilter_init (tVZFilter* const, VZFilterType type, float freq, float Q, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tVZFilter to the default mempool of a LEAF instance.
+ @param filter A pointer to the tVZFilter to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tVZFilter_initToPool (tVZFilter* const, VZFilterType type, float freq, float Q, tMempool* const)
- @brief
- @param
+ @brief Initialize a tVZFilter to a specified mempool.
+ @param filter A pointer to the tVZFilter to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tVZFilter_free (tVZFilter* const)
- @brief
- @param
+ @brief Free a tVZFilter from its mempool.
+ @param filter A pointer to the tVZFilter to free.
@fn void tVZFilter_setSampleRate (tVZFilter* const, float sampleRate)
@brief
- @param
+ @param filter A pointer to the relevant tVZFilter.
@fn float tVZFilter_tick (tVZFilter* const, float input)
@brief
- @param
+ @param filter A pointer to the relevant tVZFilter.
@fn float tVZFilter_tickEfficient (tVZFilter* const vf, float in)
@brief
- @param
+ @param filter A pointer to the relevant tVZFilter.
@fn void tVZFilter_calcCoeffs (tVZFilter* const)
@brief
- @param
+ @param filter A pointer to the relevant tVZFilter.
@fn void tVZFilter_setBandwidth (tVZFilter* const, float bandWidth)
@brief
- @param
+ @param filter A pointer to the relevant tVZFilter.
@fn void tVZFilter_setFreq (tVZFilter* const, float freq)
@brief
- @param
+ @param filter A pointer to the relevant tVZFilter.
@fn void tVZFilter_setFreqAndBandwidth (tVZFilter* const vf, float freq, float bw)
@brief
- @param
+ @param filter A pointer to the relevant tVZFilter.
+
@fn void tVZFilter_setGain (tVZFilter* const, float gain)
@brief
- @param
+ @param filter A pointer to the relevant tVZFilter.
+
@fn void tVZFilter_setType (tVZFilter* const, VZFilterType type)
@brief
- @param
+ @param filter A pointer to the relevant tVZFilter.
@fn float tVZFilter_BandwidthToR (tVZFilter* const vf, float B)
@brief
- @param
+ @param filter A pointer to the relevant tVZFilter.

@} */
@@ -1030,28 +1060,30 @@
@{
@fn void tDiodeFilter_init (tDiodeFilter* const, float freq, float Q, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tDiodeFilter to the default mempool of a LEAF instance.
+ @param filter A pointer to the tDiodeFilter to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tDiodeFilter_initToPool (tDiodeFilter* const, float freq, float Q, tMempool* const)
- @brief
- @param
+ @brief Initialize a tDiodeFilter to a specified mempool.
+ @param filter A pointer to the tDiodeFilter to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tDiodeFilter_free (tDiodeFilter* const)
- @brief
- @param
+ @brief Free a tDiodeFilter from its mempool.
+ @param filter A pointer to the tDiodeFilter to free.
@fn float tDiodeFilter_tick (tDiodeFilter* const, float input)
@brief
- @param
+ @param filter A pointer to the relevant tDiodeFilter.
@fn void tDiodeFilter_setFreq (tDiodeFilter* const vf, float cutoff)
@brief
- @param
+ @param filter A pointer to the relevant tDiodeFilter.
@fn void tDiodeFilter_setQ (tDiodeFilter* const vf, float resonance)
@brief
- @param
+ @param filter A pointer to the relevant tDiodeFilter.

@} */
--- a/leaf/Inc/leaf-global.h
+++ b/leaf/Inc/leaf-global.h
@@ -19,7 +19,7 @@
/*!
* @ingroup leaf
- * @brief The struct of the global LEAF instance `leaf`. Contains global variables and settings.
+ * @brief Struct for an instance of LEAF.
*/
struct LEAF
--- a/leaf/Inc/leaf-instruments.h
+++ b/leaf/Inc/leaf-instruments.h
@@ -38,48 +38,50 @@
@{
@fn void t808Cowbell_init (t808Cowbell* const, int useStick, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a t808Cowbell to the default mempool of a LEAF instance.
+ @param cowbell A pointer to the t808Cowbell to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void t808Cowbell_initToPool (t808Cowbell* const, int useStick, tMempool* const)
- @brief
- @param
+ @brief Initialize a t808Cowbell to a specified mempool.
+ @param cowbell A pointer to the t808Cowbell to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void t808Cowbell_free (t808Cowbell* const)
- @brief
- @param
+ @brief Free a t808Cowbell from its mempool.
+ @param cowbell A pointer to the t808Cowbell to free.
@fn float t808Cowbell_tick (t808Cowbell* const)
@brief
- @param
+ @param cowbell A pointer to the relevant t808Cowbell.
@fn void t808Cowbell_on (t808Cowbell* const, float vel)
@brief
- @param
+ @param cowbell A pointer to the relevant t808Cowbell.
@fn void t808Cowbell_setDecay (t808Cowbell* const, float decay)
@brief
- @param
+ @param cowbell A pointer to the relevant t808Cowbell.
@fn void t808Cowbell_setHighpassFreq (t808Cowbell* const, float freq)
@brief
- @param
+ @param cowbell A pointer to the relevant t808Cowbell.
@fn void t808Cowbell_setBandpassFreq (t808Cowbell* const, float freq)
@brief
- @param
+ @param cowbell A pointer to the relevant t808Cowbell.
@fn void t808Cowbell_setFreq (t808Cowbell* const, float freq)
@brief
- @param
+ @param cowbell A pointer to the relevant t808Cowbell.
@fn void t808Cowbell_setOscMix (t808Cowbell* const, float oscMix)
@brief
- @param
+ @param cowbell A pointer to the relevant t808Cowbell.
@fn void t808Cowbell_setStick (t808Cowbell* const, int useStick)
@brief
- @param
+ @param cowbell A pointer to the relevant t808Cowbell.
@} */
@@ -123,64 +125,66 @@
@{
@fn void t808Hihat_init (t808Hihat* const, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a t808Hihat to the default mempool of a LEAF instance.
+ @param hihat A pointer to the t808Hihat to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void t808Hihat_initToPool (t808Hihat* const, tMempool* const)
- @brief
- @param
+ @brief Initialize a t808Hihat to a specified mempool.
+ @param hihat A pointer to the t808Hihat to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void t808Hihat_free (t808Hihat* const)
- @brief
- @param
+ @brief Free a t808Hihat from its mempool.
+ @param hihat A pointer to the t808Hihat to free.
@fn float t808Hihat_tick (t808Hihat* const)
@brief
- @param
+ @param hihat A pointer to the relevant t808Hihat.
@fn void t808Hihat_on (t808Hihat* const, float vel)
@brief
- @param
+ @param hihat A pointer to the relevant t808Hihat.
@fn void t808Hihat_setOscNoiseMix (t808Hihat* const, float oscNoiseMix)
@brief
- @param
+ @param hihat A pointer to the relevant t808Hihat.
@fn void t808Hihat_setDecay (t808Hihat* const, float decay)
@brief
- @param
+ @param hihat A pointer to the relevant t808Hihat.
@fn void t808Hihat_setHighpassFreq (t808Hihat* const, float freq)
@brief
- @param
+ @param hihat A pointer to the relevant t808Hihat.
@fn void t808Hihat_setOscBandpassFreq (t808Hihat* const, float freq)
@brief
- @param
+ @param hihat A pointer to the relevant t808Hihat.
@fn void t808Hihat_setOscBandpassQ (t808Hihat* const hihat, float Q)
@brief
- @param
+ @param hihat A pointer to the relevant t808Hihat.
@fn void t808Hihat_setStickBandPassFreq (t808Hihat* const, float freq)
@brief
- @param
+ @param hihat A pointer to the relevant t808Hihat.
@fn void t808Hihat_setStickBandPassQ (t808Hihat* const hihat, float Q)
@brief
- @param
+ @param hihat A pointer to the relevant t808Hihat.
@fn void t808Hihat_setOscFreq (t808Hihat* const, float freq)
@brief
- @param
+ @param hihat A pointer to the relevant t808Hihat.
@fn void t808Hihat_setStretch (t808Hihat* const hihat, float stretch)
@brief
- @param
+ @param hihat A pointer to the relevant t808Hihat.
@fn void t808Hihat_setFM (t808Hihat* const hihat, float FM_amount)
@brief
- @param
+ @param hihat A pointer to the relevant t808Hihat.
@} */
@@ -233,56 +237,58 @@
@{
@fn void t808Snare_init (t808Snare* const, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a t808Snare to the default mempool of a LEAF instance.
+ @param snare A pointer to the t808Snare to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void t808Snare_initToPool (t808Snare* const, tMempool* const)
- @brief
- @param
+ @brief Initialize a t808Snare to a specified mempool.
+ @param snare A pointer to the t808Snare to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void t808Snare_free (t808Snare* const)
- @brief
- @param
+ @brief Free a t808Snare from its mempool.
+ @param snare A pointer to the t808Snare to free.
@fn float t808Snare_tick (t808Snare* const)
@brief
- @param
+ @param snare A pointer to the relevant t808Snare.
@fn void t808Snare_on (t808Snare* const, float vel)
@brief
- @param
+ @param snare A pointer to the relevant t808Snare.
@fn void t808Snare_setTone1Freq (t808Snare* const, float freq)
@brief
- @param
+ @param snare A pointer to the relevant t808Snare.
@fn void t808Snare_setTone2Freq (t808Snare* const, float freq)
@brief
- @param
+ @param snare A pointer to the relevant t808Snare.
@fn void t808Snare_setTone1Decay (t808Snare* const, float decay)
@brief
- @param
+ @param snare A pointer to the relevant t808Snare.
@fn void t808Snare_setTone2Decay (t808Snare* const, float decay)
@brief
- @param
+ @param snare A pointer to the relevant t808Snare.
@fn void t808Snare_setNoiseDecay (t808Snare* const, float decay)
@brief
- @param
+ @param snare A pointer to the relevant t808Snare.
@fn void t808Snare_setToneNoiseMix (t808Snare* const, float toneNoiseMix)
@brief
- @param
+ @param snare A pointer to the relevant t808Snare.
@fn void t808Snare_setNoiseFilterFreq (t808Snare* const, float noiseFilterFreq)
@brief
- @param
+ @param snare A pointer to the relevant t808Snare.
@fn void t808Snare_setNoiseFilterQ (t808Snare* const, float noiseFilterQ)
@brief
- @param
+ @param snare A pointer to the relevant t808Snare.
@} */
@@ -337,56 +343,58 @@
@{
@fn void t808Kick_init (t808Kick* const, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a t808Kick to the default mempool of a LEAF instance.
+ @param kick A pointer to the t808Kick to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void t808Kick_initToPool (t808Kick* const, tMempool* const)
- @brief
- @param
+ @brief Initialize a t808Kick to a specified mempool.
+ @param kick A pointer to the t808Kick to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void t808Kick_free (t808Kick* const)
- @brief
- @param
+ @brief Free a t808Kick from its mempool.
+ @param kick A pointer to the t808Kick to free.
@fn float t808Kick_tick (t808Kick* const)
@brief
- @param
+ @param kick A pointer to the relevant t808Kick.
@fn void t808Kick_on (t808Kick* const, float vel)
@brief
- @param
+ @param kick A pointer to the relevant t808Kick.
@fn void t808Kick_setToneFreq (t808Kick* const, float freq)
@brief
- @param
+ @param kick A pointer to the relevant t808Kick.
@fn void t808Kick_setToneDecay (t808Kick* const, float decay)
@brief
- @param
+ @param kick A pointer to the relevant t808Kick.
@fn void t808Kick_setNoiseDecay (t808Kick* const, float decay)
@brief
- @param
+ @param kick A pointer to the relevant t808Kick.
@fn void t808Kick_setSighAmount (t808Kick* const, float sigh)
@brief
- @param
+ @param kick A pointer to the relevant t808Kick.
@fn void t808Kick_setChirpAmount (t808Kick* const, float chirp)
@brief
- @param
+ @param kick A pointer to the relevant t808Kick.
@fn void t808Kick_setToneNoiseMix (t808Kick* const, float toneNoiseMix)
@brief
- @param
+ @param kick A pointer to the relevant t808Kick.
@fn void t808Kick_setNoiseFilterFreq (t808Kick* const, float noiseFilterFreq)
@brief
- @param
+ @param kick A pointer to the relevant t808Kick.
@fn void t808Kick_setNoiseFilterQ (t808Kick* const, float noiseFilterQ)
@brief
- @param
+ @param kick A pointer to the relevant t808Kick.
@} */
--- a/leaf/Inc/leaf-mempool.h
+++ b/leaf/Inc/leaf-mempool.h
@@ -89,11 +89,12 @@
mpool_node_t* head; // first node of memory pool free list
};
- //! Initialize a tMempool for a given memory location and size to the default LEAF mempool.
+ //! Initialize a tMempool for a given memory location and size to the default mempool of a LEAF instance.
/*!
- @param pool A pointer to the tMempool to be initialized.
+ @param pool A pointer to the tMempool to initialize.
@param memory A pointer to the chunk of memory to be used as a mempool.
@param size The size of the chunk of memory to be used as a mempool.
+ @param leaf A pointer to the leaf instance.
*/
void tMempool_init (tMempool* const pool, char* memory, size_t size, LEAF* const leaf);
@@ -100,7 +101,7 @@
//! Free a tMempool from its mempool.
/*!
- @param pool A pointer to the tMempool to be freed.
+ @param pool A pointer to the tMempool to free.
*/
void tMempool_free (tMempool* const pool);
@@ -107,12 +108,12 @@
//! Initialize a tMempool for a given memory location and size to a specified mempool.
/*!
- @param pool A pointer to the tMempool to be initialized.
+ @param pool A pointer to the tMempool to initialize.
@param memory A pointer to the chunk of memory to be used as a mempool.
@param size The size of the chuck of memory to be used as a mempool.
- @param poolTo A pointer to the tMempool to which a tMempool should be initialized.
+ @param poolTo A pointer to the tMempool to which this tMempool should be initialized.
*/
- void tMempool_initToPool (tMempool* const mp, char* memory, size_t size, tMempool* const mem, LEAF* const leaf);
+ void tMempool_initToPool (tMempool* const mp, char* memory, size_t size, tMempool* const mem);
/*!
@} */
--- a/leaf/Inc/leaf-midi.h
+++ b/leaf/Inc/leaf-midi.h
@@ -39,17 +39,18 @@
@{
@fn void tStack_init (tStack* const stack, LEAF* const leaf)
- @brief Initialize a tStack to the default LEAF mempool.
- @param stack A pointer to the tStack to be initialized.
+ @brief Initialize a tStack to the default mempool of a LEAF instance.
+ @param stack A pointer to the tStack to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tStack_initToPool (tStack* const stack, tMempool* const mempool)
@brief Initialize a tStack to a specified mempool.
- @param stack A pointer to the tStack to be initialized.
- @param mempool A pointer to the tMempool to which the tStack should be initialized.
+ @param stack A pointer to the tStack to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tStack_free (tStack* const stack)
@brief Free a tStack from its mempool.
- @param stack A pointer to the tStack to be freed.
+ @param stack A pointer to the tStack to free.
@fn void tStack_setCapacity (tStack* const stack, uint16_t cap)
@brief Set the capacity of the stack.
@@ -140,18 +141,19 @@
@{
@fn void tPoly_init (tPoly* const poly, int maxNumVoices, LEAF* const leaf)
- @brief Initialize a tPoly to the default LEAF mempool.
- @param poly A pointer to the tPoly to be initialized.
+ @brief Initialize a tPoly to the default mempool of a LEAF instance.
+ @param poly A pointer to the tPoly to initialize.
@param maxNumVoices The maximum number of voices this tPoly can handle at once.
+ @param leaf A pointer to the leaf instance.
@fn void tPoly_initToPool (tPoly* const poly, int maxNumVoices, tMempool* const pool)
@brief Initialize a tPoly to a specified mempool.
- @param poly A pointer to the tPoly to be initialized.
- @param pool A pointer to the tMempool to which the tPoly should be initialized.
+ @param poly A pointer to the tPoly to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tPoly_free (tPoly* const poly)
@brief Free a tPoly from its mempool.
- @param poly A pointer to the tPoly to be freed.
+ @param poly A pointer to the tPoly to free.
@fn int tPoly_noteOn (tPoly* const poly, int note, uint8_t vel)
@brief Add a note with a given velocity to the poly handler.
@@ -317,18 +319,19 @@
@{
@fn void tSimplePoly_init (tSimplePoly* const poly, int maxNumVoices, LEAF* const leaf)
- @brief Initialize a tSimplePoly to the default LEAF mempool.
- @param poly A pointer to the tSimplePoly to be initialized.
+ @brief Initialize a tSimplePoly to the default mempool of a LEAF instance.
+ @param poly A pointer to the tSimplePoly to initialize.
@param maxNumVoices The maximum number of voices this tSimplePoly can handle at once.
+ @param leaf A pointer to the leaf instance.
@fn void tSimplePoly_initToPool (tSimplePoly* const poly, int maxNumVoices, tMempool* const pool)
@brief Initialize a tSimplePoly to a specified mempool.
- @param poly A pointer to the tSimplePoly to be initialized.
- @param pool A pointer to the tMempool to which the tSimplePoly should be initialized.
+ @param poly A pointer to the tSimplePoly to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tSimplePoly_free (tSimplePoly* const poly)
@brief Free a tSimplePoly from its mempool.
- @param poly A pointer to the tSimplePoly to be freed.
+ @param poly A pointer to the tSimplePoly to free.
@fn int tSimplePoly_noteOn (tSimplePoly* const poly, int note, uint8_t vel)
@brief Add a note with a given velocity to the poly handler.
--- a/leaf/Inc/leaf-oscillators.h
+++ b/leaf/Inc/leaf-oscillators.h
@@ -34,22 +34,23 @@
@brief A general wavetable oscillator.
@{
- @fn void tTable_init (tTable* const osc, float* table, int size, LEAF* const leaf)
- @brief Initialize a tTable to the default LEAF mempool.
- @param osc A pointer to the tTable to be initialized.
+ @fn void tTable_init (tTable* const osc, float* table, int size, LEAF* const leaf)
+ @brief Initialize a tTable to the default mempool of a LEAF instance.
+ @param osc A pointer to the tTable to initialize.
@param table A pointer to the wave table data.
@param size The number of samples in the wave table.
+ @param leaf A pointer to the leaf instance.
@fn void tTable_initToPool (tTable* const osc, float* table, int size, tMempool* const mempool)
@brief Initialize a tTable to a specified mempool.
- @param osc A pointer to the tTable to be initialized.
+ @param osc A pointer to the tTable to initialize.
@param table A pointer to the wave table data.
@param size The number of samples in the wave table.
- @param mempool A pointer to the tMempool to which the tTable should be initialized.
+ @param mempool A pointer to the tMempool to use.
@fn void tTable_free (tTable* const osc)
@brief Free a tTable from its mempool.
- @param osc A pointer to the tTable to be freed.
+ @param osc A pointer to the tTable to free.
@fn float tTable_tick (tTable* const osc)
@brief Tick a tTable oscillator.
@@ -92,17 +93,18 @@
@{
@fn void tCycle_init (tCycle* const osc, LEAF* const leaf)
- @brief Initialize a tCycle to the default LEAF mempool.
- @param osc A pointer to the tCycle to be initialized.
+ @brief Initialize a tCycle to the default mempool of a LEAF instance.
+ @param osc A pointer to the tCycle to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tCycle_initToPool (tCycle* const osc, tMempool* const mempool)
@brief Initialize a tCycle to a specified mempool.
- @param osc A pointer to the tCycle to be initialized.
- @param mempool A pointer to the tMempool to which the tCycle should be initialized.
+ @param osc A pointer to the tCycle to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tCycle_free (tCycle* const osc)
@brief Free a tCycle from its mempool.
- @param osc A pointer to the tCycle to be freed.
+ @param osc A pointer to the tCycle to free.
@fn float tCycle_tick (tCycle* const osc)
@brief Tick a tCycle oscillator.
@@ -144,17 +146,18 @@
@{
@fn void tTriangle_init (tTriangle* const osc, LEAF* const leaf)
- @brief Initialize a tTriangle to the default LEAF mempool.
- @param osc A pointer to the tTriangle to be initialized.
+ @brief Initialize a tTriangle to the default mempool of a LEAF instance.
+ @param osc A pointer to the tTriangle to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tTriangle_initToPool (tTriangle* const osc, tMempool* const mempool)
@brief Initialize a tTriangle to a specified mempool.
- @param osc A pointer to the tTriangle to be initialized.
- @param mempool A pointer to the tMempool to which the tTriangle should be initialized.
+ @param osc A pointer to the tTriangle to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tTriangle_free (tTriangle* const osc)
@brief Free a tTriangle from its mempool.
- @param osc A pointer to the tTriangle to be freed.
+ @param osc A pointer to the tTriangle to free.
@fn float tTriangle_tick (tTriangle* const osc)
@brief Tick a tTriangle oscillator.
@@ -198,17 +201,18 @@
@{
@fn void tSquare_init (tSquare* const osc, LEAF* const leaf)
- @brief Initialize a tSquare to the default LEAF mempool.
- @param osc A pointer to the tSquare to be initialized.
+ @brief Initialize a tSquare to the default mempool of a LEAF instance.
+ @param osc A pointer to the tSquare to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tSquare_initToPool (tSquare* const osc, tMempool* const mempool)
@brief Initialize a tSquare to a specified mempool.
- @param osc A pointer to the tSquare to be initialized.
- @param mempool A pointer to the tMempool to which the tSquare should be initialized.
+ @param osc A pointer to the tSquare to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tSquare_free (tSquare* const osc)
@brief Free a tSquare from its mempool.
- @param osc A pointer to the tSquare to be freed.
+ @param osc A pointer to the tSquare to free.
@fn float tSquare_tick (tSquare* const osc)
@brief Tick a tSquare oscillator.
@@ -254,17 +258,18 @@
@{
@fn void tSawtooth_init (tSawtooth* const osc, LEAF* const leaf)
- @brief Initialize a tSawtooth to the default LEAF mempool.
- @param osc A pointer to the tSawtooth to be initialized.
+ @brief Initialize a tSawtooth to the default mempool of a LEAF instance.
+ @param osc A pointer to the tSawtooth to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tSawtooth_initToPool (tSawtooth* const osc, tMempool* const mempool)
@brief Initialize a tSawtooth to a specified mempool.
- @param osc A pointer to the tSawtooth to be initialized.
- @param mempool A pointer to the tMempool to which the tSawtooth should be initialized.
+ @param osc A pointer to the tSawtooth to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tSawtooth_free (tSawtooth* const osc)
@brief Free a tSawtooth from its mempool.
- @param osc A pointer to the tSawtooth to be freed.
+ @param osc A pointer to the tSawtooth to free.
@fn float tSawtooth_tick (tSawtooth* const osc)
@brief Tick a tSawtooth oscillator.
@@ -307,28 +312,30 @@
@{
@fn void tTri_init (tTri* const osc, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tTri to the default mempool of a LEAF instance.
+ @param osc A pointer to the tTri to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tTri_initToPool (tTri* const osc, tMempool* const mempool)
- @brief
- @param
+ @brief Initialize a tTri to a specified mempool.
+ @param osc A pointer to the tTri to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tTri_free (tTri* const osc)
- @brief
- @param
+ @brief Free a tTri from its mempool.
+ @param osc A pointer to the tTri to free.
@fn float tTri_tick (tTri* const osc)
@brief
- @param
+ @param osc A pointer to the relevant tTri.
@fn void tTri_setFreq (tTri* const osc, float freq)
@brief
- @param
+ @param osc A pointer to the relevant tTri.
@fn void tTri_setSkew (tTri* const osc, float skew)
@brief
- @param
+ @param osc A pointer to the relevant tTri.

@} */
@@ -361,28 +368,30 @@
@{
@fn void tPulse_init (tPulse* const osc, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tPulse to the default mempool of a LEAF instance.
+ @param osc A pointer to the tPulse to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tPulse_initToPool (tPulse* const osc, tMempool* const)
- @brief
- @param
+ @brief Initialize a tPulse to a specified mempool.
+ @param osc A pointer to the tPulse to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tPulse_free (tPulse* const osc)
- @brief
- @param
+ @brief Free a tPulse from its mempool.
+ @param osc A pointer to the tPulse to free.
@fn float tPulse_tick (tPulse* const osc)
@brief
- @param
+ @param osc A pointer to the relevant tPulse.
@fn void tPulse_setFreq (tPulse* const osc, float freq)
@brief
- @param
+ @param osc A pointer to the relevant tPulse.
@fn void tPulse_setWidth (tPulse* const osc, float width)
@brief
- @param
+ @param osc A pointer to the relevant tPulse.

@} */
@@ -414,24 +423,26 @@
@{
@fn void tSaw_init (tSaw* const osc, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tSaw to the default mempool of a LEAF instance.
+ @param osc A pointer to the tSaw to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tSaw_initToPool (tSaw* const osc, tMempool* const mempool)
- @brief
- @param
+ @brief Initialize a tSaw to a specified mempool.
+ @param osc A pointer to the tSaw to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tSaw_free (tSaw* const osc)
- @brief
- @param
+ @brief Free a tSaw from its mempool.
+ @param osc A pointer to the tSaw to free.
@fn float tSaw_tick (tSaw* const osc)
@brief
- @param
+ @param osc A pointer to the relevant tSaw.
@fn void tSaw_setFreq (tSaw* const osc, float freq)
@brief
- @param
+ @param osc A pointer to the relevant tSaw.

@} */
@@ -461,24 +472,26 @@
@{
@fn void tPhasor_init (tPhasor* const osc, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tPhasor to the default mempool of a LEAF instance.
+ @param osc A pointer to the tPhasor to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tPhasor_initToPool (tPhasor* const osc, tMempool* const)
- @brief
- @param
+ @brief Initialize a tPhasor to a specified mempool.
+ @param osc A pointer to the tPhasor to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tPhasor_free (tPhasor* const osc)
- @brief
- @param
+ @brief Free a tPhasor from its mempool.
+ @param osc A pointer to the tPhasor to free.
@fn float tPhasor_tick (tPhasor* const osc)
@brief
- @param
+ @param osc A pointer to the relevant tPhasor.
@fn void tPhasor_setFreq (tPhasor* const osc, float freq)
@brief
- @param
+ @param osc A pointer to the relevant tPhasor.

@} */
@@ -509,20 +522,22 @@
@{
@fn void tNoise_init (tNoise* const noise, NoiseType type, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tNoise to the default mempool of a LEAF instance.
+ @param noise A pointer to the tNoise to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tNoise_initToPool (tNoise* const noise, NoiseType type, tMempool* const)
- @brief
- @param
+ @brief Initialize a tNoise to a specified mempool.
+ @param noise A pointer to the tNoise to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tNoise_free (tNoise* const noise)
- @brief
- @param
+ @brief Free a tNoise from its mempool.
+ @param noise A pointer to the tNoise to free.
@fn float tNoise_tick (tNoise* const noise)
@brief
- @param
+ @param noise A pointer to the relevant tNoise.
*/
/* tNoise. WhiteNoise, PinkNoise. */
@@ -566,17 +581,18 @@
@{
@fn void tNeuron_init (tNeuron* const neuron, LEAF* const leaf)
- @brief Initialize a tNeuron to the default LEAF mempool.
- @param neuron A pointer to the tNeuron to be initialized.
+ @brief Initialize a tNeuron to the default mempool of a LEAF instance.
+ @param neuron A pointer to the tNeuron to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tNeuron_initToPool (tNeuron* const neuron, tMempool* const mempool)
@brief Initialize a tNeuron to a specified mempool.
- @param neuron A pointer to the tNeuron to be initialized.
- @param mempool A pointer to the tMempool to which the tNeuron should be initialized.
+ @param neuron A pointer to the tNeuron to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tNeuron_free (tNeuron* const neuron)
@brief Free a tNeuron from its mempool.
- @param neuron A pointer to the tNeuron to be freed.
+ @param neuron A pointer to the tNeuron to free.
@fn void tNeuron_reset (tNeuron* const neuron)
@brief Reset the neuron model.
@@ -704,36 +720,36 @@
@{
@fn void tMBPulse_init(tMBPulse* const osc, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tMBPulse to the default mempool of a LEAF instance.
+ @param osc A pointer to the tMBPulse to initialize.
@fn void tMBPulse_initToPool(tMBPulse* const osc, tMempool* const mempool)
- @brief
- @param
+ @brief Initialize a tMBPulse to a specified mempool.
+ @param osc A pointer to the tMBPulse to initialize.
@fn void tMBPulse_free(tMBPulse* const osc)
- @brief
- @param
+ @brief Free a tMBPulse from its mempool.
+ @param osc A pointer to the tMBPulse to free.
@fn float tMBPulse_tick(tMBPulse* const osc)
@brief
- @param
+ @param osc A pointer to the relevant tMBPulse.
@fn void tMBPulse_setFreq(tMBPulse* const osc, float f)
@brief
- @param
+ @param osc A pointer to the relevant tMBPulse.
@fn void tMBPulse_setWidth(tMBPulse* const osc, float w)
@brief
- @param
+ @param osc A pointer to the relevant tMBPulse.
@fn void tMBPulse_syncIn(tMBPulse* const osc, float sync)
@brief
- @param
+ @param osc A pointer to the relevant tMBPulse.
@fn float tMBPulse_syncOut(tMBPulse* const osc)
@brief
- @param
+ @param osc A pointer to the relevant tMBPulse.

@} */
@@ -773,36 +789,36 @@
@{
@fn void tMBTriangle_init(tMBTriangle* const osc, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tMBTriangle to the default mempool of a LEAF instance.
+ @param osc A pointer to the tMBTriangle to initialize.
@fn void tMBTriangle_initToPool(tMBTriangle* const osc, tMempool* const mempool)
- @brief
- @param
+ @brief Initialize a tMBTriangle to a specified mempool.
+ @param osc A pointer to the tMBTriangle to initialize.
@fn void tMBTriangle_free(tMBTriangle* const osc)
- @brief
- @param
+ @brief Free a tMBTriangle from its mempool.
+ @param osc A pointer to the tMBTriangle to free.
@fn float tMBTriangle_tick(tMBTriangle* const osc)
@brief
- @param
+ @param osc A pointer to the relevant tMBTriangle.
@fn void tMBTriangle_setFreq(tMBTriangle* const osc, float f)
@brief
- @param
+ @param osc A pointer to the relevant tMBTriangle.
@fn void tMBTriangle_setWidth(tMBTriangle* const osc, float w)
@brief
- @param
+ @param osc A pointer to the relevant tMBTriangle.
@fn void tMBTriangle_syncIn(tMBTriangle* const osc, float sync)
@brief
- @param
+ @param osc A pointer to the relevant tMBTriangle.
@fn float tMBTriangle_syncOut(tMBTriangle* const osc)
@brief
- @param
+ @param osc A pointer to the relevant tMBTriangle.

@} */
@@ -843,32 +859,32 @@
@{
@fn void tMBSaw_init(tMBSaw* const osc, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tMBSaw to the default mempool of a LEAF instance.
+ @param osc A pointer to the tMBSaw to initialize.
@fn void tMBSaw_initToPool(tMBSaw* const osc, tMempool* const mempool)
- @brief
- @param
+ @brief Initialize a tMBSaw to a specified mempool.
+ @param osc A pointer to the tMBSaw to initialize.
@fn void tMBSaw_free(tMBSaw* const osc)
- @brief
- @param
+ @brief Free a tMBSaw from its mempool.
+ @param osc A pointer to the tMBSaw to free.
@fn float tMBSaw_tick(tMBSaw* const osc)
@brief
- @param
+ @param osc A pointer to the relevant tMBSaw.
@fn void tMBSaw_setFreq(tMBSaw* const osc, float f)
@brief
- @param
+ @param osc A pointer to the relevant tMBSaw.
@fn void tMBSaw_syncIn(tMBSaw* const osc, float sync)
@brief
- @param
+ @param osc A pointer to the relevant tMBSaw.
@fn float tMBSaw_syncOut(tMBSaw* const osc)
@brief
- @param
+ @param osc A pointer to the relevant tMBSaw.

@} */
--- a/leaf/Inc/leaf-physical.h
+++ b/leaf/Inc/leaf-physical.h
@@ -43,44 +43,46 @@
@{
@fn void tPluck_init (tPluck* const, float lowestFrequency, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tPluck to the default mempool of a LEAF instance.
+ @param string A pointer to the tPluck to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tPluck_initToPool (tPluck* const, float lowestFrequency, tMempool* const)
- @brief
- @param
+ @brief Initialize a tPluck to a specified mempool.
+ @param string A pointer to the tPluck to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tPluck_free (tPluck* const)
- @brief
- @param
+ @brief Free a tPluck from its mempool.
+ @param string A pointer to the tPluck to free.
@fn float tPluck_tick (tPluck* const)
@brief
- @param
+ @param string A pointer to the relevant tPluck.
@fn void tPluck_pluck (tPluck* const, float amplitude)
@brief Pluck the string.
- @param
+ @param string A pointer to the relevant tPluck.
@fn void tPluck_noteOn (tPluck* const, float frequency, float amplitude )
@brief Start a note with the given frequency and amplitude.
- @param
+ @param string A pointer to the relevant tPluck.
@fn void tPluck_noteOff (tPluck* const, float amplitude )
@brief Stop a note with the given amplitude (speed of decay)
- @param
+ @param string A pointer to the relevant tPluck.
@fn void tPluck_setFrequency (tPluck* const, float frequency )
@brief Set instrument parameters for a particular frequency.
- @param
+ @param string A pointer to the relevant tPluck.
@fn void tPluck_controlChange (tPluck* const, int number, float value)
@brief Perform the control change specified by \e number and \e value (0.0 - 128.0).
- @param
+ @param string A pointer to the relevant tPluck.
@fn float tPluck_getLastOut (tPluck* const)
@brief
- @param
+ @param string A pointer to the relevant tPluck.
@} */
@@ -124,56 +126,58 @@
@{
@fn void tKarplusStrong_init (tKarplusStrong* const, float lowestFrequency, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tKarplusStrong to the default mempool of a LEAF instance.
+ @param string A pointer to the tKarplusStrong to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tKarplusStrong_initToPool (tKarplusStrong* const, float lowestFrequency, tMempool* const)
- @brief
- @param
+ @brief Initialize a tKarplusStrong to a specified mempool.
+ @param string A pointer to the tKarplusStrong to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tKarplusStrong_free (tKarplusStrong* const)
- @brief
- @param
+ @brief Free a tKarplusStrong from its mempool.
+ @param string A pointer to the tKarplusStrong to free.
@fn float tKarplusStrong_tick (tKarplusStrong* const)
@brief
- @param
+ @param string A pointer to the relevant tKarplusStrong.
@fn void tKarplusStrong_pluck (tKarplusStrong* const, float amplitude)
@brief Pluck the string.
- @param
+ @param string A pointer to the relevant tKarplusStrong.
@fn void tKarplusStrong_noteOn (tKarplusStrong* const, float frequency, float amplitude)
@brief Start a note with the given frequency and amplitude.
- @param
+ @param string A pointer to the relevant tKarplusStrong.
@fn void tKarplusStrong_noteOff (tKarplusStrong* const, float amplitude)
@brief Stop a note with the given amplitude (speed of decay).
- @param
+ @param string A pointer to the relevant tKarplusStrong.
@fn void tKarplusStrong_setFrequency (tKarplusStrong* const, float frequency)
@brief Set instrument parameters for a particular frequency.
- @param
+ @param string A pointer to the relevant tKarplusStrong.
@fn void tKarplusStrong_controlChange (tKarplusStrong* const, SKControlType type, float value)
@brief Perform the control change specified by \e number and \e value (0.0 - 128.0). Use SKPickPosition, SKStringDamping, or SKDetune for type.
- @param
+ @param string A pointer to the relevant tKarplusStrong.
@fn void tKarplusStrong_setStretch (tKarplusStrong* const, float stretch)
@brief Set the stretch "factor" of the string (0.0 - 1.0).
- @param
+ @param string A pointer to the relevant tKarplusStrong.
@fn void tKarplusStrong_setPickupPosition (tKarplusStrong* const, float position)
@brief Set the pluck or "excitation" position along the string (0.0 - 1.0).
- @param
+ @param string A pointer to the relevant tKarplusStrong.
@fn void tKarplusStrong_setBaseLoopGain (tKarplusStrong* const, float aGain )
@brief Set the base loop gain.
- @param
+ @param string A pointer to the relevant tKarplusStrong.
@fn float tKarplusStrong_getLastOut (tKarplusStrong* const)
@brief
- @param
+ @param string A pointer to the relevant tKarplusStrong.
@} */
@@ -234,56 +238,58 @@
@{
@fn void tSimpleLivingString_init (tSimpleLivingString* const, float freq, float dampFreq, float decay, float targetLev, float levSmoothFactor, float levStrength, int levMode, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tSimpleLivingString to the default mempool of a LEAF instance.
+ @param string A pointer to the tSimpleLivingString to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tSimpleLivingString_initToPool (tSimpleLivingString* const, float freq, float dampFreq, float decay, float targetLev, float levSmoothFactor, float levStrength, int levMode, tMempool* const)
- @brief
- @param
+ @brief Initialize a tSimpleLivingString to a specified mempool.
+ @param string A pointer to the tSimpleLivingString to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tSimpleLivingString_free (tSimpleLivingString* const)
- @brief
- @param
+ @brief Free a tSimpleLivingString from its mempool.
+ @param string A pointer to the tSimpleLivingString to free.
@fn float tSimpleLivingString_tick (tSimpleLivingString* const, float input)
@brief
- @param
+ @param string A pointer to the relevant tSimpleLivingString.
@fn float tSimpleLivingString_sample (tSimpleLivingString* const)
@brief
- @param
+ @param string A pointer to the relevant tSimpleLivingString.
@fn void tSimpleLivingString_setFreq (tSimpleLivingString* const, float freq)
@brief
- @param
+ @param string A pointer to the relevant tSimpleLivingString.
@fn void tSimpleLivingString_setWaveLength (tSimpleLivingString* const, float waveLength)
@brief
- @param
+ @param string A pointer to the relevant tSimpleLivingString.
@fn void tSimpleLivingString_setDampFreq (tSimpleLivingString* const, float dampFreq)
@brief
- @param
+ @param string A pointer to the relevant tSimpleLivingString.
@fn void tSimpleLivingString_setDecay (tSimpleLivingString* const, float decay)
@brief
- @param
+ @param string A pointer to the relevant tSimpleLivingString.
@fn void tSimpleLivingString_setTargetLev (tSimpleLivingString* const, float targetLev)
@brief
- @param
+ @param string A pointer to the relevant tSimpleLivingString.
@fn void tSimpleLivingString_setLevSmoothFactor (tSimpleLivingString* const, float levSmoothFactor)
@brief
- @param
+ @param string A pointer to the relevant tSimpleLivingString.
@fn void tSimpleLivingString_setLevStrength (tSimpleLivingString* const, float levStrength)
@brief
- @param
+ @param string A pointer to the relevant tSimpleLivingString.
@fn void tSimpleLivingString_setLevMode (tSimpleLivingString* const, int levMode)
@brief
- @param
+ @param string A pointer to the relevant tSimpleLivingString.
@} */
@@ -333,64 +339,66 @@
@{
@fn void tLivingString_init (tLivingString* const, float freq, float pickPos, float prepIndex, float dampFreq, float decay, float targetLev, float levSmoothFactor, float levStrength, int levMode, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tLivingString to the default mempool of a LEAF instance.
+ @param string A pointer to the tLivingString to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tLivingString_initToPool (tLivingString* const, float freq, float pickPos, float prepIndex, float dampFreq, float decay, float targetLev, float levSmoothFactor, float levStrength, int levMode, tMempool* const)
- @brief
- @param
+ @brief Initialize a tLivingString to a specified mempool.
+ @param string A pointer to the tLivingString to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tLivingString_free (tLivingString* const)
- @brief
- @param
+ @brief Free a tLivingString from its mempool.
+ @param string A pointer to the tLivingString to free.
@fn float tLivingString_tick (tLivingString* const, float input)
@brief
- @param
+ @param string A pointer to the relevant tLivingString.
@fn float tLivingString_sample (tLivingString* const)
@brief
- @param
+ @param string A pointer to the relevant tLivingString.
@fn void tLivingString_setFreq (tLivingString* const, float freq)
@brief
- @param
+ @param string A pointer to the relevant tLivingString.
@fn void tLivingString_setWaveLength (tLivingString* const, float waveLength)
@brief
- @param
+ @param string A pointer to the relevant tLivingString.
@fn void tLivingString_setPickPos (tLivingString* const, float pickPos)
@brief
- @param
+ @param string A pointer to the relevant tLivingString.
@fn void tLivingString_setPrepIndex (tLivingString* const, float prepIndex)
@brief
- @param
+ @param string A pointer to the relevant tLivingString.
@fn void tLivingString_setDampFreq (tLivingString* const, float dampFreq)
@brief
- @param
+ @param string A pointer to the relevant tLivingString.
@fn void tLivingString_setDecay (tLivingString* const, float decay)
@brief
- @param
+ @param string A pointer to the relevant tLivingString.
@fn void tLivingString_setTargetLev (tLivingString* const, float targetLev)
@brief
- @param
+ @param string A pointer to the relevant tLivingString.
@fn void tLivingString_setLevSmoothFactor (tLivingString* const, float levSmoothFactor)
@brief
- @param
+ @param string A pointer to the relevant tLivingString.
@fn void tLivingString_setLevStrength (tLivingString* const, float levStrength)
@brief
- @param
+ @param string A pointer to the relevant tLivingString.
@fn void tLivingString_setLevMode (tLivingString* const, int levMode)
@brief
- @param
+ @param string A pointer to the relevant tLivingString.
@} */
@@ -446,68 +454,70 @@
@{
@fn void tComplexLivingString_init (tComplexLivingString* const, float freq, float pickPos, float prepPos, float prepIndex, float dampFreq, float decay, float targetLev, float levSmoothFactor, float levStrength, int levMode, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tComplexLivingString to the default mempool of a LEAF instance.
+ @param string A pointer to the tComplexLivingString to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tComplexLivingString_initToPool (tComplexLivingString* const, float freq, float pickPos, float prepPos, float prepIndex, float dampFreq, float decay, float targetLev, float levSmoothFactor, float levStrength, int levMode, tMempool* const)
- @brief
- @param
+ @brief Initialize a tComplexLivingString to a specified mempool.
+ @param string A pointer to the tComplexLivingString to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tComplexLivingString_free (tComplexLivingString* const)
- @brief
- @param
+ @brief Free a tComplexLivingString from its mempool.
+ @param string A pointer to the tComplexLivingString to free.
@fn float tComplexLivingString_tick (tComplexLivingString* const, float input)
@brief
- @param
+ @param string A pointer to the relevant tComplexLivingString.
@fn float tComplexLivingString_sample (tComplexLivingString* const)
@brief
- @param
+ @param string A pointer to the relevant tComplexLivingString.
@fn void tComplexLivingString_setFreq (tComplexLivingString* const, float freq)
@brief
- @param
+ @param string A pointer to the relevant tComplexLivingString.
@fn void tComplexLivingString_setWaveLength (tComplexLivingString* const, float waveLength)
@brief
- @param
+ @param string A pointer to the relevant tComplexLivingString.
@fn void tComplexLivingString_setPickPos (tComplexLivingString* const, float pickPos)
@brief
- @param
+ @param string A pointer to the relevant tComplexLivingString.
@fn void tComplexLivingString_setPrepPos (tComplexLivingString* const, float prepPos)
@brief
- @param
+ @param string A pointer to the relevant tComplexLivingString.
@fn void tComplexLivingString_setPrepIndex (tComplexLivingString* const, float prepIndex)
@brief
- @param
+ @param string A pointer to the relevant tComplexLivingString.
@fn void tComplexLivingString_setDampFreq (tComplexLivingString* const, float dampFreq)
@brief
- @param
+ @param string A pointer to the relevant tComplexLivingString.
@fn void tComplexLivingString_setDecay (tComplexLivingString* const, float decay)
@brief
- @param
+ @param string A pointer to the relevant tComplexLivingString.
@fn void tComplexLivingString_setTargetLev (tComplexLivingString* const, float targetLev)
@brief
- @param
+ @param string A pointer to the relevant tComplexLivingString.
@fn void tComplexLivingString_setLevSmoothFactor (tComplexLivingString* const, float levSmoothFactor)
@brief
- @param
+ @param string A pointer to the relevant tComplexLivingString.
@fn void tComplexLivingString_setLevStrength (tComplexLivingString* const, float levStrength)
@brief
- @param
+ @param string A pointer to the relevant tComplexLivingString.
@fn void tComplexLivingString_setLevMode (tComplexLivingString* const, int levMode)
@brief
- @param
+ @param string A pointer to the relevant tComplexLivingString.
@} */
@@ -567,32 +577,34 @@
@{
@fn void tReedTable_init (tReedTable* const, float offset, float slope, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tReedTable to the default mempool of a LEAF instance.
+ @param reed A pointer to the tReedTable to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tReedTable_initToPool (tReedTable* const, float offset, float slope, tMempool* const)
- @brief
- @param
+ @brief Initialize a tReedTable to a specified mempool.
+ @param reed A pointer to the tReedTable to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tReedTable_free (tReedTable* const)
- @brief
- @param
+ @brief Free a tReedTable from its mempool.
+ @param reed A pointer to the tReedTable to free.
@fn float tReedTable_tick (tReedTable* const, float input)
@brief
- @param
+ @param reed A pointer to the relevant tReedTable.
@fn float tReedTable_tanh_tick (tReedTable* const, float input)
@brief
- @param
+ @param reed A pointer to the relevant tReedTable.
@fn void tReedTable_setOffset (tReedTable* const, float offset)
@brief
- @param
+ @param reed A pointer to the relevant tReedTable.
@fn void tReedTable_setSlope (tReedTable* const, float slope)
@brief
- @param
+ @param reed A pointer to the relevant tReedTable.
@} */
--- a/leaf/Inc/leaf-reverb.h
+++ b/leaf/Inc/leaf-reverb.h
@@ -39,32 +39,34 @@
@{
@fn void tPRCReverb_init (tPRCReverb* const, float t60, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tPRCReverb to the default mempool of a LEAF instance.
+ @param reverb A pointer to the tPRCReverb to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tPRCReverb_initToPool (tPRCReverb* const, float t60, tMempool* const)
- @brief
- @param
+ @brief Initialize a tPRCReverb to a specified mempool.
+ @param reverb A pointer to the tPRCReverb to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tPRCReverb_free (tPRCReverb* const)
- @brief
- @param
+ @brief Free a tPRCReverb from its mempool.
+ @param reverb A pointer to the tPRCReverb to free.
@fn void tPRCReverb_clear (tPRCReverb* const)
@brief
- @param
+ @param reverb A pointer to the relevant tPRCReverb.
@fn float tPRCReverb_tick (tPRCReverb* const, float input)
@brief
- @param
+ @param reverb A pointer to the relevant tPRCReverb.
@fn void tPRCReverb_setT60 (tPRCReverb* const, float t60)
@brief Set reverb time in seconds.
- @param
+ @param reverb A pointer to the relevant tPRCReverb.
@fn void tPRCReverb_setMix (tPRCReverb* const, float mix)
@brief Set mix between dry input and wet output signal.
- @param
+ @param reverb A pointer to the relevant tPRCReverb.
@} */
@@ -105,37 +107,39 @@
@{
@fn void tNReverb_init (tNReverb* const, float t60, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tNReverb to the default mempool of a LEAF instance.
+ @param reverb A pointer to the tNReverb to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tNReverb_initToPool (tNReverb* const, float t60, tMempool* const)
- @brief
- @param
+ @brief Initialize a tNReverb to a specified mempool.
+ @param reverb A pointer to the tNReverb to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tNReverb_free (tNReverb* const)
- @brief
- @param
+ @brief Free a tNReverb from its mempool.
+ @param reverb A pointer to the tNReverb to free.
@fn void tNReverb_clear (tNReverb* const)
@brief
- @param
+ @param reverb A pointer to the relevant tNReverb.
@fn float tNReverb_tick (tNReverb* const, float input)
@brief
- @param
+ @param reverb A pointer to the relevant tNReverb.
@fn void tNReverb_tickStereo (tNReverb* const rev, float input, float* output)
- @brief
- @param
+ @brief
+ @param reverb A pointer to the relevant tNReverb.
@fn void tNReverb_setT60 (tNReverb* const, float t60)
@brief Set reverb time in seconds.
- @param
+ @param reverb A pointer to the relevant tNReverb.
@fn void tNReverb_setMix (tNReverb* const, float mix)
@brief Set mix between dry input and wet output signal.
- @param
-
+ @param reverb A pointer to the relevant tNReverb.
+
@} */
typedef struct _tNReverb
@@ -177,60 +181,62 @@
@{
@fn void tDattorroReverb_init (tDattorroReverb* const, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tDattorroReverb to the default mempool of a LEAF instance.
+ @param reverb A pointer to the tDattorroReverb to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tDattorroReverb_initToPool (tDattorroReverb* const, tMempool* const)
- @brief
- @param
+ @brief Initialize a tDattorroReverb to a specified mempool.
+ @param reverb A pointer to the tDattorroReverb to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tDattorroReverb_free (tDattorroReverb* const)
- @brief
- @param
+ @brief Free a tDattorroReverb from its mempool.
+ @param reverb A pointer to the tDattorroReverb to free.
@fn void tDattorroReverb_clear (tDattorroReverb* const)
@brief
- @param
+ @param reverb A pointer to the relevant tDattorroReverb.
@fn float tDattorroReverb_tick (tDattorroReverb* const, float input)
@brief
- @param
+ @param reverb A pointer to the relevant tDattorroReverb.
@fn void tDattorroReverb_tickStereo (tDattorroReverb* const rev, float input, float* output)
@brief
- @param
+ @param reverb A pointer to the relevant tDattorroReverb.
@fn void tDattorroReverb_setMix (tDattorroReverb* const, float mix)
@brief
- @param
+ @param reverb A pointer to the relevant tDattorroReverb.
@fn void tDattorroReverb_setFreeze (tDattorroReverb* const rev, uint32_t freeze)
@brief
- @param
+ @param reverb A pointer to the relevant tDattorroReverb.
@fn void tDattorroReverb_setHP (tDattorroReverb* const, float freq)
@brief
- @param
+ @param reverb A pointer to the relevant tDattorroReverb.
@fn void tDattorroReverb_setSize (tDattorroReverb* const, float size)
@brief
- @param
+ @param reverb A pointer to the relevant tDattorroReverb.
@fn void tDattorroReverb_setInputDelay (tDattorroReverb* const, float preDelay)
@brief
- @param
+ @param reverb A pointer to the relevant tDattorroReverb.
@fn void tDattorroReverb_setInputFilter (tDattorroReverb* const, float freq)
@brief
- @param
+ @param reverb A pointer to the relevant tDattorroReverb.
@fn void tDattorroReverb_setFeedbackFilter (tDattorroReverb* const, float freq)
@brief
- @param
+ @param reverb A pointer to the relevant tDattorroReverb.
@fn void tDattorroReverb_setFeedbackGain (tDattorroReverb* const, float gain)
@brief
- @param
+ @param reverb A pointer to the relevant tDattorroReverb.
@} */
--- a/leaf/Inc/leaf-sampling.h
+++ b/leaf/Inc/leaf-sampling.h
@@ -40,68 +40,70 @@
@{
@fn void tBuffer_init (tBuffer* const, uint32_t length, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tBuffer to the default mempool of a LEAF instance.
+ @param sampler A pointer to the tBuffer to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tBuffer_initToPool (tBuffer* const, uint32_t length, tMempool* const)
- @brief
- @param
+ @brief Initialize a tBuffer to a specified mempool.
+ @param sampler A pointer to the tBuffer to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tBuffer_free (tBuffer* const)
- @brief
- @param
+ @brief Free a tBuffer from its mempool.
+ @param sampler A pointer to the tBuffer to free.
@fn void tBuffer_tick (tBuffer* const, float sample)
@brief
- @param
+ @param sampler A pointer to the relevant tBuffer.
@fn void tBuffer_read (tBuffer* const, float* buff, uint32_t len)
@brief
- @param
+ @param sampler A pointer to the relevant tBuffer.
@fn float tBuffer_get (tBuffer* const, int idx)
@brief
- @param
+ @param sampler A pointer to the relevant tBuffer.
@fn void tBuffer_record (tBuffer* const)
@brief
- @param
+ @param sampler A pointer to the relevant tBuffer.
@fn void tBuffer_stop (tBuffer* const)
@brief
- @param
+ @param sampler A pointer to the relevant tBuffer.
@fn int tBuffer_getRecordPosition (tBuffer* const)
@brief
- @param
+ @param sampler A pointer to the relevant tBuffer.
@fn void tBuffer_setRecordPosition (tBuffer* const, int pos)
@brief
- @param
+ @param sampler A pointer to the relevant tBuffer.
@fn void tBuffer_setRecordMode (tBuffer* const, RecordMode mode)
@brief
- @param
+ @param sampler A pointer to the relevant tBuffer.
@fn void tBuffer_clear (tBuffer* const)
@brief
- @param
+ @param sampler A pointer to the relevant tBuffer.
@fn uint32_t tBuffer_getBufferLength (tBuffer* const)
@brief
- @param
+ @param sampler A pointer to the relevant tBuffer.
@fn uint32_t tBuffer_getRecordedLength (tBuffer* const sb)
@brief
- @param
+ @param sampler A pointer to the relevant tBuffer.
@fn void tBuffer_setRecordedLength (tBuffer* const sb, int length)
@brief
- @param
+ @param sampler A pointer to the relevant tBuffer.
@fn int tBuffer_isActive (tBuffer* const sb)
@brief
- @param
+ @param sampler A pointer to the relevant tBuffer.
@} */
@@ -132,7 +134,7 @@
typedef _tBuffer* tBuffer;
void tBuffer_init (tBuffer* const, uint32_t length, LEAF* const leaf);
- void tBuffer_initToPool (tBuffer* const sb, uint32_t length, tMempool* const mp);
+ void tBuffer_initToPool (tBuffer* const sb, uint32_t length, tMempool* const mp);
void tBuffer_free (tBuffer* const);
void tBuffer_tick (tBuffer* const, float sample);
@@ -140,7 +142,7 @@
float tBuffer_get (tBuffer* const, int idx);
void tBuffer_record (tBuffer* const);
void tBuffer_stop (tBuffer* const);
- void tBuffer_setBuffer (tBuffer* const sb, float* externalBuffer, int length, int channels, int sampleRate);
+ void tBuffer_setBuffer (tBuffer* const sb, float* externalBuffer, int length, int channels, int sampleRate);
int tBuffer_getRecordPosition (tBuffer* const);
void tBuffer_setRecordPosition (tBuffer* const, int pos);
void tBuffer_setRecordMode (tBuffer* const, RecordMode mode);
@@ -147,8 +149,8 @@
void tBuffer_clear (tBuffer* const);
uint32_t tBuffer_getBufferLength (tBuffer* const);
uint32_t tBuffer_getRecordedLength (tBuffer* const sb);
- void tBuffer_setRecordedLength (tBuffer* const sb, int length);
- int tBuffer_isActive (tBuffer* const sb);
+ void tBuffer_setRecordedLength (tBuffer* const sb, int length);
+ int tBuffer_isActive (tBuffer* const sb);
//==============================================================================
@@ -159,56 +161,58 @@
@{
@fn void tSampler_init (tSampler* const, tBuffer* const, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tSampler to the default mempool of a LEAF instance.
+ @param sampler A pointer to the tSampler to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tSampler_initToPool (tSampler* const, tBuffer* const, tMempool* const)
- @brief
- @param
+ @brief Initialize a tSampler to a specified mempool.
+ @param sampler A pointer to the tSampler to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tSampler_free (tSampler* const)
- @brief
- @param
+ @brief Free a tSampler from its mempool.
+ @param sampler A pointer to the tSampler to free.
@fn float tSampler_tick (tSampler* const)
@brief
- @param
+ @param sampler A pointer to the relevant tSampler.
@fn void tSampler_setSample (tSampler* const, tBuffer* const)
@brief
- @param
+ @param sampler A pointer to the relevant tSampler.
@fn void tSampler_setMode (tSampler* const, PlayMode mode)
@brief
- @param
+ @param sampler A pointer to the relevant tSampler.
@fn void tSampler_play (tSampler* const)
@brief
- @param
+ @param sampler A pointer to the relevant tSampler.
@fn void tSampler_stop (tSampler* const)
@brief
- @param
+ @param sampler A pointer to the relevant tSampler.
@fn void tSampler_setStart (tSampler* const, int32_t start)
@brief
- @param
+ @param sampler A pointer to the relevant tSampler.
@fn void tSampler_setEnd (tSampler* const, int32_t end)
@brief
- @param
+ @param sampler A pointer to the relevant tSampler.
@fn void tSampler_setLength (tSampler* const, int32_t length)
@brief
- @param
+ @param sampler A pointer to the relevant tSampler.
@fn void tSampler_setCrossfadeLength (tSampler* const sp, uint32_t length)
@brief
- @param
+ @param sampler A pointer to the relevant tSampler.
@fn void tSampler_setRate (tSampler* const, float rate)
@brief
- @param
+ @param sampler A pointer to the relevant tSampler.
@} */
@@ -232,7 +236,7 @@
float ticksPerSevenMs;
float rateFactor;
uint32_t channels;
-
+
tRamp gain;
float idx;
@@ -263,11 +267,11 @@
typedef _tSampler* tSampler;
void tSampler_init (tSampler* const, tBuffer* const, LEAF* const leaf);
- void tSampler_initToPool (tSampler* const sp, tBuffer* const b, tMempool* const mp, LEAF* const leaf);
+ void tSampler_initToPool (tSampler* const sp, tBuffer* const b, tMempool* const mp, LEAF* const leaf);
void tSampler_free (tSampler* const);
float tSampler_tick (tSampler* const);
- float tSampler_tickStereo (tSampler* const sp, float* outputArray);
+ float tSampler_tickStereo (tSampler* const sp, float* outputArray);
void tSampler_setSample (tSampler* const, tBuffer* const);
void tSampler_setMode (tSampler* const, PlayMode mode);
void tSampler_play (tSampler* const);
@@ -287,52 +291,54 @@
@{
@fn void tAutoSampler_init (tAutoSampler* const, tBuffer* const, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tAutoSampler to the default mempool of a LEAF instance.
+ @param sampler A pointer to the tAutoSampler to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tAutoSampler_initToPool (tAutoSampler* const, tBuffer* const, tMempool* const)
- @brief
- @param
+ @brief Initialize a tAutoSampler to a specified mempool.
+ @param sampler A pointer to the tAutoSampler to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tAutoSampler_free (tAutoSampler* const)
- @brief
- @param
+ @brief Free a tAutoSampler from its mempool.
+ @param sampler A pointer to the tAutoSampler to free.
@fn float tAutoSampler_tick (tAutoSampler* const, float input)
@brief
- @param
+ @param sampler A pointer to the relevant tAutoSampler.
@fn void tAutoSampler_setBuffer (tAutoSampler* const, tBuffer* const)
@brief
- @param
+ @param sampler A pointer to the relevant tAutoSampler.
@fn void tAutoSampler_setMode (tAutoSampler* const, PlayMode mode)
@brief
- @param
+ @param sampler A pointer to the relevant tAutoSampler.
@fn void tAutoSampler_play (tAutoSampler* const)
@brief
- @param
+ @param sampler A pointer to the relevant tAutoSampler.
@fn void tAutoSampler_stop (tAutoSampler* const)
@brief
- @param
+ @param sampler A pointer to the relevant tAutoSampler.
@fn void tAutoSampler_setThreshold (tAutoSampler* const, float thresh)
@brief
- @param
+ @param sampler A pointer to the relevant tAutoSampler.
@fn void tAutoSampler_setWindowSize (tAutoSampler* const, uint32_t size)
@brief
- @param
+ @param sampler A pointer to the relevant tAutoSampler.
@fn void tAutoSampler_setCrossfadeLength (tAutoSampler* const, uint32_t length)
@brief
- @param
+ @param sampler A pointer to the relevant tAutoSampler.
@fn void tAutoSampler_setRate (tAutoSampler* const, float rate)
@brief
- @param
+ @param sampler A pointer to the relevant tAutoSampler.
@} */
@@ -353,7 +359,7 @@
typedef _tAutoSampler* tAutoSampler;
void tAutoSampler_init (tAutoSampler* const, tBuffer* const, LEAF* const leaf);
- void tAutoSampler_initToPool (tAutoSampler* const as, tBuffer* const b, tMempool* const mp, LEAF* const leaf);
+ void tAutoSampler_initToPool (tAutoSampler* const as, tBuffer* const b, tMempool* const mp, LEAF* const leaf);
void tAutoSampler_free (tAutoSampler* const);
float tAutoSampler_tick (tAutoSampler* const, float input);
@@ -365,9 +371,9 @@
void tAutoSampler_setWindowSize (tAutoSampler* const, uint32_t size);
void tAutoSampler_setCrossfadeLength (tAutoSampler* const, uint32_t length);
void tAutoSampler_setRate (tAutoSampler* const, float rate);
-
-
-/*!
+
+
+ /*!
@defgroup tMBSampler tMBSampler
@ingroup sampling
@brief
@@ -374,61 +380,63 @@
@{
@fn void tMBSampler_init (tMBSampler* const, tBuffer* const, LEAF* const leaf)
- @brief
- @param
+ @brief Initialize a tMBSampler to the default mempool of a LEAF instance.
+ @param sampler A pointer to the tMBSampler to initialize.
+ @param leaf A pointer to the leaf instance.
@fn void tMBSampler_initToPool (tMBSampler* const, tBuffer* const, tMempool* const)
- @brief
- @param
+ @brief Initialize a tMBSampler to a specified mempool.
+ @param sampler A pointer to the tMBSampler to initialize.
+ @param mempool A pointer to the tMempool to use.
@fn void tMBSampler_free (tMBSampler* const)
- @brief
- @param
+ @brief Free a tMBSampler from its mempool.
+ @param sampler A pointer to the tMBSampler to free.
@fn float tMBSampler_tick (tMBSampler* const)
@brief
- @param
+ @param sampler A pointer to the relevant tMBSampler.
@fn void tMBSampler_setSample (tMBSampler* const, tBuffer* const)
@brief
- @param
+ @param sampler A pointer to the relevant tMBSampler.
@fn void tMBSampler_setMode (tMBSampler* const, PlayMode mode)
@brief
- @param
+ @param sampler A pointer to the relevant tMBSampler.
@fn void tMBSampler_play (tMBSampler* const)
@brief
- @param
+ @param sampler A pointer to the relevant tMBSampler.
@fn void tMBSampler_stop (tMBSampler* const)
@brief
- @param
+ @param sampler A pointer to the relevant tMBSampler.
@fn void tMBSampler_setStart (tMBSampler* const, int32_t start)
@brief
- @param
+ @param sampler A pointer to the relevant tMBSampler.
@fn void tMBSampler_setEnd (tMBSampler* const, int32_t end)
@brief
- @param
+ @param sampler A pointer to the relevant tMBSampler.
@fn void tMBSampler_setLength (tMBSampler* const, int32_t length)
@brief
- @param
+ @param sampler A pointer to the relevant tMBSampler.
@fn void tMBSampler_setCrossfadeLength (tMBSampler* const sp, uint32_t length)
@brief
- @param
+ @param sampler A pointer to the relevant tMBSampler.
@fn void tMBSampler_setRate (tMBSampler* const, float rate)
@brief
- @param
+ @param sampler A pointer to the relevant tMBSampler.
@} */
#define FILLEN 256
-
+
typedef struct _tMBSampler
{
@@ -477,3 +485,4 @@
#endif // LEAF_SAMPLING_H_INCLUDED
//==============================================================================
+
--- a/leaf/Inc/leaf-tables.h
+++ b/leaf/Inc/leaf-tables.h
@@ -19,31 +19,11 @@
//==============================================================================
-#define USE_SAWTOOTH_TABLE 1
-#define USE_SQUARE_TABLE 1
-#define USE_TRIANGLE_TABLE 1
-#define USE_SHAPER_TABLE 1
-#define DECAY_TABLES_USED 1
-
/*!
@ingroup tables
@{
*/
-#define SINE_TABLE_SIZE 2048
-#define SAW_TABLE_SIZE 2048
-#define SQR_TABLE_SIZE 2048
-#define TRI_TABLE_SIZE 2048
-#define EXP_DECAY_TABLE_SIZE 65536
-#define ATTACK_DECAY_INC_TABLE_SIZE 65536
-#define TANH1_TABLE_SIZE 65536
-#define DECAY_COEFF_TABLE_SIZE 4096
-#define MTOF1_TABLE_SIZE 4096
-#define FILTERTAN_TABLE_SIZE 4096
-
-#define SHAPER1_TABLE_SIZE 65536
- extern const float __leaf_table_shaper1[SHAPER1_TABLE_SIZE];
-
#define COEFFS_SIZE 32
extern const float* __leaf_tableref_firCoeffs[COEFFS_SIZE];
extern const float __leaf_tablesize_firNumTaps[COEFFS_SIZE];
@@ -60,44 +40,56 @@
extern const float __leaf_table_fir32XHigh[512];
extern const float __leaf_table_fir64XHigh[1024];
- typedef enum TableName
- {
- T20 = 0,
- T40,
- T80,
- T160,
- T320,
- T640,
- T1280,
- T2560,
- T5120,
- T10240,
- T20480,
- TableNameNil
- } TableName;
+// typedef enum TableName
+// {
+// T20 = 0,
+// T40,
+// T80,
+// T160,
+// T320,
+// T640,
+// T1280,
+// T2560,
+// T5120,
+// T10240,
+// T20480,
+// TableNameNil
+// } TableName;
- // mtof lookup table based on input range [0.0,1.0) in 4096 increments - midi frequency values scaled between m25 and m134 (from the Snyderphonics DrumBox code)
+#define SHAPER1_TABLE_SIZE 65536
+ extern const float __leaf_table_shaper1[SHAPER1_TABLE_SIZE];
+
+ // mtof lookup table based on input range [0.0,1.0) in 4096 increments - midi frequency values scaled between m25 and m134 (from the Snyderphonics DrumBox code)
+#define MTOF1_TABLE_SIZE 4096
+ extern const float __leaf_table_mtof1[MTOF1_TABLE_SIZE];
+
+#define EXP_DECAY_TABLE_SIZE 65536
extern const float __leaf_table_exp_decay[EXP_DECAY_TABLE_SIZE];
+
+#define ATTACK_DECAY_INC_TABLE_SIZE 65536
extern const float __leaf_table_attack_decay_inc[ATTACK_DECAY_INC_TABLE_SIZE];
+#define FILTERTAN_TABLE_SIZE 4096
extern const float __leaf_table_filtertan[FILTERTAN_TABLE_SIZE];
- extern const float __leaf_table_mtof1[MTOF1_TABLE_SIZE];
- extern const float __leaf_table_decayCoeffTable[DECAY_COEFF_TABLE_SIZE];
-
+#define TANH1_TABLE_SIZE 65536
extern const float __leaf_table_tanh1[TANH1_TABLE_SIZE];
//==============================================================================
/* Sine wave table ripped from http://aquaticus.info/pwm-sine-wave. */
+#define SINE_TABLE_SIZE 2048
extern const float __leaf_table_sinewave[SINE_TABLE_SIZE];
- extern const float __leaf_table_sawtooth[11][SAW_TABLE_SIZE];
-
+#define TRI_TABLE_SIZE 2048
extern const float __leaf_table_triangle[11][TRI_TABLE_SIZE];
+#define SQR_TABLE_SIZE 2048
extern const float __leaf_table_squarewave[11][SQR_TABLE_SIZE];
+
+#define SAW_TABLE_SIZE 2048
+ extern const float __leaf_table_sawtooth[11][SAW_TABLE_SIZE];
//==============================================================================
--- a/leaf/Src/leaf-analysis.c
+++ b/leaf/Src/leaf-analysis.c
@@ -1,11 +1,11 @@
/*==============================================================================
+
+ leaf-analysis.c
+ Created: 30 Nov 2018 11:56:49am
+ Author: airship
+
+ ==============================================================================*/
- leaf-analysis.c
- Created: 30 Nov 2018 11:56:49am
- Author: airship
-
-==============================================================================*/
-
#if _WIN32 || _WIN64
#include "..\Inc\leaf-analysis.h"
@@ -93,7 +93,7 @@
_tMempool* m = *mp;
_tZeroCrossingCounter* z = *zc = (_tZeroCrossingCounter*) mpool_alloc(sizeof(_tZeroCrossingCounter), m);
z->mempool = m;
-
+
z->count = 0;
z->maxWindowSize = maxWindowSize;
z->currentWindowSize = maxWindowSize;
@@ -117,11 +117,11 @@
float tZeroCrossingCounter_tick (tZeroCrossingCounter* const zc, float input)
{
_tZeroCrossingCounter* z = *zc;
-
+
z->inBuffer[z->position] = input;
int futurePosition = ((z->position + 1) % z->currentWindowSize);
float output = 0.0f;
-
+
//add new value to count
if ((z->inBuffer[z->position] * z->inBuffer[z->prevPosition]) < 0.0f)
{
@@ -133,7 +133,7 @@
{
z->countBuffer[z->position] = 0;
}
-
+
//remove oldest value from count
if (z->countBuffer[futurePosition] > 0)
{
@@ -143,12 +143,12 @@
z->count = 0;
}
}
-
+
z->prevPosition = z->position;
z->position = futurePosition;
-
+
output = z->count * z->invCurrentWindowSize;
-
+
return output;
}
@@ -157,9 +157,9 @@
{
_tZeroCrossingCounter* z = *zc;
if (windowSize <= z->maxWindowSize)
- {
- z->currentWindowSize = windowSize;
- }
+ {
+ z->currentWindowSize = windowSize;
+ }
else
{
z->currentWindowSize = z->maxWindowSize;
@@ -197,7 +197,7 @@
mpool_free((char*)p, p->mempool);
}
-int tPowerFollower_setFactor(tPowerFollower* const pf, float factor)
+void tPowerFollower_setFactor(tPowerFollower* const pf, float factor)
{
_tPowerFollower* p = *pf;
@@ -205,10 +205,9 @@
if (factor>1) factor=1;
p->factor=factor;
p->oneminusfactor=1.0f-factor;
- return 0;
}
-float tPowerFollower_tick(tPowerFollower* const pf, float input)
+float tPowerFollower_tick(tPowerFollower* const pf, float input)
{
_tPowerFollower* p = *pf;
p->curr = p->factor*input*input+p->oneminusfactor*p->curr;
@@ -215,7 +214,7 @@
return p->curr;
}
-float tPowerFollower_sample(tPowerFollower* const pf)
+float tPowerFollower_getPower(tPowerFollower* const pf)
{
_tPowerFollower* p = *pf;
return p->curr;
@@ -258,7 +257,7 @@
for (i = 0; i < MAXOVERLAP; i++) x->x_sumbuf[i] = 0;
for (i = 0; i < npoints; i++)
- x->buf[i] = (1.0f - cosf((2 * PI * i) / npoints))/npoints;
+ x->buf[i] = (1.0f - cosf((2 * PI * i) / npoints))/npoints;
for (; i < npoints+INITVSTAKEN; i++) x->buf[i] = 0;
x->x_f = 0;
@@ -321,7 +320,7 @@
x->x_result = x->x_sumbuf[0];
for (count = x->x_realperiod, sump = x->x_sumbuf;
count < x->x_npoints; count += x->x_realperiod, sump++)
- sump[0] = sump[1];
+ sump[0] = sump[1];
sump[0] = 0;
x->x_phase = x->x_realperiod - n;
}
@@ -364,12 +363,7 @@
{
_tAttackDetection* a = *ad;
- if(!((size==64)|(size==128)|(size==256)|(size==512)|(size==1024)|(size==2048)))
- size = DEFBLOCKSIZE;
a->blocksize = size;
-
- return;
-
}
void tAttackDetection_setSamplerate(tAttackDetection* const ad, int inRate)
@@ -500,7 +494,7 @@
s->fidelity = 0.;
s->minrms = DEFMINRMS;
s->framesize = SNAC_FRAME_SIZE;
-
+
s->inputbuf = (float*) mpool_calloc(sizeof(float) * SNAC_FRAME_SIZE, m);
s->processbuf = (float*) mpool_calloc(sizeof(float) * (SNAC_FRAME_SIZE * 2), m);
s->spectrumbuf = (float*) mpool_calloc(sizeof(float) * (SNAC_FRAME_SIZE / 2), m);
@@ -526,15 +520,16 @@
/******************************************************************************/
-void tSNAC_ioSamples(tSNAC* const snac, float *in, float *out, int size)
+//void tSNAC_ioSamples(tSNAC* const snac, float *in, float *out, int size)
+void tSNAC_ioSamples(tSNAC* const snac, float *in, int size)
{
_tSNAC* s = *snac;
int timeindex = s->timeindex;
int mask = s->framesize - 1;
- int outindex = 0;
+// int outindex = 0;
float *inputbuf = s->inputbuf;
- float *processbuf = s->processbuf;
+// float *processbuf = s->processbuf;
// call analysis function when it is time
if(!(timeindex & (s->framesize / s->overlap - 1))) snac_analyzeframe(snac);
@@ -542,7 +537,8 @@
while(size--)
{
inputbuf[timeindex] = *in++;
- out[outindex++] = processbuf[timeindex++];
+// out[outindex++] = processbuf[timeindex++];
+ timeindex++;
timeindex &= mask;
}
s->timeindex = timeindex;
@@ -833,12 +829,12 @@
//===========================================================================
// PERIODDETECTION
//===========================================================================
-void tPeriodDetection_init (tPeriodDetection* const pd, float* in, float* out, int bufSize, int frameSize, LEAF* const leaf)
+void tPeriodDetection_init (tPeriodDetection* const pd, float* in, int bufSize, int frameSize, LEAF* const leaf)
{
- tPeriodDetection_initToPool(pd, in, out, bufSize, frameSize, &leaf->mempool);
+ tPeriodDetection_initToPool(pd, in, bufSize, frameSize, &leaf->mempool);
}
-void tPeriodDetection_initToPool (tPeriodDetection* const pd, float* in, float* out, int bufSize, int frameSize, tMempool* const mp)
+void tPeriodDetection_initToPool (tPeriodDetection* const pd, float* in, int bufSize, int frameSize, tMempool* const mp)
{
_tMempool* m = *mp;
_tPeriodDetection* p = *pd = (_tPeriodDetection*) mpool_calloc(sizeof(_tPeriodDetection), m);
@@ -846,7 +842,6 @@
LEAF* leaf = p->mempool->leaf;
p->inBuffer = in;
- p->outBuffer = out;
p->bufSize = bufSize;
p->frameSize = frameSize;
p->framesPerBuffer = p->bufSize / p->frameSize;
@@ -861,7 +856,7 @@
tEnvPD_initToPool(&p->env, p->windowSize, p->hopSize, p->frameSize, mp);
tSNAC_initToPool(&p->snac, DEFOVERLAP, mp);
-
+
p->history = 0.0f;
p->alpha = 1.0f;
p->tolerance = 1.0f;
@@ -901,13 +896,10 @@
tEnvPD_processBlock(&p->env, &(p->inBuffer[i]));
- tSNAC_ioSamples(&p->snac, &(p->inBuffer[i]), &(p->outBuffer[i]), p->frameSize);
- float fidelity = tSNAC_getFidelity(&p->snac);
+ tSNAC_ioSamples(&p->snac, &(p->inBuffer[i]), p->frameSize);
+
// Fidelity threshold recommended by Katja Vetters is 0.95 for most instruments/voices http://www.katjaas.nl/helmholtz/helmholtz.html
- if (fidelity > p->fidelityThreshold)
- {
- p->period = tSNAC_getPeriod(&p->snac);
- }
+ p->period = tSNAC_getPeriod(&p->snac);
p->curBlock++;
if (p->curBlock >= p->framesPerBuffer) p->curBlock = 0;
@@ -923,6 +915,12 @@
return p->period;
}
+float tPeriodDetection_getFidelity(tPeriodDetection* pd)
+{
+ _tPeriodDetection* p = *pd;
+ return tSNAC_getFidelity(&p->snac);
+}
+
void tPeriodDetection_setHopSize(tPeriodDetection* pd, int hs)
{
_tPeriodDetection* p = *pd;
@@ -965,7 +963,7 @@
_tMempool* m = *mp;
_tZeroCrossingInfo* z = *zc = (_tZeroCrossingInfo*) mpool_alloc(sizeof(_tZeroCrossingInfo), m);
z->mempool = m;
-
+
z->_leading_edge = INT_MIN;
z->_trailing_edge = INT_MIN;
z->_width = 0.0f;
@@ -1049,11 +1047,11 @@
z->_size = pow(2.0, ceil(log2((double)size)));
z->_mask = z->_size - 1;
+ z->_info = (tZeroCrossingInfo*) mpool_calloc(sizeof(tZeroCrossingInfo) * z->_size, m);
- z->_info = (tZeroCrossingInfo*) mpool_alloc(sizeof(tZeroCrossingInfo) * z->_size, m);
for (unsigned i = 0; i < z->_size; i++)
- tZeroCrossingInfo_initToPool(&z->_info[i], mp);
-
+ tZeroCrossingInfo_initToPool(&z->_info[i], mp);
+
z->_pos = 0;
z->_prev = 0.0f;
@@ -1069,6 +1067,11 @@
{
_tZeroCrossingCollector* z = *zc;
+ for (unsigned i = 0; i < z->_size; i++)
+
+ tZeroCrossingInfo_free(&z->_info[i]);
+
+ mpool_free((char*)z->_info, z->mempool);
mpool_free((char*)z, z->mempool);
}
@@ -1846,7 +1849,7 @@
{
if (info._period < collector->_first_period)
return 0;
-
+
float incoming_period = sub_collector_period_of(collector, info);
int multiple = fmaxf(1.0f, roundf( incoming_period / collector->_first_period));
return sub_collector_try_sub_harmonic(collector, fmin(collector->_range, multiple), info, incoming_period/multiple);
@@ -1892,7 +1895,7 @@
_tPitchDetector* p = *detector = (_tPitchDetector*) mpool_alloc(sizeof(_tPitchDetector), m);
p->mempool = m;
- tPeriodDetector_initToPool(&p->_pd, lowestFreq, highestFreq, DEFAULT_HYSTERESIS, mempool);
+ tPeriodDetector_initToPool(&p->_pd, lowestFreq, highestFreq, -120.0f, mempool);
p->_current.frequency = 0.0f;
p->_current.periodicity = 0.0f;
p->_frames_after_shift = 0;
@@ -1985,8 +1988,8 @@
float period = tPeriodDetector_predictPeriod(&p->_pd);
if (period > 0.0f)
- return leaf->sampleRate / period;
- return 0.0f;
+ return leaf->sampleRate / period;
+ return 0.0f;
}
int tPitchDetector_indeterminate (tPitchDetector* const detector)
@@ -2026,7 +2029,7 @@
//=============================================================================
//_pitch_info result = bias(current, incoming, shift);
{
- float error = p->_current.frequency / 32.0f; // approx 1/2 semitone
+ float error = p->_current.frequency * 0.015625; // approx 1/4 semitone
float diff = fabsf(p->_current.frequency - incoming.frequency);
int done = 0;
@@ -2111,24 +2114,29 @@
static inline void compute_predicted_frequency(tDualPitchDetector* const detector);
-void tDualPitchDetector_init (tDualPitchDetector* const detector, float lowestFreq, float highestFreq, LEAF* const leaf)
+void tDualPitchDetector_init (tDualPitchDetector* const detector, float lowestFreq, float highestFreq, float* inBuffer, int bufSize, LEAF* const leaf)
{
- tDualPitchDetector_initToPool(detector, lowestFreq, highestFreq, &leaf->mempool);
+ tDualPitchDetector_initToPool(detector, lowestFreq, highestFreq, inBuffer, bufSize, &leaf->mempool);
}
-void tDualPitchDetector_initToPool (tDualPitchDetector* const detector, float lowestFreq, float highestFreq, tMempool* const mempool)
+void tDualPitchDetector_initToPool (tDualPitchDetector* const detector, float lowestFreq, float highestFreq, float* inBuffer, int bufSize, tMempool* const mempool)
{
_tMempool* m = *mempool;
_tDualPitchDetector* p = *detector = (_tDualPitchDetector*) mpool_alloc(sizeof(_tDualPitchDetector), m);
p->mempool = m;
- tPitchDetector_initToPool(&p->_pd1, lowestFreq, highestFreq, mempool);
+ tPeriodDetection_initToPool(&p->_pd1, inBuffer, bufSize, bufSize / 2, mempool);
tPitchDetector_initToPool(&p->_pd2, lowestFreq, highestFreq, mempool);
+
p->_current.frequency = 0.0f;
p->_current.periodicity = 0.0f;
p->_mean = lowestFreq + ((highestFreq - lowestFreq) / 2.0f);
p->_predicted_frequency = 0.0f;
p->_first = 1;
+ p->thresh = 0.98f;
+
+ p->lowest = lowestFreq;
+ p->highest = highestFreq;
}
void tDualPitchDetector_free (tDualPitchDetector* const detector)
@@ -2135,7 +2143,7 @@
{
_tDualPitchDetector* p = *detector;
- tPitchDetector_free(&p->_pd1);
+ tPeriodDetection_free(&p->_pd1);
tPitchDetector_free(&p->_pd2);
mpool_free((char*) p, p->mempool);
@@ -2144,22 +2152,65 @@
int tDualPitchDetector_tick (tDualPitchDetector* const detector, float sample)
{
_tDualPitchDetector* p = *detector;
+ LEAF* leaf = p->mempool->leaf;
- int pd1_ready = tPitchDetector_tick(&p->_pd1, sample);
- int pd2_ready = tPitchDetector_tick(&p->_pd2, -sample);
-
- if (pd1_ready || pd2_ready)
+ tPeriodDetection_tick(&p->_pd1, sample);
+ int ready = tPitchDetector_tick(&p->_pd2, sample);
+
+ if (ready)
{
- int pd1_indeterminate = tPitchDetector_indeterminate(&p->_pd1);
int pd2_indeterminate = tPitchDetector_indeterminate(&p->_pd2);
- if (!pd1_indeterminate && !pd2_indeterminate)
+ int disagreement = 0;
+ float period = tPeriodDetection_getPeriod(&p->_pd1);
+ if (!pd2_indeterminate && period != 0.0f)
{
- _pitch_info _i1 = p->_pd1->_current;
+ _pitch_info _i1;
+ _i1.frequency = leaf->sampleRate / tPeriodDetection_getPeriod(&p->_pd1);
+ _i1.periodicity = tPeriodDetection_getFidelity(&p->_pd1);
_pitch_info _i2 = p->_pd2->_current;
float pd1_diff = fabsf(_i1.frequency - p->_mean);
float pd2_diff = fabsf(_i2.frequency - p->_mean);
- _pitch_info i = (pd1_diff < pd2_diff) ? _i1 : _i2;
+
+ _pitch_info i;
+ disagreement = fabsf(_i1.frequency - _i2.frequency) > (p->_mean * 0.03125f);
+ // If they agree, we'll use bacf
+ if (!disagreement) i = _i2;
+ // A disagreement implies a change
+ // Start with smaller changes
+ else if (pd2_diff < p->_mean * 0.03125f) i = _i2;
+ else if (pd1_diff < p->_mean * 0.03125f) i = _i1;
+ // Now filter out lower fidelity stuff
+ else if (_i1.periodicity < p->thresh) return ready;
+ // Changing up (bacf tends to lead changes)
+ else if ((_i1.frequency > p->_mean && _i2.frequency > p->_mean) &&
+ (_i1.frequency < _i2.frequency) &&
+ (_i2.periodicity > p->thresh))
+ {
+ if (roundf(_i2.frequency / _i1.frequency) > 1) i = _i1;
+ else i = _i2;
+ }
+ // Changing down
+ else if ((_i1.frequency < p->_mean && _i2.frequency < p->_mean) &&
+ (_i1.frequency > _i2.frequency) &&
+ (_i2.periodicity > p->thresh))
+ {
+ if (roundf(_i1.frequency / _i2.frequency) > 1) i = _i1;
+ else i = _i2;
+ }
+ // A bit of handling for stuff out of bacf range, won't be as solid but better than nothing
+ else if (_i1.frequency > p->highest)
+ {
+ if (roundf(_i1.frequency / _i2.frequency) > 1) i = _i2;
+ else i = _i1;
+ }
+ else if (_i1.frequency < p->lowest)
+ {
+ if (roundf(_i2.frequency / _i1.frequency) > 1) i = _i2;
+ else i = _i1;
+ }
+ // Don't change if we met non of these, probably a bad read
+ else return ready;
if (p->_first)
{
@@ -2171,20 +2222,14 @@
else
{
p->_current = i;
- p->_mean = (0.222222f * p->_current.frequency) + (0.777778f * p->_mean);
+ p->_mean = (0.2222222 * p->_current.frequency) + (0.7777778 * p->_mean);
p->_predicted_frequency = 0.0f;
}
+ return ready;
}
-
- if (pd1_indeterminate && pd2_indeterminate)
- {
- compute_predicted_frequency(detector);
- p->_current.frequency = 0.0f;
- p->_current.periodicity = 0.0f;
- }
}
-
- return pd1_ready || pd2_ready;
+
+ return ready;
}
float tDualPitchDetector_getFrequency (tDualPitchDetector* const detector)
@@ -2210,31 +2255,36 @@
return p->_predicted_frequency;
}
-void tDualPitchDetector_setHysteresis (tDualPitchDetector* const detector, float hysteresis)
+void tDualPitchDetector_setHysteresis (tDualPitchDetector* const detector, float hysteresis)
{
_tDualPitchDetector* p = *detector;
- tPitchDetector_setHysteresis(&p->_pd1, hysteresis);
tPitchDetector_setHysteresis(&p->_pd2, hysteresis);
}
+void tDualPitchDetector_setPeriodicityThreshold (tDualPitchDetector* const detector, float thresh)
+{
+ _tDualPitchDetector* p = *detector;
+
+ p->thresh = thresh;
+}
+
static inline void compute_predicted_frequency(tDualPitchDetector* const detector)
{
_tDualPitchDetector* p = *detector;
- float f1 = tPitchDetector_predictFrequency(&p->_pd1);
- if (f1 > 0.0f)
+ float f1 = 1.0f / tPeriodDetection_getPeriod(&p->_pd1);
+ float f2 = tPitchDetector_predictFrequency(&p->_pd2);
+ if (f2 > 0.0f)
{
- float f2 = tPitchDetector_predictFrequency(&p->_pd2);
- if (f2 > 0.0f)
+ float error = f1 * 0.1f;
+ if (fabsf(f1 - f2) < error)
{
- float error = f1 * 0.1f;
- if (fabsf(f1 - f2) < error)
- {
- p->_predicted_frequency = f1;
- return;
- }
+ p->_predicted_frequency = f1;
+ return;
}
}
+
p->_predicted_frequency = 0.0f;
}
+
--- a/leaf/Src/leaf-delay.c
+++ b/leaf/Src/leaf-delay.c
@@ -80,7 +80,7 @@
return d->lastOut;
}
-int tDelay_setDelay (tDelay* const dl, uint32_t delay)
+void tDelay_setDelay (tDelay* const dl, uint32_t delay)
{
_tDelay* d = *dl;
@@ -89,8 +89,6 @@
// read chases write
if ( d->inPoint >= delay ) d->outPoint = d->inPoint - d->delay;
else d->outPoint = d->maxDelay + d->inPoint - d->delay;
-
- return 0;
}
float tDelay_tapOut (tDelay* const dl, uint32_t tapDelay)
@@ -262,7 +260,7 @@
return d->lastOut;
}
-int tLinearDelay_setDelay (tLinearDelay* const dl, float delay)
+void tLinearDelay_setDelay (tLinearDelay* const dl, float delay)
{
_tLinearDelay* d = *dl;
@@ -279,8 +277,6 @@
d->omAlpha = 1.0f - d->alpha;
if ( d->outPoint == d->maxDelay ) d->outPoint = 0;
-
- return 0;
}
float tLinearDelay_tapOut (tLinearDelay* const dl, uint32_t tapDelay)
@@ -456,7 +452,7 @@
return d->lastOut;
}
-int tHermiteDelay_setDelay (tHermiteDelay* const dl, float delay)
+void tHermiteDelay_setDelay (tHermiteDelay* const dl, float delay)
{
_tHermiteDelay* d = *dl;
@@ -473,8 +469,6 @@
d->omAlpha = 1.0f - d->alpha;
if ( d->outPoint == d->maxDelay ) d->outPoint = 0;
-
- return 0;
}
float tHermiteDelay_tapOut (tHermiteDelay* const dl, uint32_t tapDelay)
@@ -622,7 +616,7 @@
return d->lastOut;
}
-int tAllpassDelay_setDelay (tAllpassDelay* const dl, float delay)
+void tAllpassDelay_setDelay (tAllpassDelay* const dl, float delay)
{
_tAllpassDelay* d = *dl;
@@ -652,8 +646,6 @@
}
d->coeff = (1.0f - d->alpha) / (1.0f + d->alpha); // coefficient for allpass
-
- return 0;
}
float tAllpassDelay_tapOut (tAllpassDelay* const dl, uint32_t tapDelay)
--- a/leaf/Src/leaf-distortion.c
+++ b/leaf/Src/leaf-distortion.c
@@ -22,7 +22,6 @@
// Sample-Rate reducer
//============================================================================================================
-
void tSampleReducer_init (tSampleReducer* const sr, LEAF* const leaf)
{
tSampleReducer_initToPool(sr, &leaf->mempool);
@@ -68,6 +67,7 @@
}
+#if LEAF_INCLUDE_OVERSAMPLER_TABLES
//============================================================================================================
// Oversampler
//============================================================================================================
@@ -303,6 +303,7 @@
_tOversampler* os = *osr;
return os->phaseLength;
}
+#endif // LEAF_INCLUDE_OVERSAMPLER_TABLES
//============================================================================================================
// WAVEFOLDER
--- a/leaf/Src/leaf-effects.c
+++ b/leaf/Src/leaf-effects.c
@@ -1010,7 +1010,6 @@
/***************** static function declarations *******************************/
/******************************************************************************/
-static void solad_init(_tSOLAD *w);
static inline float read_sample(_tSOLAD *w, float floatindex);
static void pitchdown(_tSOLAD *w, float *out);
static void pitchup(_tSOLAD *w, float *out);
@@ -1020,21 +1019,29 @@
/******************************************************************************/
// init
-void tSOLAD_init (tSOLAD* const wp, LEAF* const leaf)
+void tSOLAD_init (tSOLAD* const wp, int loopSize, LEAF* const leaf)
{
- tSOLAD_initToPool(wp, &leaf->mempool);
+ tSOLAD_initToPool(wp, loopSize, &leaf->mempool);
}
-void tSOLAD_initToPool (tSOLAD* const wp, tMempool* const mp)
+void tSOLAD_initToPool (tSOLAD* const wp, int loopSize, tMempool* const mp)
{
_tMempool* m = *mp;
_tSOLAD* w = *wp = (_tSOLAD*) mpool_calloc(sizeof(_tSOLAD), m);
w->mempool = m;
+ w->loopSize = loopSize;
w->pitchfactor = 1.;
- w->delaybuf = (float*) mpool_calloc(sizeof(float) * (LOOPSIZE+16), m);
+ w->delaybuf = (float*) mpool_calloc(sizeof(float) * w->loopSize, m);
- solad_init(w);
+ w->timeindex = 0;
+ w->xfadevalue = -1;
+ w->period = INITPERIOD;
+ w->readlag = INITPERIOD;
+ w->blocksize = INITPERIOD;
+
+ tAttackDetection_initToPool(&w->ad, INITPERIOD, 5, 5, mp);
+ tHighpass_initToPool(&w->hp, 20.0f, mp);
}
void tSOLAD_free (tSOLAD* const wp)
@@ -1041,6 +1048,8 @@
{
_tSOLAD* w = *wp;
+ tAttackDetection_free(&w->ad);
+ tHighpass_free(&w->hp);
mpool_free((char*)w->delaybuf, w->mempool);
mpool_free((char*)w, w->mempool);
}
@@ -1053,14 +1062,28 @@
int i = w->timeindex;
int n = w->blocksize = blocksize;
- if(!i) w->delaybuf[LOOPSIZE] = in[0]; // copy one sample for interpolation
- while(n--) w->delaybuf[i++] = *in++; // copy one input block to delay buffer
+ if(!i)
+ {
+ float sample = tHighpass_tick(&w->hp, in[0]);
+ w->delaybuf[0] = sample;
+ w->delaybuf[w->loopSize] = sample; // copy one sample for interpolation
+ n--;
+ i++;
+ in++;
+ }
+ while(n--) w->delaybuf[i++] = tHighpass_tick(&w->hp, *in++); // copy one input block to delay buffer
+ tAttackDetection_setBlocksize(&w->ad, n);
+ if (tAttackDetection_detect(&w->ad, in))
+ {
+ tSOLAD_setReadLag(wp, w->blocksize);
+ }
+
if(w->pitchfactor > 1) pitchup(w, out);
else pitchdown(w, out);
w->timeindex += blocksize;
- w->timeindex &= LOOPMASK;
+ w->timeindex &= (w->loopSize - 1);
}
// set periodicity analysis data
@@ -1068,7 +1091,8 @@
{
_tSOLAD* w = *wp;
- if(period > MAXPERIOD) period = MAXPERIOD;
+ float maxPeriod = (float)((w->loopSize - w->blocksize) * 0.8f);
+ if(period > maxPeriod) period = maxPeriod;
if(period > MINPERIOD) w->period = period; // ignore period when too small
}
@@ -1077,7 +1101,10 @@
{
_tSOLAD* w = *wp;
- if (pitchfactor <= 0.0f) return;
+ if (pitchfactor <= 0.0f || pitchfactor > 1000.0f)
+ {
+ return;
+ }
w->pitchfactor = pitchfactor;
}
@@ -1101,11 +1128,16 @@
{
_tSOLAD* w = *wp;
- int n = LOOPSIZE + 1;
+ int n = w->loopSize;
float *buf = w->delaybuf;
while(n--) *buf++ = 0;
- solad_init(w);
+
+ w->timeindex = 0;
+ w->xfadevalue = -1;
+ w->period = INITPERIOD;
+ w->readlag = INITPERIOD;
+ w->blocksize = INITPERIOD;
}
/******************************************************************************/
@@ -1143,7 +1175,7 @@
static void pitchdown(_tSOLAD* const w, float *out)
{
int n = w->blocksize;
- float refindex = (float)(w->timeindex + LOOPSIZE); // no negative values!
+ float refindex = (float)(w->timeindex + w->loopSize); // no negative values!
float pitchfactor = w->pitchfactor;
float period = w->period;
float readlag = w->readlag;
@@ -1182,7 +1214,7 @@
xfadevalue -= xfadestep;
}
- *out++ = outputsample;
+ *out++ += outputsample;
refindex += 1;
readlag += readlagstep;
}
@@ -1261,7 +1293,7 @@
static void pitchup(_tSOLAD* const w, float *out)
{
int n = w->blocksize;
- float refindex = (float)(w->timeindex + LOOPSIZE); // no negative values
+ float refindex = (float)(w->timeindex + w->loopSize); // no negative values
float pitchfactor = w->pitchfactor;
float period = w->period;
float readlag = w->readlag;
@@ -1312,7 +1344,7 @@
xfadevalue -= xfadestep;
}
- *out++ = outputsample;
+ *out++ += outputsample;
refindex += 1;
readlag -= readlagstep;
}
@@ -1329,80 +1361,31 @@
int index = (int)floatindex;
float fraction = floatindex - (float)index;
float *buf = w->delaybuf;
- index &= LOOPMASK;
+ index &= (w->loopSize - 1);
return (buf[index] + (fraction * (buf[index+1] - buf[index])));
}
-static void solad_init(_tSOLAD* const w)
-{
- w->timeindex = 0;
- w->xfadevalue = -1;
- w->period = INITPERIOD;
- w->readlag = INITPERIOD;
- w->blocksize = INITPERIOD;
-}
-
//============================================================================================================
// PITCHSHIFT
//============================================================================================================
-static int pitchshift_attackdetect(_tPitchShift* ps)
+void tPitchShift_init (tPitchShift* const psr, tDualPitchDetector* const dpd, int bufSize, LEAF* const leaf)
{
- float envout;
-
- _tPeriodDetection* p = *ps->p;
-
- envout = tEnvPD_tick(&p->env);
-
- if (envout >= 1.0f)
- {
- p->lastmax = p->max;
- if (envout > p->max)
- {
- p->max = envout;
- }
- else
- {
- p->deltamax = envout - p->max;
- p->max = p->max * ps->radius;
- }
- p->deltamax = p->max - p->lastmax;
- }
-
- p->fba = p->fba ? (p->fba - 1) : 0;
-
- return (p->fba == 0 && (p->max > 60 && p->deltamax > 6)) ? 1 : 0;
+ tPitchShift_initToPool(psr, dpd, bufSize, &leaf->mempool);
}
-void tPitchShift_init (tPitchShift* const psr, tPeriodDetection* pd, float* out, int bufSize, LEAF* const leaf)
+void tPitchShift_initToPool (tPitchShift* const psr, tDualPitchDetector* const dpd, int bufSize, tMempool* const mp)
{
- tPitchShift_initToPool(psr, pd, out, bufSize, &leaf->mempool);
-}
-
-void tPitchShift_initToPool (tPitchShift* const psr, tPeriodDetection* const pd, float* out, int bufSize, tMempool* const mp)
-{
_tMempool* m = *mp;
- _tPitchShift* ps = *psr = (_tPitchShift*) mpool_calloc(sizeof(_tPitchShift), m);
+ _tPitchShift* ps = *psr = (_tPitchShift*) mpool_alloc(sizeof(_tPitchShift), m);
ps->mempool = m;
- _tPeriodDetection* p = *pd;
-
- ps->p = pd;
-
- ps->outBuffer = out;
+ ps->pd = *dpd;
ps->bufSize = bufSize;
- ps->frameSize = p->frameSize;
- ps->framesPerBuffer = ps->bufSize / ps->frameSize;
- ps->curBlock = 1;
- ps->lastBlock = 0;
- ps->index = 0;
- ps->pitchFactor = 1.0f;
+ ps->pickiness = 0.0f;
- tSOLAD_initToPool(&ps->sola, mp);
-
- tHighpass_initToPool(&ps->hp, HPFREQ, mp);
-
+ tSOLAD_initToPool(&ps->sola, pow(2.0, ceil(log2(ps->bufSize * 2.0))), mp);
tSOLAD_setPitchFactor(&ps->sola, DEFPITCHRATIO);
}
@@ -1411,447 +1394,318 @@
_tPitchShift* ps = *psr;
tSOLAD_free(&ps->sola);
- tHighpass_free(&ps->hp);
mpool_free((char*)ps, ps->mempool);
}
-void tPitchShift_setPitchFactor(tPitchShift* psr, float pf)
+void tPitchShift_shiftBy (tPitchShift* const psr, float factor, float* in, float* out)
{
_tPitchShift* ps = *psr;
+ LEAF* leaf = ps->mempool->leaf;
- ps->pitchFactor = pf;
-}
-
-float tPitchShift_shift (tPitchShift* psr)
-{
- _tPitchShift* ps = *psr;
- _tPeriodDetection* p = *ps->p;
-
- float period, out;
- int i, iLast;
-
- i = p->i;
- iLast = p->iLast;
-
- out = tHighpass_tick(&ps->hp, ps->outBuffer[iLast]);
-
- if (p->indexstore >= ps->frameSize)
+ float detected = tDualPitchDetector_getFrequency(&ps->pd);
+ float periodicity = tDualPitchDetector_getPeriodicity(&ps->pd);
+ if (detected > 0.0f && periodicity > ps->pickiness)
{
- period = tPeriodDetection_getPeriod(&p);
-
- if(pitchshift_attackdetect(ps) == 1)
- {
- p->fba = 5;
- tSOLAD_setReadLag(&ps->sola, p->windowSize);
- }
-
+ float period = leaf->sampleRate / detected;
tSOLAD_setPeriod(&ps->sola, period);
- tSOLAD_setPitchFactor(&ps->sola, ps->pitchFactor);
-
- tSOLAD_ioSamples(&ps->sola, &(p->inBuffer[i]), &(ps->outBuffer[i]), ps->frameSize);
+ tSOLAD_setPitchFactor(&ps->sola, factor);
}
-
- return out;
+
+ tSOLAD_ioSamples(&ps->sola, in, out, ps->bufSize);
}
-float tPitchShift_shiftToFreq (tPitchShift* psr, float freq)
+void tPitchShift_shiftTo (tPitchShift* const psr, float freq, float* in, float* out)
{
_tPitchShift* ps = *psr;
- _tPeriodDetection* p = *ps->p;
LEAF* leaf = ps->mempool->leaf;
- float period, out;
- int i, iLast;
-
- i = p->i;
- iLast = p->iLast;
-
- out = tHighpass_tick(&ps->hp, ps->outBuffer[iLast]);
-
- if (p->indexstore >= ps->frameSize)
+ float detected = tDualPitchDetector_getFrequency(&ps->pd);
+ float periodicity = tDualPitchDetector_getPeriodicity(&ps->pd);
+ if (detected > 0.0f && periodicity > ps->pickiness)
{
- period = tPeriodDetection_getPeriod(&p);
-
- if(pitchshift_attackdetect(ps) == 1)
- {
- p->fba = 5;
- tSOLAD_setReadLag(&ps->sola, p->windowSize);
- }
-
- tSOLAD_setPeriod(&ps->sola, period);
-
- if (period != 0) ps->pitchFactor = period * freq * leaf->invSampleRate;
- else ps->pitchFactor = 1.0f;
-
- tSOLAD_setPitchFactor(&ps->sola, ps->pitchFactor);
-
- tSOLAD_ioSamples(&ps->sola, &(p->inBuffer[i]), &(ps->outBuffer[i]), ps->frameSize);
+ float period = 1.0f / detected;
+ float factor = freq * period;
+ tSOLAD_setPeriod(&ps->sola, leaf->sampleRate * period);
+ tSOLAD_setPitchFactor(&ps->sola, factor);
}
- return out;
+
+ tSOLAD_ioSamples(&ps->sola, in, out, ps->bufSize);
}
-float tPitchShift_shiftToFunc (tPitchShift* psr, float (*fun)(float))
+void tPitchShift_setPickiness (tPitchShift* const psr, float p)
{
_tPitchShift* ps = *psr;
- _tPeriodDetection* p = *ps->p;
- float period, out;
- int i, iLast;
-
- i = p->i;
- iLast = p->iLast;
-
- out = tHighpass_tick(&ps->hp, ps->outBuffer[iLast]);
-
- if (p->indexstore >= ps->frameSize)
- {
- period = tPeriodDetection_getPeriod(&p);
-
- if(pitchshift_attackdetect(ps) == 1)
- {
- p->fba = 5;
- tSOLAD_setReadLag(&ps->sola, p->windowSize);
- }
-
- tSOLAD_setPeriod(&ps->sola, period);
-
- ps->pitchFactor = period/fun(period);
- tSOLAD_setPitchFactor(&ps->sola, ps->pitchFactor);
-
- tSOLAD_ioSamples(&ps->sola, &(p->inBuffer[i]), &(ps->outBuffer[i]), ps->frameSize);
-
- ps->curBlock++;
- if (ps->curBlock >= p->framesPerBuffer) ps->curBlock = 0;
- ps->lastBlock++;
- if (ps->lastBlock >= ps->framesPerBuffer) ps->lastBlock = 0;
- }
-
- return out;
+ ps->pickiness = p;
}
+
//============================================================================================================
-// RETUNE
+// SIMPLERETUNE
//============================================================================================================
-void tRetune_init(tRetune* const rt, int numVoices, int bufSize, int frameSize, LEAF* const leaf)
+void tSimpleRetune_init (tSimpleRetune* const rt, int numVoices, float minInputFreq, float maxInputFreq, int bufSize, LEAF* const leaf)
{
- tRetune_initToPool(rt, numVoices, bufSize, frameSize, &leaf->mempool);
+ tSimpleRetune_initToPool(rt, numVoices, minInputFreq, maxInputFreq, bufSize, &leaf->mempool);
}
-void tRetune_initToPool (tRetune* const rt, int numVoices, int bufSize, int frameSize, tMempool* const mp)
+void tSimpleRetune_initToPool (tSimpleRetune* const rt, int numVoices, float minInputFreq, float maxInputFreq, int bufSize, tMempool* const mp)
{
_tMempool* m = *mp;
- _tRetune* r = *rt = (_tRetune*) mpool_alloc(sizeof(_tRetune), m);
+ _tSimpleRetune* r = *rt = (_tSimpleRetune*) mpool_calloc(sizeof(_tSimpleRetune), m);
r->mempool = *mp;
r->bufSize = bufSize;
- r->frameSize = frameSize;
r->numVoices = numVoices;
r->inBuffer = (float*) mpool_calloc(sizeof(float) * r->bufSize, m);
- r->outBuffers = (float**) mpool_calloc(sizeof(float*) * r->numVoices, m);
+ r->outBuffer = (float*) mpool_calloc(sizeof(float) * r->bufSize, m);
- r->hopSize = DEFHOPSIZE;
- r->windowSize = DEFWINDOWSIZE;
- r->fba = FBA;
- tRetune_setTimeConstant(rt, DEFTIMECONSTANT);
+ r->index = 0;
- r->inputPeriod = 0.0f;
-
r->ps = (tPitchShift*) mpool_calloc(sizeof(tPitchShift) * r->numVoices, m);
- r->pitchFactor = (float*) mpool_calloc(sizeof(float) * r->numVoices, m);
- r->tickOutput = (float*) mpool_calloc(sizeof(float) * r->numVoices, m);
- for (int i = 0; i < r->numVoices; ++i)
- {
- r->outBuffers[i] = (float*) mpool_calloc(sizeof(float) * r->bufSize, m);
- }
+ r->shiftValues = (float*) mpool_calloc(sizeof(float) * r->numVoices, m);
- tPeriodDetection_initToPool(&r->pd, r->inBuffer, r->outBuffers[0], r->bufSize, r->frameSize, mp);
-
+ r->minInputFreq = minInputFreq;
+ r->maxInputFreq = maxInputFreq;
+ tDualPitchDetector_initToPool(&r->dp, r->minInputFreq, r->maxInputFreq, r->inBuffer, r->bufSize, mp);
+
for (int i = 0; i < r->numVoices; ++i)
{
- tPitchShift_initToPool(&r->ps[i], &r->pd, r->outBuffers[i], r->bufSize, mp);
+ tPitchShift_initToPool(&r->ps[i], &r->dp, r->bufSize, mp);
}
+
+ r->shiftFunction = &tPitchShift_shiftBy;
}
-void tRetune_free (tRetune* const rt)
+void tSimpleRetune_free (tSimpleRetune* const rt)
{
- _tRetune* r = *rt;
+ _tSimpleRetune* r = *rt;
- tPeriodDetection_free(&r->pd);
+ tDualPitchDetector_free(&r->dp);
for (int i = 0; i < r->numVoices; ++i)
{
tPitchShift_free(&r->ps[i]);
- mpool_free((char*)r->outBuffers[i], r->mempool);
}
- mpool_free((char*)r->tickOutput, r->mempool);
- mpool_free((char*)r->pitchFactor, r->mempool);
+ mpool_free((char*)r->shiftValues, r->mempool);
mpool_free((char*)r->ps, r->mempool);
mpool_free((char*)r->inBuffer, r->mempool);
- mpool_free((char*)r->outBuffers, r->mempool);
+ mpool_free((char*)r->outBuffer, r->mempool);
mpool_free((char*)r, r->mempool);
}
-float* tRetune_tick(tRetune* const rt, float sample)
+float tSimpleRetune_tick(tSimpleRetune* const rt, float sample)
{
- _tRetune* r = *rt;
+ _tSimpleRetune* r = *rt;
- r->inputPeriod = tPeriodDetection_tick(&r->pd, sample);
+ tDualPitchDetector_tick(&r->dp, sample);
- for (int v = 0; v < r->numVoices; ++v)
+ r->inBuffer[r->index] = sample;
+ float out = r->outBuffer[r->index];
+ r->outBuffer[r->index] = 0.0f;
+
+ if (++r->index >= r->bufSize)
{
- r->tickOutput[v] = tPitchShift_shift(&r->ps[v]);
+ for (int i = 0; i < r->numVoices; ++i)
+ {
+ r->shiftFunction(&r->ps[i], r->shiftValues[i], r->inBuffer, r->outBuffer);
+ }
+ r->index = 0;
}
- return r->tickOutput;
+ return out;
}
-void tRetune_setNumVoices(tRetune* const rt, int numVoices)
+void tSimpleRetune_setMode (tSimpleRetune* const rt, int mode)
{
- _tRetune* r = *rt;
+ _tSimpleRetune* r = *rt;
+ if (mode > 0) r->shiftFunction = &tPitchShift_shiftTo;
+ else r->shiftFunction = &tPitchShift_shiftBy;
+}
+
+void tSimpleRetune_setNumVoices(tSimpleRetune* const rt, int numVoices)
+{
+ _tSimpleRetune* r = *rt;
+
int bufSize = r->bufSize;
- int frameSize = r->frameSize;
+ float minInputFreq = r->minInputFreq;
+ float maxInputFreq = r->maxInputFreq;
tMempool mempool = r->mempool;
- tRetune_free(rt);
- tRetune_initToPool(rt, numVoices, bufSize, frameSize, &mempool);
+ tSimpleRetune_free(rt);
+ tSimpleRetune_initToPool(rt, minInputFreq, maxInputFreq, numVoices, bufSize, &mempool);
}
-void tRetune_setPitchFactors(tRetune* const rt, float pf)
+void tSimpleRetune_setPickiness (tSimpleRetune* const rt, float p)
{
- _tRetune* r = *rt;
+ _tSimpleRetune* r = *rt;
for (int i = 0; i < r->numVoices; ++i)
{
- r->pitchFactor[i] = pf;
- tPitchShift_setPitchFactor(&r->ps[i], r->pitchFactor[i]);
+ tPitchShift_setPickiness(&r->ps[i], p);
}
}
-void tRetune_setPitchFactor(tRetune* const rt, float pf, int voice)
+void tSimpleRetune_tuneVoices(tSimpleRetune* const rt, float* t)
{
- _tRetune* r = *rt;
+ _tSimpleRetune* r = *rt;
- r->pitchFactor[voice] = pf;
- tPitchShift_setPitchFactor(&r->ps[voice], r->pitchFactor[voice]);
+ for (int i = 0; i < r->numVoices; ++i)
+ {
+ r->shiftValues[i] = t[i];
+ }
}
-void tRetune_setTimeConstant(tRetune* const rt, float tc)
+void tSimpleRetune_tuneVoice(tSimpleRetune* const rt, int voice, float t)
{
- _tRetune* r = *rt;
- LEAF* leaf = r->mempool->leaf;
+ _tSimpleRetune* r = *rt;
- r->timeConstant = tc;
- r->radius = expf(-1000.0f * r->hopSize * leaf->invSampleRate / r->timeConstant);
+ r->shiftValues[voice] = t;
}
-void tRetune_setHopSize(tRetune* const rt, int hs)
+float tSimpleRetune_getInputFrequency (tSimpleRetune* const rt)
{
- _tRetune* r = *rt;
+ _tSimpleRetune* r = *rt;
- r->hopSize = hs;
- tPeriodDetection_setHopSize(&r->pd, r->hopSize);
+ return tDualPitchDetector_getFrequency(&r->dp);
}
-void tRetune_setWindowSize(tRetune* const rt, int ws)
-{
- _tRetune* r = *rt;
-
- r->windowSize = ws;
- tPeriodDetection_setWindowSize(&r->pd, r->windowSize);
-}
-
-void tRetune_setFidelityThreshold(tRetune* const rt, float threshold)
-{
- _tRetune* r = *rt;
-
- tPeriodDetection_setFidelityThreshold(&r->pd, threshold);
-}
-
-float tRetune_getInputPeriod(tRetune* const rt)
-{
- _tRetune* r = *rt;
- LEAF* leaf = r->mempool->leaf;
-
- return (r->inputPeriod * leaf->invSampleRate);
-}
-
-float tRetune_getInputFreq(tRetune* const rt)
-{
- _tRetune* r = *rt;
- LEAF* leaf = r->mempool->leaf;
-
- return 1.0f/(r->inputPeriod * leaf->invSampleRate);
-}
-
//============================================================================================================
-// AUTOTUNE
+// RETUNE
//============================================================================================================
-void tAutotune_init (tAutotune* const rt, int numVoices, int bufSize, int frameSize, LEAF* const leaf)
+void tRetune_init(tRetune* const rt, int numVoices, float minInputFreq, float maxInputFreq, int bufSize, LEAF* const leaf)
{
- tAutotune_initToPool(rt, numVoices, bufSize, frameSize, &leaf->mempool);
+ tRetune_initToPool(rt, numVoices, minInputFreq, maxInputFreq, bufSize, &leaf->mempool);
}
-void tAutotune_initToPool (tAutotune* const rt, int numVoices, int bufSize, int frameSize, tMempool* const mp)
+void tRetune_initToPool (tRetune* const rt, int numVoices, float minInputFreq, float maxInputFreq, int bufSize, tMempool* const mp)
{
_tMempool* m = *mp;
- _tAutotune* r = *rt = (_tAutotune*) mpool_alloc(sizeof(_tAutotune), m);
+ _tRetune* r = *rt = (_tRetune*) mpool_calloc(sizeof(_tRetune), m);
r->mempool = *mp;
r->bufSize = bufSize;
- r->frameSize = frameSize;
r->numVoices = numVoices;
- r->inBuffer = (float*) mpool_alloc(sizeof(float) * r->bufSize, m);
- r->outBuffers = (float**) mpool_alloc(sizeof(float*) * r->numVoices, m);
+ r->pdBuffer = (float*) mpool_alloc(sizeof(float) * 2048, m);
+ r->inBuffer = (float*) mpool_calloc(sizeof(float) * r->bufSize, m);
+
+ r->index = 0;
+
+ r->ps = (tPitchShift*) mpool_calloc(sizeof(tPitchShift) * r->numVoices, m);
+ r->shiftValues = (float*) mpool_calloc(sizeof(float) * r->numVoices, m);
+ r->outBuffers = (float**) mpool_calloc(sizeof(float*) * r->numVoices, m);
+ r->output = (float*) mpool_calloc(sizeof(float) * r->numVoices, m);
- r->hopSize = DEFHOPSIZE;
- r->windowSize = DEFWINDOWSIZE;
- r->fba = FBA;
- tAutotune_setTimeConstant(rt, DEFTIMECONSTANT);
-
- r->ps = (tPitchShift*) mpool_alloc(sizeof(tPitchShift) * r->numVoices, m);
- r->freq = (float*) mpool_alloc(sizeof(float) * r->numVoices, m);
- r->tickOutput = (float*) mpool_alloc(sizeof(float) * r->numVoices, m);
- for (int i = 0; i < r->numVoices; ++i)
- {
- r->outBuffers[i] = (float*) mpool_alloc(sizeof(float) * r->bufSize, m);
- }
-
- tPeriodDetection_initToPool(&r->pd, r->inBuffer, r->outBuffers[0], r->bufSize, r->frameSize, mp);
+ r->minInputFreq = minInputFreq;
+ r->maxInputFreq = maxInputFreq;
+ tDualPitchDetector_initToPool(&r->dp, r->minInputFreq, r->maxInputFreq, r->pdBuffer, 2048, mp);
for (int i = 0; i < r->numVoices; ++i)
{
- tPitchShift_initToPool(&r->ps[i], &r->pd, r->outBuffers[i], r->bufSize, mp);
+ tPitchShift_initToPool(&r->ps[i], &r->dp, r->bufSize, mp);
+ r->outBuffers[i] = (float*) mpool_calloc(sizeof(float) * r->bufSize, m);
}
- r->inputPeriod = 0.0f;
- r->shiftOn = 0;
+ r->shiftFunction = &tPitchShift_shiftBy;
}
-void tAutotune_free (tAutotune* const rt)
+void tRetune_free (tRetune* const rt)
{
- _tAutotune* r = *rt;
+ _tRetune* r = *rt;
- tPeriodDetection_free(&r->pd);
+ tDualPitchDetector_free(&r->dp);
for (int i = 0; i < r->numVoices; ++i)
{
tPitchShift_free(&r->ps[i]);
mpool_free((char*)r->outBuffers[i], r->mempool);
}
- mpool_free((char*)r->tickOutput, r->mempool);
- mpool_free((char*)r->freq, r->mempool);
+ mpool_free((char*)r->shiftValues, r->mempool);
mpool_free((char*)r->ps, r->mempool);
+ mpool_free((char*)r->pdBuffer, r->mempool);
mpool_free((char*)r->inBuffer, r->mempool);
mpool_free((char*)r->outBuffers, r->mempool);
+ mpool_free((char*)r->output, r->mempool);
mpool_free((char*)r, r->mempool);
}
-float* tAutotune_tick(tAutotune* const rt, float sample)
+float* tRetune_tick(tRetune* const rt, float sample)
{
- _tAutotune* r = *rt;
+ _tRetune* r = *rt;
- float tempPeriod = tPeriodDetection_tick(&r->pd, sample);
- if (tempPeriod < 1000.0f) //to avoid trying to follow consonants JS
+ tDualPitchDetector_tick(&r->dp, sample);
+
+ r->inBuffer[r->index] = sample;
+ for (int i = 0; i < r->numVoices; ++i)
{
- r->inputPeriod = tempPeriod;
+ r->output[i] = r->outBuffers[i][r->index];
+ r->outBuffers[i][r->index] = 0.0f;
}
- for (int v = 0; v < r->numVoices; ++v)
+ if (++r->index >= r->bufSize)
{
- r->tickOutput[v] = tPitchShift_shiftToFreq(&r->ps[v], r->freq[v]);
+ for (int i = 0; i < r->numVoices; ++i)
+ {
+ r->shiftFunction(&r->ps[i], r->shiftValues[i], r->inBuffer, r->outBuffers[i]);
+ }
+ r->index = 0;
}
-
- return r->tickOutput;
+
+ return r->output;
}
-void tAutotune_setNumVoices(tAutotune* const rt, int numVoices)
+void tRetune_setMode (tRetune* const rt, int mode)
{
- _tAutotune* r = *rt;
+ _tRetune* r = *rt;
- int bufSize = r->bufSize;
- int frameSize = r->frameSize;
- tMempool mempool = r->mempool;
-
- tAutotune_free(rt);
- tAutotune_initToPool(rt, numVoices, bufSize, frameSize, &mempool);
+ if (mode > 0) r->shiftFunction = &tPitchShift_shiftTo;
+ else r->shiftFunction = &tPitchShift_shiftBy;
}
-void tAutotune_setFreqs(tAutotune* const rt, float f)
+void tRetune_setPickiness (tRetune* const rt, float p)
{
- _tAutotune* r = *rt;
+ _tRetune* r = *rt;
- for (int i = 0; i < r->numVoices; ++i)
- {
- r->freq[i] = f;
- }
+ tDualPitchDetector_setPeriodicityThreshold(&r->dp, p);
}
-void tAutotune_setFreq(tAutotune* const rt, float f, int voice)
+void tRetune_setNumVoices(tRetune* const rt, int numVoices)
{
- _tAutotune* r = *rt;
+ _tRetune* r = *rt;
- r->freq[voice] = f;
-}
-
-void tAutotune_setTimeConstant(tAutotune* const rt, float tc)
-{
- _tAutotune* r = *rt;
- LEAF* leaf = r->mempool->leaf;
+ int bufSize = r->bufSize;
+ float minInputFreq = r->minInputFreq;
+ float maxInputFreq = r->maxInputFreq;
+ tMempool mempool = r->mempool;
- r->timeConstant = tc;
- r->radius = expf(-1000.0f * r->hopSize * leaf->invSampleRate / r->timeConstant);
+ tRetune_free(rt);
+ tRetune_initToPool(rt, minInputFreq, maxInputFreq, numVoices, bufSize, &mempool);
}
-void tAutotune_setHopSize(tAutotune* const rt, int hs)
+void tRetune_tuneVoices(tRetune* const rt, float* t)
{
- _tAutotune* r = *rt;
+ _tRetune* r = *rt;
- r->hopSize = hs;
- tPeriodDetection_setHopSize(&r->pd, r->hopSize);
+ for (int i = 0; i < r->numVoices; ++i)
+ {
+ r->shiftValues[i] = t[i];
+ }
}
-void tAutotune_setWindowSize(tAutotune* const rt, int ws)
+void tRetune_tuneVoice(tRetune* const rt, int voice, float t)
{
- _tAutotune* r = *rt;
+ _tRetune* r = *rt;
- r->windowSize = ws;
- tPeriodDetection_setWindowSize(&r->pd, r->windowSize);
+ r->shiftValues[voice] = t;
}
-void tAutotune_setFidelityThreshold(tAutotune* const rt, float threshold)
+float tRetune_getInputFrequency (tRetune* const rt)
{
- _tAutotune* r = *rt;
-
- tPeriodDetection_setFidelityThreshold(&r->pd, threshold);
-}
-
-void tAutotune_setAlpha (tAutotune* rt, float alpha)
-{
- _tAutotune* r = *rt;
- tPeriodDetection_setAlpha(&r->pd, alpha);
-}
-
-void tAutotune_setTolerance (tAutotune* rt, float tolerance)
-{
- _tAutotune* r = *rt;
- tPeriodDetection_setTolerance(&r->pd, tolerance);
-}
-
-float tAutotune_getInputPeriod(tAutotune* const rt)
-{
- _tAutotune* r = *rt;
+ _tRetune* r = *rt;
- return r->inputPeriod;
-}
-
-float tAutotune_getInputFreq(tAutotune* const rt)
-{
- _tAutotune* r = *rt;
-
- return 1.0f/r->inputPeriod;
+ return tDualPitchDetector_getFrequency(&r->dp);
}
//============================================================================================================
--- a/leaf/Src/leaf-envelopes.c
+++ b/leaf/Src/leaf-envelopes.c
@@ -23,6 +23,7 @@
#endif
+#if LEAF_INCLUDE_ADSR_TABLES
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ Envelope ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ //
void tEnvelope_init(tEnvelope* const envlp, float attack, float decay, int loop, LEAF* const leaf)
{
@@ -211,9 +212,9 @@
return env->next;
}
+#endif // LEAF_INCLUDE_ADSR_TABLES
-
-
+#if LEAF_INCLUDE_ADSR_TABLES
/* ADSR */
void tADSR_init(tADSR* const adsrenv, float attack, float decay, float sustain, float release, LEAF* const leaf)
{
@@ -482,7 +483,7 @@
return adsr->next;
}
-
+#endif // LEAF_INCLUDE_ADSR_TABLES
--- a/leaf/Src/leaf-filters.c
+++ b/leaf/Src/leaf-filters.c
@@ -900,6 +900,7 @@
svf->a3 = svf->g * svf->a2;
}
+#if LEAF_INCLUDE_FILTERTAN_TABLE
// Efficient version of tSVF where frequency is set based on 12-bit integer input for lookup in tanh wavetable.
void tEfficientSVF_init(tEfficientSVF* const svff, SVFType type, uint16_t input, float Q, LEAF* const leaf)
{
@@ -970,6 +971,7 @@
svf->a2 = svf->g * svf->a1;
svf->a3 = svf->g * svf->a2;
}
+#endif // LEAF_INCLUDE_FILTERTAN_TABLE
/* Highpass */
void tHighpass_init(tHighpass* const ft, float freq, LEAF* const leaf)
--- a/leaf/Src/leaf-math.c
+++ b/leaf/Src/leaf-math.c
@@ -827,11 +827,9 @@
return fmax(fmin(a, b), fmin(fmax(a, b), c));
}
+#if LEAF_INCLUDE_MINBLEP_TABLES
/// MINBLEPS
-
// https://github.com/MrBlueXav/Dekrispator_v2 blepvco.c
-
-
void place_step_dd(float *buffer, int index, float phase, float w, float scale)
{
float r;
@@ -874,3 +872,4 @@
index++;
}
}
+#endif // LEAF_INCLUDE_MINBLEP_TABLES
--- a/leaf/Src/leaf-mempool.c
+++ b/leaf/Src/leaf-mempool.c
@@ -249,8 +249,7 @@
pool->usize += pool->leaf->header_size + node_to_alloc->size;
// Format the new pool
- char* new_pool = (char*)node_to_alloc->pool;
- for (int i = 0; i < node_to_alloc->size; i++) new_pool[i] = 0;
+ for (int i = 0; i < node_to_alloc->size; i++) node_to_alloc->pool[i] = 0;
// Return the pool of the allocated node;
return node_to_alloc->pool;
}
@@ -410,7 +409,7 @@
void tMempool_init(tMempool* const mp, char* memory, size_t size, LEAF* const leaf)
{
- tMempool_initToPool(mp, memory, size, &leaf->mempool, leaf);
+ tMempool_initToPool(mp, memory, size, &leaf->mempool);
}
void tMempool_free(tMempool* const mp)
@@ -420,7 +419,7 @@
mpool_free((char*)m, m->mempool);
}
-void tMempool_initToPool (tMempool* const mp, char* memory, size_t size, tMempool* const mem, LEAF* const leaf)
+void tMempool_initToPool (tMempool* const mp, char* memory, size_t size, tMempool* const mem)
{
_tMempool* mm = *mem;
_tMempool* m = *mp = (_tMempool*) mpool_alloc(sizeof(_tMempool), mm);
--- a/leaf/Src/leaf-oscillators.c
+++ b/leaf/Src/leaf-oscillators.c
@@ -76,7 +76,6 @@
samp1 = c->waveTable[intPart];
return (samp0 + (samp1 - samp0) * fracPart);
-
}
void tTableSampleRateChanged(tTable* const cy)
@@ -87,6 +86,7 @@
c->inc = c->freq * leaf->invSampleRate;
}
+#if LEAF_INCLUDE_SINE_TABLE
// Cycle
void tCycle_init(tCycle* const cy, LEAF* const leaf)
{
@@ -156,7 +156,9 @@
c->inc = c->freq * leaf->invSampleRate;
}
+#endif // LEAF_INCLUDE_SINE_TABLE
+#if LEAF_INCLUDE_TRIANGLE_TABLE
//========================================================================
/* Triangle */
void tTriangle_init(tTriangle* const cy, LEAF* const leaf)
@@ -227,7 +229,9 @@
c->inc = c->freq * leaf->invSampleRate;
}
+#endif // LEAF_INCLUDE_TRIANGLE_TABLE
+#if LEAF_INCLUDE_SQUARE_TABLE
//========================================================================
/* Square */
void tSquare_init(tSquare* const cy, LEAF* const leaf)
@@ -297,7 +301,9 @@
c->inc = c->freq * leaf->invSampleRate;
}
+#endif // LEAF_INCLUDE_SQUARE_TABLE
+#if LEAF_INCLUDE_SAWTOOTH_TABLE
//=====================================================================
// Sawtooth
void tSawtooth_init(tSawtooth* const cy, LEAF* const leaf)
@@ -367,6 +373,7 @@
c->inc = c->freq * leaf->invSampleRate;
}
+#endif // LEAF_INCLUDE_SAWTOOTH_TABLE
//==============================================================================
--- a/leaf/Src/leaf-tables.c
+++ b/leaf/Src/leaf-tables.c
@@ -4,6 +4,7 @@
#include "..\Inc\leaf-tables.h"
#include "..\Inc\leaf-global.h"
+
#else
#include "../Inc/leaf-tables.h"
@@ -11,9 +12,9 @@
#endif
-
#include "stdlib.h"
+#if LEAF_INCLUDE_OVERSAMPLER_TABLES
const float __leaf_table_fir2XLow[32] = { 0.001067048115027622, -0.004557728776555209, -0.016711590887520535, -0.021065500881657994, -0.003828695019946828, 0.01865935152799254, 0.012036365576553658, -0.02064070362810112, -0.02682399333687091, 0.017862623081258543, 0.0492716766870816, -0.004310232755957251, -0.08571879958189704, -0.03828300159135686, 0.18420501161808442, 0.4054061613074031, 0.4054061613074031, 0.18420501161808442, -0.03828300159135686, -0.08571879958189704, -0.004310232755957251, 0.0492716766870816, 0.017862623081258543, -0.02682399333687091, -0.02064070362810112, 0.012036365576553658, 0.01865935152799254, -0.003828695019946828, -0.021065500881657994, -0.016711590887520535, -0.004557728776555209, 0.001067048115027622
};
@@ -45,14 +46,13 @@
-0.0035726927213363046, -0.004307677839041472, -0.00451398893736866, -0.004203029219555798, -0.0034429894732297774, -0.002347699681593795, -0.0010608870493178752, 0.0002616176696267551, 0.0014701293295941087, 0.0024373280210738995, 0.0030709922507173265, 0.003322096376141488, 0.00318733017834542, 0.002706696800527712, 0.001956049351551786, 0.0010364584424907685, 0.00006118480472750677, -0.0008577023023227786, -0.0016217376891380843, -0.00215621955374809, -0.0024168530933362325, -0.002392827139552557, -0.002105611566700304, -0.0016045955886596882, -0.0009595058667715721, -0.0002514846038907312, 0.0004369297346610886, 0.0010309092850789008, 0.0014712649629561752, 0.0017198572703654494, 0.0017624573232133487, 0.0016085750487669262, 0.0012888238057625968, 0.0008499567444557006, 0.0003485912201162041, -0.00015580100244720835, -0.000607656728473499, -0.0009612078105002279, -0.0011847927602402282, -0.0012633390417589486, -0.0011987843551975912, -0.0010085916592065419, -0.0007226903878816747, -0.0003792242746719516, -0.00001975662025403667, 0.0003155390021514345, 0.0005921472961030223, 0.0007845404678866458, 0.0008782421413312541, 0.0008705060394986916, 0.0007697197860148682, 0.0005935643814352129, 0.0003663883172395964, 0.00011608199926386939, -0.0001291740152058233, -0.00034391453642163835, -0.0005078006712943802, -0.0006072812580573203, -0.0006363992327126103, -0.0005966792410792791, -0.0004962768841556523, -0.00034851615605358005, -0.00017002451555728345, 0.000021269501878054377, 0.00020804636935322743, 0.00037520607336543075, 0.0005111129662557197, 0.0006082918945412483, 0.0006636425833116022, 0.0006780841482803052, 0.0006561179367621888, 0.0006044238440905041, 0.0005319258847527823, 0.00044625388761023913, 0.0003584099608999308, 0.0002696485066015727, 0.00019849261073490482, 0.00011952623149469952, 0.00009875809063575779, 0.00003151783634577697
};
const float __leaf_table_fir16XHigh[512] = { -0.00004017374344384353, -0.00003227078919691645, -0.000044582740239682106, -0.000059425359817699515, -0.00007697752128893082, -0.00009737601811785888, -0.0001207053885646365, -0.0001469875004658367, -0.00017617089070723918, -0.00020812277783425573, -0.00024262055862920822, -0.0002793450290387454, -0.00031787504789909166, -0.0003576848687093178, -0.00039814402944626006, -0.0004385193477821247, -0.0004779801054675081, -0.0005156064224889276, -0.0005503998661674507, -0.0005812986840141297, -0.0006071960902571958, -0.0006269579055230081, -0.0006394482697590037, -0.0006435494696099878, -0.0006381976745823161, -0.0006223990810339609, -0.0005952724709135361, -0.0005560644539084499, -0.0005041884015231086, -0.00043924670962451254, -0.0003610522906867853, -0.00026965679983683306, -0.0001653614058088566, -0.00004873297752271577, 0.00007938716594862651, 0.0002178851248768366, 0.0003653745221459382, 0.0005202048736767491, 0.0006804822788501571, 0.000844091795557933, 0.0010087245432410705, 0.001171916285444633, 0.0013310914106543618, 0.0014836070887652329, 0.0016268044135357975, 0.0017580661564216042, 0.0018748692581644735, 0.0019748436871571654, 0.002055827323171664, 0.0021159244704237914, 0.002153555697975211, 0.002167506085967786, 0.0021569688626138744, 0.0021215783384772617, 0.002061435847387089, 0.0019771222276341416, 0.0018697088674027409, 0.0017407508215061904, 0.0015922694449783334, 0.0014267282165683897, 0.0012469961488860717, 0.001056296589672521, 0.0008581466323761644, 0.0006562897137528959, 0.0004546180492460159, 0.00025709020784146465, 0.00006764748603812152, -0.00010987539810307727, -0.00027183788464963423, -0.0004148795460643277, -0.0005360117384990369, -0.0006326924816840852, -0.0007028976477190042, -0.0007451789241688792, -0.0007587025992854616, -0.00074329154026803, -0.00069943732077003, -0.0006283153390612298, -0.0005317674541381928, -0.0004122736350806254, -0.0002728965175373041, -0.00011721898154916056, 0.000050727732077616854, 0.00022654511040849531, 0.0004055654685261572, 0.0005829725151929097, 0.0007539299891718014, 0.0009136968081628693, 0.001057727366040496, 0.0011817838315511687, 0.0012820768752281682, 0.0013553936088779655, 0.0013991567634035874, 0.0014114626691980761, 0.0013911994521601603, 0.001338158623469115, 0.0012529312652788224, 0.0011368782078168052, 0.0009924227419316402, 0.0008225367782712132, 0.0006311126153653432, 0.000422596130820185, 0.00020202566973633374, -0.000025140126274052846, -0.00025314012889659734, -0.00047605825978268214, -0.0006879757889763613, -0.0008831265836660278, -0.001056052961049124, -0.0012017570118505278, -0.0013158443800074546, -0.0013946550179738235, -0.00143537714856422, -0.0014361430413177665, -0.0013961025273104373, -0.0013154698934900741, -0.0011955448624625515, -0.001038705445344848, -0.000848370211905452, -0.0006289357238567322, -0.00038567726087640876, -0.00012464084542349136, 0.00014751424024790855, 0.00042365555592108265, 0.000696381707633601, 0.0009581911739190034, 0.0012016945125591883, 0.0014198129038021875, 0.0016059677163340854, 0.0017542822302381216, 0.0018597489437935104, 0.0019183843680031518, 0.001927370582069373, 0.0018851569558006424, 0.0017915316423764106, 0.0016476681649469273, 0.001456129721890939, 0.0012208322294896099, 0.0009469770920907817, 0.0006409478559993642, 0.0003101659717946291, -0.00003708137047780295, -0.0003918367361265021, -0.0007446984520565823, -0.0010860619549777095, -0.0014063764577860907, -0.001696397687712767, -0.0019474488265779002, -0.002151669227747982, -0.002302249012563522, -0.0023936395957784356, -0.0024217386080201218, -0.002
\ No newline at end of file
-28976477190042, -0.0007451789241688792, -0.0007587025992854616, -0.00074329154026803, -0.00069943732077003, -0.0006283153390612298, -0.0005317674541381928, -0.0004122736350806254, -0.0002728965175373041, -0.00011721898154916056, 0.000050727732077616854, 0.00022654511040849531, 0.0004055654685261572, 0.0005829725151929097, 0.0007539299891718014, 0.0009136968081628693, 0.001057727366040496, 0.0011817838315511687, 0.0012820768752281682, 0.0013553936088779655, 0.0013991567634035874, 0.0014114626691980761, 0.0013911994521601603, 0.001338158623469115, 0.0012529312652788224, 0.0011368782078168052, 0.0009924227419316402, 0.0008225367782712132, 0.0006311126153653432, 0.000422596130820185, 0.00020202566973633374, -0.000025140126274052846, -0.00025314012889659734, -0.00047605825978268214, -0.0006879757889763613, -0.0008831265836660278, -0.001056052961049124, -0.0012017570118505278, -0.0013158443800074546, -0.0013946550179738235, -0.00143537714856422, -0.0014361430413177665, -0.0013961025273104373, -0.0013154698934900741, -0.0011955448624625515, -0.001038705445344848, -0.000848370211905452, -0.0006289357238567322, -0.00038567726087640876, -0.00012464084542349136, 0.00014751424024790855, 0.00042365555592108265, 0.000696381707633601, 0.0009581911739190034, 0.0012016945125591883, 0.0014198129038021875, 0.0016059677163340854, 0.0017542822302381216, 0.0018597489437935104, 0.0019183843680031518, 0.001927370582069373, 0.0018851569558006424, 0.0017915316423764106, 0.0016476681649469273, 0.001456129721890939, 0.0012208322294896099, 0.0009469770920907817, 0.0006409478559993642, 0.0003101659717946291, -0.00003708137047780295, -0.0003918367361265021, -0.0007446984520565823, -0.0010860619549777095, -0.0014063764577860907, -0.001696397687712767, -0.0019474488265779002, -0.002151669227747982, -0.002302249012563522, -0.0023936395957784356, -0.0024217386080201218, -0.002384046464152241, -0.0022797724899456247, -0.0021099040224506474, -0.0018772300452061593, -0.001586318069799396, -0.0012434422926464283, -0.0008564627353582099, -0.0004346583284416864, 0.000011483258960353713, 0.0004705125435918996, 0.0009302983176219571, 0.0013783347882871506, 0.0018020649278141442, 0.002189218072448032, 0.002528151228372692, 0.0028081778185230755, 0.0030198855690580883, 0.0031554218226391927, 0.0032087539967944043, 0.003175891861997494, 0.003055052047477484, 0.0028467769761391067, 0.0025539826540715814, 0.0021819611806385975, 0.00173831289146853, 0.0012328190076443134, 0.0006772405314859651, 0.0000850660373523537, -0.0005287869617277397, -0.001148321137491392, -0.0017568578913237647, -0.002337465469832778, -0.0028733927792042916, -0.0033485134261990474, -0.0037477874636434095, -0.004057705229541436, -0.0042666789949867895, -0.004365411194693107, -0.004347246153946479, -0.0042084293493284755, -0.003948276264434998, -0.0035693427342337308, -0.003077468630328199, -0.002481682761858642, -0.0017941893541420268, -0.0010300505400156208, -0.00020699101191350578, 0.0006550244158311212, 0.0015341931983222652, 0.002407385154286287, 0.0032506853111441327, 0.004039981949981368, 0.004751579445675196, 0.0053628234864281235, 0.0058527242916193226, 0.006202559568610708, 0.006396443797782178, 0.006421849969755556, 0.006270068071543294, 0.005936587372391708, 0.0054213915962429745, 0.004729156264045173, 0.0038693427245538904, 0.0028561826064778697, 0.0017085458613360902, 0.0004497040612160084, -0.0008930343940838381, -0.002288760766598498, -0.0037035572532650445, -0.005101096327651239, -0.006443406350064504, -0.007691613708744422, -0.008806783345605503, -0.009750779708566895, -0.010487104621962649, -0.010981761556592558, -0.0
\ No newline at end of file
976477190042, -0.0007451789241688792, -0.0007587025992854616, -0.00074329154026803, -0.00069943732077003, -0.0006283153390612298, -0.0005317674541381928, -0.0004122736350806254, -0.0002728965175373041, -0.00011721898154916056, 0.000050727732077616854, 0.00022654511040849531, 0.0004055654685261572, 0.0005829725151929097, 0.0007539299891718014, 0.0009136968081628693, 0.001057727366040496, 0.0011817838315511687, 0.0012820768752281682, 0.0013553936088779655, 0.0013991567634035874, 0.0014114626691980761, 0.0013911994521601603, 0.001338158623469115, 0.0012529312652788224, 0.0011368782078168052, 0.0009924227419316402, 0.0008225367782712132, 0.0006311126153653432, 0.000422596130820185, 0.00020202566973633374, -0.000025140126274052846, -0.00025314012889659734, -0.00047605825978268214, -0.0006879757889763613, -0.0008831265836660278, -0.001056052961049124, -0.0012017570118505278, -0.0013158443800074546, -0.0013946550179738235, -0.00143537714856422, -0.0014361430413177665, -0.0013961025273104373, -0.0013154698934900741, -0.0011955448624625515, -0.001038705445344848, -0.000848370211905452, -0.0006289357238567322, -0.00038567726087640876, -0.00012464084542349136, 0.00014751424024790855, 0.00042365555592108265, 0.000696381707633601, 0.0009581911739190034, 0.0012016945125591883, 0.0014198129038021875, 0.0016059677163340854, 0.0017542822302381216, 0.0018597489437935104, 0.0019183843680031518, 0.001927370582069373, 0.0018851569558006424, 0.0017915316423764106, 0.0016476681649469273, 0.001456129721890939, 0.0012208322294896099, 0.0009469770920907817, 0.0006409478559993642, 0.0003101659717946291, -0.00003708137047780295, -0.0003918367361265021, -0.0007446984520565823, -0.0010860619549777095, -0.0014063764577860907, -0.001696397687712767, -0.0019474488265779002, -0.002151669227747982, -0.002302249012563522, -0.0023936395957784356, -0.0024217386080201218, -0.002384046464152241, -0.0022797724899456247, -0.0021099040224506474, -0.0018772300452061593, -0.001586318069799396, -0.0012434422926464283, -0.0008564627353582099, -0.0004346583284416864, 0.000011483258960353713, 0.0004705125435918996, 0.0009302983176219571, 0.0013783347882871506, 0.0018020649278141442, 0.002189218072448032, 0.002528151228372692, 0.0028081778185230755, 0.0030198855690580883, 0.0031554218226391927, 0.0032087539967944043, 0.003175891861997494, 0.003055052047477484, 0.0028467769761391067, 0.0025539826540715814, 0.0021819611806385975, 0.00173831289146853, 0.0012328190076443134, 0.0006772405314859651, 0.0000850660373523537, -0.0005287869617277397, -0.001148321137491392, -0.0017568578913237647, -0.002337465469832778, -0.0028733927792042916, -0.0033485134261990474, -0.0037477874636434095, -0.004057705229541436, -0.0042666789949867895, -0.004365411194693107, -0.004347246153946479, -0.0042084293493284755, -0.003948276264434998, -0.0035693427342337308, -0.003077468630328199, -0.002481682761858642, -0.0017941893541420268, -0.0010300505400156208, -0.00020699101191350578, 0.0006550244158311212, 0.0015341931983222652, 0.002407385154286287, 0.0032506853111441327, 0.004039981949981368, 0.004751579445675196, 0.0053628234864281235, 0.0058527242916193226, 0.006202559568610708, 0.006396443797782178, 0.006421849969755556, 0.006270068071543294, 0.005936587372391708, 0.0054213915962429745, 0.004729156264045173, 0.0038693427245538904, 0.0028561826064778697, 0.0017085458613360902, 0.0004497040612160084, -0.0008930343940838381, -0.002288760766598498, -0.0037035572532650445, -0.005101096327651239, -0.006443406350064504, -0.007691613708744422, -0.008806783345605503, -0.009750779708566895, -0.010487104621962649, -0.010981761556592558, -0.011
\ No newline at end of file
};
const float __leaf_table_fir32XHigh[512] = { 0.00001695726883388158, 0.000007675466747345142, 0.000009369969074343828, 0.000011279085806814155, 0.000013415806582636418, 0.00001579269222570207, 0.000018421887123570193, 0.00002131472780344219, 0.000024481596821410856, 0.000027931521966672674, 0.00003167253546774698, 0.00003571156802204514, 0.00004005385180859527, 0.00004470260388316558, 0.00004965901316017587, 0.00005492204008152043, 0.00006048845305842843, 0.00006635289665744708, 0.00007250665288501187, 0.0000789384885513108, 0.00008563367774264342, 0.00009257537368625661, 0.00009974252621593992, 0.00010711124658254552, 0.00011465337570751053, 0.00012233800287448705, 0.0001301305708291957, 0.00013799197926318244, 0.00014587929227876596, 0.00015374657372226684, 0.000161543746522965, 0.0001692168951984779, 0.00017670780599526637, 0.0001839550739841348, 0.00019089427588832468, 0.00019745677767765902, 0.00020357062514912954, 0.00020916210971675997, 0.0002141545274069432, 0.00021846768000518762, 0.00022202071352577454, 0.00022473075934779818, 0.00022651220405928228, 0.00022728022159501112, 0.0002269491553453425, 0.00022543136577234978, 0.00022264296187547415, 0.0002184968451898252, 0.00021291103136150344, 0.00020580302601570826, 0.00019709428929377538, 0.00018670887176183611, 0.00017457550213741742, 0.00016062706678436397, 0.0001448013951907719, 0.0001270421247034733, 0.00010729940118257597, 0.00008553038364340326, 0.00006169965119086659, 0.00003577991793585758, 0.000007752990690551504, -0.000022389783957090243, -0.00005464753929697829, -0.00008900834335751579, -0.0001254499161703673, -0.00016393632811230729, -0.0002044234554405178, -0.00024684930385593585, -0.000291146274450184, -0.0003372278537321366, -0.00038499799259658716, -0.00043434821843157495, -0.0004851539797413716, -0.000537279458928773, -0.0005905762825387684, -0.0006448805823763886, -0.0007000164290861944, -0.0007557967574505448, -0.0008120214850938284, -0.0008684784362018723, -0.000924945795118327, -0.0009811922513964621, -0.0010369764412132298, -0.0010920476659586364, -0.0011461469777671403, -0.0011990092591572569, -0.0012503626824092186, -0.001299930348337511, -0.0013474327014007098, -0.0013925895075579725, -0.0014351200205514354, -0.0014747442974922531, -0.0015111829899403478, -0.0015441601544571469, -0.0015734040663474662, -0.0015986504297413274, -0.0016196438588602622, -0.0016361410571864347, -0.0016479110521030553, -0.0016547353303458935, -0.0016564077630374632, -0.0016527363435263026, -0.0016435483225404998, -0.0016286956518505767, -0.0016080553748913375, -0.0015815237521207347, -0.0015490117157615478, -0.0015104528831698094, -0.001465823165002548, -0.0014151394219170251, -0.001358416974565312, -0.0012956736049528927, -0.0012270686956067616, -0.001152656073186285, -0.0010726190880063075, -0.0009871267066080157, -0.0008963952696138223, -0.0008006703533508123, -0.0007002299686741377, -0.0005953836139186328, -0.0004864723381871633, -0.0003738679720682553, -0.00025797228061734796, -0.00013921599931306062, -0.000018057446410729332, 0.00010501885598494471, 0.00022950336047164354, 0.00035486342787289485, 0.00048054572124056215, 0.0006059774135387564, 0.0007305691337782367, 0.0008537161333655127, 0.0009748030963864794, 0.0010932046990955392, 0.0012082904750566619, 0.0013194249851955161, 0.0014259733376771368, 0.001527303743896754, 0.0016227897956312704, 0.001711814456379326, 0.0017937737205012431, 0.0018680795987737412, 0.0019341641568400244, 0.0019914815935822066, 0.002039512595508008, 0.0020777684004774366, 0.002105792845115274, 0.002123165845077641, 0.0021295078285898787, 0.002124481676328226, 0.0021077949476114846,
\ No newline at end of file
+ 0.0012820768752281682, 0.0013553936088779655, 0.0013991567634035874, 0.0014114626691980761, 0.0013911994521601603, 0.001338158623469115, 0.0012529312652788224, 0.0011368782078168052, 0.0009924227419316402, 0.0008225367782712132, 0.0006311126153653432, 0.000422596130820185, 0.00020202566973633374, -0.000025140126274052846, -0.00025314012889659734, -0.00047605825978268214, -0.0006879757889763613, -0.0008831265836660278, -0.001056052961049124, -0.0012017570118505278, -0.0013158443800074546, -0.0013946550179738235, -0.00143537714856422, -0.0014361430413177665, -0.0013961025273104373, -0.0013154698934900741, -0.0011955448624625515, -0.001038705445344848, -0.000848370211905452, -0.0006289357238567322, -0.00038567726087640876, -0.00012464084542349136, 0.00014751424024790855, 0.00042365555592108265, 0.000696381707633601, 0.0009581911739190034, 0.0012016945125591883, 0.0014198129038021875, 0.0016059677163340854, 0.0017542822302381216, 0.0018597489437935104, 0.0019183843680031518, 0.001927370582069373, 0.0018851569558006424, 0.0017915316423764106, 0.0016476681649469273, 0.001456129721890939, 0.0012208322294896099, 0.0009469770920907817, 0.0006409478559993642, 0.0003101659717946291, -0.00003708137047780295, -0.0003918367361265021, -0.0007446984520565823, -0.0010860619549777095, -0.0014063764577860907, -0.001696397687712767, -0.0019474488265779002, -0.002151669227747982, -0.002302249012563522, -0.0023936395957784356, -0.0024217386080201218, -0.002384046464152241, -0.0022797724899456247, -0.0021099040224506474, -0.0018772300452061593, -0.001586318069799396, -0.0012434422926464283, -0.0008564627353582099, -0.0004346583284416864, 0.000011483258960353713, 0.0004705125435918996, 0.0009302983176219571, 0.0013783347882871506, 0.0018020649278141442, 0.002189218072448032, 0.002528151228372692, 0.0028081778185230755, 0.0030198855690580883, 0.0031554218226391927, 0.0032087539967944043, 0.003175891861997494, 0.003055052047477484, 0.0028467769761391067, 0.0025539826540715814, 0.0021819611806385975, 0.00173831289146853, 0.0012328190076443134, 0.0006772405314859651, 0.0000850660373523537, -0.0005287869617277397, -0.001148321137491392, -0.0017568578913237647, -0.002337465469832778, -0.0028733927792042916, -0.0033485134261990474, -0.0037477874636434095, -0.004057705229541436, -0.0042666789949867895, -0.004365411194693107, -0.004347246153946479, -0.0042084293493284755, -0.003948276264434998, -0.0035693427342337308, -0.003077468630328199, -0.002481682761858642, -0.0017941893541420268, -0.0010300505400156208, -0.00020699101191350578, 0.0006550244158311212, 0.0015341931983222652, 0.002407385154286287, 0.0032506853111441327, 0.004039981949981368, 0.004751579445675196, 0.0053628234864281235, 0.0058527242916193226, 0.006202559568610708, 0.006396443797782178, 0.006421849969755556, 0.006270068071543294, 0.005936587372391708, 0.0054213915962429745, 0.004729156264045173, 0.0038693427245538904, 0.0028561826064778697, 0.0017085458613360902, 0.0004497040612160084, -0.0008930343940838381, -0.002288760766598498, -0.0037035572532650445, -0.005101096327651239, -0.006443406350064504, -0.007691613708744422, -0.008806783345605503, -0.009750779708566895, -0.010487104621962649, -0.010981761556592558, -0.011204077521465777, -0.01112745993022714, -0.010730106123767362, -0.009995629398181848, -0.008913569832214968, -0.007479799008370572, -0.005696809921316997, -0.0035738648415050284, -0.0011270001382152866, 0.001621100228821588, 0.004641370935060121, 0.00789877655149075, 0.0113528526524623, 0.014958365872953214, 0.018666074072644187, 0.02242359380770534, 0.026176337546106928, 0.029868513059052665, 0.03344415058816
\ No newline at end of file
.0012820768752281682, 0.0013553936088779655, 0.0013991567634035874, 0.0014114626691980761, 0.0013911994521601603, 0.001338158623469115, 0.0012529312652788224, 0.0011368782078168052, 0.0009924227419316402, 0.0008225367782712132, 0.0006311126153653432, 0.000422596130820185, 0.00020202566973633374, -0.000025140126274052846, -0.00025314012889659734, -0.00047605825978268214, -0.0006879757889763613, -0.0008831265836660278, -0.001056052961049124, -0.0012017570118505278, -0.0013158443800074546, -0.0013946550179738235, -0.00143537714856422, -0.0014361430413177665, -0.0013961025273104373, -0.0013154698934900741, -0.0011955448624625515, -0.001038705445344848, -0.000848370211905452, -0.0006289357238567322, -0.00038567726087640876, -0.00012464084542349136, 0.00014751424024790855, 0.00042365555592108265, 0.000696381707633601, 0.0009581911739190034, 0.0012016945125591883, 0.0014198129038021875, 0.0016059677163340854, 0.0017542822302381216, 0.0018597489437935104, 0.0019183843680031518, 0.001927370582069373, 0.0018851569558006424, 0.0017915316423764106, 0.0016476681649469273, 0.001456129721890939, 0.0012208322294896099, 0.0009469770920907817, 0.0006409478559993642, 0.0003101659717946291, -0.00003708137047780295, -0.0003918367361265021, -0.0007446984520565823, -0.0010860619549777095, -0.0014063764577860907, -0.001696397687712767, -0.0019474488265779002, -0.002151669227747982, -0.002302249012563522, -0.0023936395957784356, -0.0024217386080201218, -0.002384046464152241, -0.0022797724899456247, -0.0021099040224506474, -0.0018772300452061593, -0.001586318069799396, -0.0012434422926464283, -0.0008564627353582099, -0.0004346583284416864, 0.000011483258960353713, 0.0004705125435918996, 0.0009302983176219571, 0.0013783347882871506, 0.0018020649278141442, 0.002189218072448032, 0.002528151228372692, 0.0028081778185230755, 0.0030198855690580883, 0.0031554218226391927, 0.0032087539967944043, 0.003175891861997494, 0.003055052047477484, 0.0028467769761391067, 0.0025539826540715814, 0.0021819611806385975, 0.00173831289146853, 0.0012328190076443134, 0.0006772405314859651, 0.0000850660373523537, -0.0005287869617277397, -0.001148321137491392, -0.0017568578913237647, -0.002337465469832778, -0.0028733927792042916, -0.0033485134261990474, -0.0037477874636434095, -0.004057705229541436, -0.0042666789949867895, -0.004365411194693107, -0.004347246153946479, -0.0042084293493284755, -0.003948276264434998, -0.0035693427342337308, -0.003077468630328199, -0.002481682761858642, -0.0017941893541420268, -0.0010300505400156208, -0.00020699101191350578, 0.0006550244158311212, 0.0015341931983222652, 0.002407385154286287, 0.0032506853111441327, 0.004039981949981368, 0.004751579445675196, 0.0053628234864281235, 0.0058527242916193226, 0.006202559568610708, 0.006396443797782178, 0.006421849969755556, 0.006270068071543294, 0.005936587372391708, 0.0054213915962429745, 0.004729156264045173, 0.0038693427245538904, 0.0028561826064778697, 0.0017085458613360902, 0.0004497040612160084, -0.0008930343940838381, -0.002288760766598498, -0.0037035572532650445, -0.005101096327651239, -0.006443406350064504, -0.007691613708744422, -0.008806783345605503, -0.009750779708566895, -0.010487104621962649, -0.010981761556592558, -0.011204077521465777, -0.01112745993022714, -0.010730106123767362, -0.009995629398181848, -0.008913569832214968, -0.007479799008370572, -0.005696809921316997, -0.0035738648415050284, -0.0011270001382152866, 0.001621100228821588, 0.004641370935060121, 0.00789877655149075, 0.0113528526524623, 0.014958365872953214, 0.018666074072644187, 0.02242359380770534, 0.026176337546106928, 0.029868513059052665, 0.0334441505881633
\ No newline at end of file
-012820768752281682, 0.0013553936088779655, 0.0013991567634035874, 0.0014114626691980761, 0.0013911994521601603, 0.001338158623469115, 0.0012529312652788224, 0.0011368782078168052, 0.0009924227419316402, 0.0008225367782712132, 0.0006311126153653432, 0.000422596130820185, 0.00020202566973633374, -0.000025140126274052846, -0.00025314012889659734, -0.00047605825978268214, -0.0006879757889763613, -0.0008831265836660278, -0.001056052961049124, -0.0012017570118505278, -0.0013158443800074546, -0.0013946550179738235, -0.00143537714856422, -0.0014361430413177665, -0.0013961025273104373, -0.0013154698934900741, -0.0011955448624625515, -0.001038705445344848, -0.000848370211905452, -0.0006289357238567322, -0.00038567726087640876, -0.00012464084542349136, 0.00014751424024790855, 0.00042365555592108265, 0.000696381707633601, 0.0009581911739190034, 0.0012016945125591883, 0.0014198129038021875, 0.0016059677163340854, 0.0017542822302381216, 0.0018597489437935104, 0.0019183843680031518, 0.001927370582069373, 0.0018851569558006424, 0.0017915316423764106, 0.0016476681649469273, 0.001456129721890939, 0.0012208322294896099, 0.0009469770920907817, 0.0006409478559993642, 0.0003101659717946291, -0.00003708137047780295, -0.0003918367361265021, -0.0007446984520565823, -0.0010860619549777095, -0.0014063764577860907, -0.001696397687712767, -0.0019474488265779002, -0.002151669227747982, -0.002302249012563522, -0.0023936395957784356, -0.0024217386080201218, -0.002384046464152241, -0.0022797724899456247, -0.0021099040224506474, -0.0018772300452061593, -0.001586318069799396, -0.0012434422926464283, -0.0008564627353582099, -0.0004346583284416864, 0.000011483258960353713, 0.0004705125435918996, 0.0009302983176219571, 0.0013783347882871506, 0.0018020649278141442, 0.002189218072448032, 0.002528151228372692, 0.0028081778185230755, 0.0030198855690580883, 0.0031554218226391927, 0.0032087539967944043, 0.003175891861997494, 0.003055052047477484, 0.0028467769761391067, 0.0025539826540715814, 0.0021819611806385975, 0.00173831289146853, 0.0012328190076443134, 0.0006772405314859651, 0.0000850660373523537, -0.0005287869617277397, -0.001148321137491392, -0.0017568578913237647, -0.002337465469832778, -0.0028733927792042916, -0.0033485134261990474, -0.0037477874636434095, -0.004057705229541436, -0.0042666789949867895, -0.004365411194693107, -0.004347246153946479, -0.0042084293493284755, -0.003948276264434998, -0.0035693427342337308, -0.003077468630328199, -0.002481682761858642, -0.0017941893541420268, -0.0010300505400156208, -0.00020699101191350578, 0.0006550244158311212, 0.0015341931983222652, 0.002407385154286287, 0.0032506853111441327, 0.004039981949981368, 0.004751579445675196, 0.0053628234864281235, 0.0058527242916193226, 0.006202559568610708, 0.006396443797782178, 0.006421849969755556, 0.006270068071543294, 0.005936587372391708, 0.0054213915962429745, 0.004729156264045173, 0.0038693427245538904, 0.0028561826064778697, 0.0017085458613360902, 0.0004497040612160084, -0.0008930343940838381, -0.002288760766598498, -0.0037035572532650445, -0.005101096327651239, -0.006443406350064504, -0.007691613708744422, -0.008806783345605503, -0.009750779708566895, -0.010487104621962649, -0.010981761556592558, -0.011204077521465777, -0.01112745993022714, -0.010730106123767362, -0.009995629398181848, -0.008913569832214968, -0.007479799008370572, -0.005696809921316997, -0.0035738648415050284, -0.0011270001382152866, 0.001621100228821588, 0.004641370935060121, 0.00789877655149075, 0.0113528526524623, 0.014958365872953214, 0.018666074072644187, 0.02242359380770534, 0.026176337546106928, 0.029868513059052665, 0.03344415058816331,
\ No newline at end of file
-};
+655, 0.0013991567634035874, 0.0014114626691980761, 0.0013911994521601603, 0.001338158623469115, 0.0012529312652788224, 0.0011368782078168052, 0.0009924227419316402, 0.0008225367782712132, 0.0006311126153653432, 0.000422596130820185, 0.00020202566973633374, -0.000025140126274052846, -0.00025314012889659734, -0.00047605825978268214, -0.0006879757889763613, -0.0008831265836660278, -0.001056052961049124, -0.0012017570118505278, -0.0013158443800074546, -0.0013946550179738235, -0.00143537714856422, -0.0014361430413177665, -0.0013961025273104373, -0.0013154698934900741, -0.0011955448624625515, -0.001038705445344848, -0.000848370211905452, -0.0006289357238567322, -0.00038567726087640876, -0.00012464084542349136, 0.00014751424024790855, 0.00042365555592108265, 0.000696381707633601, 0.0009581911739190034, 0.0012016945125591883, 0.0014198129038021875, 0.0016059677163340854, 0.0017542822302381216, 0.0018597489437935104, 0.0019183843680031518, 0.001927370582069373, 0.0018851569558006424, 0.0017915316423764106, 0.0016476681649469273, 0.001456129721890939, 0.0012208322294896099, 0.0009469770920907817, 0.0006409478559993642, 0.0003101659717946291, -0.00003708137047780295, -0.0003918367361265021, -0.0007446984520565823, -0.0010860619549777095, -0.0014063764577860907, -0.001696397687712767, -0.0019474488265779002, -0.002151669227747982, -0.002302249012563522, -0.0023936395957784356, -0.0024217386080201218, -0.002384046464152241, -0.0022797724899456247, -0.0021099040224506474, -0.0018772300452061593, -0.001586318069799396, -0.0012434422926464283, -0.0008564627353582099, -0.0004346583284416864, 0.000011483258960353713, 0.0004705125435918996, 0.0009302983176219571, 0.0013783347882871506, 0.0018020649278141442, 0.002189218072448032, 0.002528151228372692, 0.0028081778185230755, 0.0030198855690580883, 0.0031554218226391927, 0.0032087539967944043, 0.003175891861997494, 0.003055052047477484, 0.0028467769761391067, 0.0025539826540715814, 0.0021819611806385975, 0.00173831289146853, 0.0012328190076443134, 0.0006772405314859651, 0.0000850660373523537, -0.0005287869617277397, -0.001148321137491392, -0.0017568578913237647, -0.002337465469832778, -0.0028733927792042916, -0.0033485134261990474, -0.0037477874636434095, -0.004057705229541436, -0.0042666789949867895, -0.004365411194693107, -0.004347246153946479, -0.0042084293493284755, -0.003948276264434998, -0.0035693427342337308, -0.003077468630328199, -0.002481682761858642, -0.0017941893541420268, -0.0010300505400156208, -0.00020699101191350578, 0.0006550244158311212, 0.0015341931983222652, 0.002407385154286287, 0.0032506853111441327, 0.004039981949981368, 0.004751579445675196, 0.0053628234864281235, 0.0058527242916193226, 0.006202559568610708, 0.006396443797782178, 0.006421849969755556, 0.006270068071543294, 0.005936587372391708, 0.0054213915962429745, 0.004729156264045173, 0.0038693427245538904, 0.0028561826064778697, 0.0017085458613360902, 0.0004497040612160084, -0.0008930343940838381, -0.002288760766598498, -0.0037035572532650445, -0.005101096327651239, -0.006443406350064504, -0.007691613708744422, -0.008806783345605503, -0.009750779708566895, -0.010487104621962649, -0.010981761556592558, -0.011204077521465777, -0.01112745993022714, -0.010730106123767362, -0.009995629398181848, -0.008913569832214968, -0.007479799008370572, -0.005696809921316997, -0.0035738648415050284, -0.0011270001382152866, 0.001621100228821588, 0.004641370935060121, 0.00789877655149075, 0.0113528526524623, 0.014958365872953214, 0.018666074072644187, 0.02242359380770534, 0.026176337546106928, 0.029868513059052665, 0.03344415058816331, 0.03684815553847075, 0.04002735371
\ No newline at end of file
13553936088779655, 0.0013991567634035874, 0.0014114626691980761, 0.0013911994521601603, 0.001338158623469115, 0.0012529312652788224, 0.0011368782078168052, 0.0009924227419316402, 0.0008225367782712132, 0.0006311126153653432, 0.000422596130820185, 0.00020202566973633374, -0.000025140126274052846, -0.00025314012889659734, -0.00047605825978268214, -0.0006879757889763613, -0.0008831265836660278, -0.001056052961049124, -0.0012017570118505278, -0.0013158443800074546, -0.0013946550179738235, -0.00143537714856422, -0.0014361430413177665, -0.0013961025273104373, -0.0013154698934900741, -0.0011955448624625515, -0.001038705445344848, -0.000848370211905452, -0.0006289357238567322, -0.00038567726087640876, -0.00012464084542349136, 0.00014751424024790855, 0.00042365555592108265, 0.000696381707633601, 0.0009581911739190034, 0.0012016945125591883, 0.0014198129038021875, 0.0016059677163340854, 0.0017542822302381216, 0.0018597489437935104, 0.0019183843680031518, 0.001927370582069373, 0.0018851569558006424, 0.0017915316423764106, 0.0016476681649469273, 0.001456129721890939, 0.0012208322294896099, 0.0009469770920907817, 0.0006409478559993642, 0.0003101659717946291, -0.00003708137047780295, -0.0003918367361265021, -0.0007446984520565823, -0.0010860619549777095, -0.0014063764577860907, -0.001696397687712767, -0.0019474488265779002, -0.002151669227747982, -0.002302249012563522, -0.0023936395957784356, -0.0024217386080201218, -0.002384046464152241, -0.0022797724899456247, -0.0021099040224506474, -0.0018772300452061593, -0.001586318069799396, -0.0012434422926464283, -0.0008564627353582099, -0.0004346583284416864, 0.000011483258960353713, 0.0004705125435918996, 0.0009302983176219571, 0.0013783347882871506, 0.0018020649278141442, 0.002189218072448032, 0.002528151228372692, 0.0028081778185230755, 0.0030198855690580883, 0.0031554218226391927, 0.0032087539967944043, 0.003175891861997494, 0.003055052047477484, 0.0028467769761391067, 0.0025539826540715814, 0.0021819611806385975, 0.00173831289146853, 0.0012328190076443134, 0.0006772405314859651, 0.0000850660373523537, -0.0005287869617277397, -0.001148321137491392, -0.0017568578913237647, -0.002337465469832778, -0.0028733927792042916, -0.0033485134261990474, -0.0037477874636434095, -0.004057705229541436, -0.0042666789949867895, -0.004365411194693107, -0.004347246153946479, -0.0042084293493284755, -0.003948276264434998, -0.0035693427342337308, -0.003077468630328199, -0.002481682761858642, -0.0017941893541420268, -0.0010300505400156208, -0.00020699101191350578, 0.0006550244158311212, 0.0015341931983222652, 0.002407385154286287, 0.0032506853111441327, 0.004039981949981368, 0.004751579445675196, 0.0053628234864281235, 0.0058527242916193226, 0.006202559568610708, 0.006396443797782178, 0.006421849969755556, 0.006270068071543294, 0.005936587372391708, 0.0054213915962429745, 0.004729156264045173, 0.0038693427245538904, 0.0028561826064778697, 0.0017085458613360902, 0.0004497040612160084, -0.0008930343940838381, -0.002288760766598498, -0.0037035572532650445, -0.005101096327651239, -0.006443406350064504, -0.007691613708744422, -0.008806783345605503, -0.009750779708566895, -0.010487104621962649, -0.010981761556592558, -0.011204077521465777, -0.01112745993022714, -0.010730106123767362, -0.009995629398181848, -0.008913569832214968, -0.007479799008370572, -0.005696809921316997, -0.0035738648415050284, -0.0011270001382152866, 0.001621100228821588, 0.004641370935060121, 0.00789877655149075, 0.0113528526524623, 0.014958365872953214, 0.018666074072644187, 0.02242359380770534, 0.026176337546106928, 0.029868513059052665, 0.03344415058816331, 0.03684815553847075,
\ No newline at end of file
};
@@ -3330,10 +3330,9 @@
0.07464f, 0.074559f, 0.074478f, 0.074397f, 0.074317f, 0.074236f, 0.074155f, 0.074074f, 0.073993f, 0.073912f, 0.073832f, 0.073751f, 0.07367f, 0.073589f,
0.073509f, 0.073428f, 0.073347f, 0.073266f, 0.073185f, 0.073105f, 0.073024f, 0.072943f, 0.072862f, 0.072782f, 0.072701f, 0.07262f, 0.072539f, 0.072459f, 0.072378f, 0.072297f, 0.072217f, 0.072136f, 0.072055f, 0.071974f,
0.071894f, 0.071813f, 0.071732f, 0.071652f, 0.071571f, 0.07149f, 0.07141f, 0.071329f, 0.071248f, 0.071168f, 0.071087f, 0.071006f, 0.070926f, 0.070845f, 0.070764f, 0.070684f, 0.070603f, 0.070522f, 0.070442f, 0.070361f,
-716f, 0.069636f, 0.069555f, 0.069475f, 0.069394f, 0.069314f, 0.069233f, 0.069152f, 0.069072f, 0.068991f, 0.068911f, 0.06883f, 0.06875f,
+716f, 0.069636f, 0.069555f, 0.069475f, 0.069394f, 0.069314f, 0.069233f, 0.069152f, 0.069072f, 0.068991f, 0.068911f, 0.06883f, 0.06875f,
069636f, 0.069555f, 0.069475f, 0.069394f, 0.069314f, 0.069233f, 0.069152f, 0.069072f, 0.068991f, 0.068911f, 0.06883f, 0.06875f,
-9636f, 0.069555f, 0.069475f, 0.069394f, 0.069314f, 0.069233f, 0.069152f, 0.069072f, 0.068991f, 0.068911f, 0.06883f, 0.06875f,
-0.068669f, 0.068589f, 0.068508f, 0.068428f, 0.068347f, 0.068267f, 0.068186f, 0.068106f, 0.068025f, 0.067945f, 0.067864f, 0.067784f, 0.067703f, 0.067623f, 0.067542f, 0.067462f, 0.067381f, 0.067301f, 0.06722f, 0.06714f,
+.069394f, 0.069314f, 0.069233f, 0.069152f, 0.069072f, 0.068991f, 0.068911f, 0.06883f, 0.06875f,
0.069394f, 0.069314f, 0.069233f, 0.069152f, 0.069072f, 0.068991f, 0.068911f, 0.06883f, 0.06875f,
0.068669f, 0.068589f, 0.068508f, 0.068428f, 0.068347f, 0.068267f, 0.068186f, 0.068106f, 0.068025f, 0.067945f, 0.067864f, 0.067784f, 0.067703f, 0.067623f, 0.067542f, 0.067462f, 0.067381f, 0.067301f, 0.06722f, 0.06714f,
0.06706f, 0.066979f, 0.066899f, 0.066818f, 0.066738f, 0.066657f, 0.066577f, 0.066497f, 0.066416f, 0.066336f, 0.066255f, 0.066175f, 0.066095f, 0.066014f, 0.065934f, 0.065853f, 0.065773f, 0.065693f, 0.065612f, 0.065532f,
@@ -3382,10 +3381,9 @@
0.193981f, -0.194033f, -0.194085f, -0.194136f, -0.194188f, -0.19424f, -0.194292f, -0.194343f, -0.194395f, -0.194447f, -0.194498f, -0.19455f, -0.194602f, -0.194653f, -0.194705f, -0.194757f, -0.194808f, -0.19486f, -0.194912f, -0.194963f,
-0.195015f, -0.195066f, -0.195118f, -0.19517f, -0.195221f, -0.195273f, -0.195324f, -0.195376f, -0.195427f, -0.195479f, -0.19553f, -0.195582f, -0.195633f, -0.195685f, -0.195736f, -0.195788f, -0.195839f, -0.19589f, -0.195942f, -0.195993f,
-0.196045f, -0.196096f, -0.196147f, -0.196199f, -0.19625f, -0.196301f, -0.196353f, -0.196404f, -0.196455f, -0.196507f, -0.196558f, -0.196609f, -0.196661f, -0.196712f, -0.196763f, -0.196814f, -0.196866f, -0.196917f, -0.196968f, -0.197019f,
-194033f, -0.194085f, -0.194136f, -0.194188f, -0.19424f, -0.194292f, -0.194343f, -0.194395f, -0.194447f, -0.194498f, -0.19455f, -0.194602f, -0.194653f, -0.194705f, -0.194757f, -0.194808f, -0.19486f, -0.194912f, -0.194963f,
+0.194188f, -0.19424f, -0.194292f, -0.194343f, -0.194395f, -0.194447f, -0.194498f, -0.19455f, -0.194602f, -0.194653f, -0.194705f, -0.194757f, -0.194808f, -0.19486f, -0.194912f, -0.194963f,
-0.194085f, -0.194136f, -0.194188f, -0.19424f, -0.194292f, -0.194343f, -0.194395f, -0.194447f, -0.194498f, -0.19455f, -0.194602f, -0.194653f, -0.194705f, -0.194757f, -0.194808f, -0.19486f, -0.194912f, -0.194963f,
-0.194085f, -0.194136f, -0.194188f, -0.19424f, -0.194292f, -0.194343f, -0.194395f, -0.194447f, -0.194498f, -0.19455f, -0.194602f, -0.194653f, -0.194705f, -0.194757f, -0.194808f, -0.19486f, -0.194912f, -0.194963f,
--0.195015f, -0.195066f, -0.195118f, -0.19517f, -0.195221f, -0.195273f, -0.195324f, -0.195376f, -0.195427f, -0.195479f, -0.19553f, -0.195582f, -0.195633f, -0.195685f, -0.195736f, -0.195788f, -0.195839f, -0.19589f, -0.195942f, -0.195993f,
+3f, -0.194395f, -0.194447f, -0.194498f, -0.19455f, -0.194602f, -0.194653f, -0.194705f, -0.194757f, -0.194808f, -0.19486f, -0.194912f, -0.194963f,
188f, -0.19424f, -0.194292f, -0.194343f, -0.194395f, -0.194447f, -0.194498f, -0.19455f, -0.194602f, -0.194653f, -0.194705f, -0.194757f, -0.194808f, -0.19486f, -0.194912f, -0.194963f,
-0.195015f, -0.195066f, -0.195118f, -0.19517f, -0.195221f, -0.195273f, -0.195324f, -0.195376f, -0.195427f, -0.195479f, -0.19553f, -0.195582f, -0.195633f, -0.195685f, -0.195736f, -0.195788f, -0.195839f, -0.19589f, -0.195942f, -0.195993f,
-0.196045f, -0.196096f, -0.196147f, -0.196199f, -0.19625f, -0.196301f, -0.196353f, -0.196404f, -0.196455f, -0.196507f, -0.196558f, -0.196609f, -0.196661f, -0.196712f, -0.196763f, -0.196814f, -0.196866f, -0.196917f, -0.196968f, -0.197019f,
@@ -3433,9 +3431,9 @@
784f, -0.078543f, -0.078327f, -0.077901f, -0.0765f, -0.075546f, -0.075457f, -0.074714f, -0.073263f, -0.072638f, -0.07252f, -0.071454f, -0.070111f, -0.069781f, -0.069485f, -0.068167f, -0.067063f, -0.066928f, -0.066345f, -0.064901f, -0.064114f, -0.064028f, -0.063117f, -0.061704f, -0.061237f, -0.061044f, -0.059838f, -0.058604f, -0.058388f, -0.057955f, -0.056556f, -0.055608f, -0.055517f, -0.054767f, -0.053321f, -0.052701f, -0.052577f, -0.051508f, -0.05017f, -0.049844f, -0.049541f, -0.048221f, -0.047124f, -0.046989f, -0.0464f, -0.044958f, -0.044177f, -0.044088f, -0.043171f, -0.041762f, -0.0413f, -0.041101f, -0.039892f, -0.038664f, -0.03845f, -0.03801f, -0.036611f, -0.03567f, -0.035577f, -0.034821f, -0.033378f, -0.032763f, -0.032636f, -0.031562f, -0.03023f, -0.029906f, -0.029597f, -0.028276f, -0.027185f, -0.027051f, -0.026454f, -0.025014f, -0.024239f, -0.024147f, -0.023225f, -0.02182f, -0.021363f, -0.021159f, -0.019946f, -0.018724f, -0.018513f, -0.018066f, -0.016666f, -0.015732f, -0.015638f, -0.014876f, -0.013434f, -0.012826f, -0.012695f, -0.011616f, -0.010288f, -0.009969f, -0.009654f, -0.00833f, -0.007245f, -0.007112f, -0.00651f, -0.005069f, -0.004301f, -0.004208f, -0.003279f, -0.001877f, -0.001425f, -0.001217f, -0.0f, 0.001217f, 0.001425f, 0.001877f, 0.003279f, 0.004208f, 0.004301f, 0.005069f, 0.00651f, 0.007112f, 0.007245f, 0.00833f, 0.009654f, 0.009969f, 0.010288f, 0.011616f, 0.012695f, 0.012826f, 0.013434f, 0.014876f, 0.015638f, 0.015732f, 0.016666f, 0.018066f, 0.018513f, 0.018724f, 0.019946f, 0.021159f, 0.021363f, 0.02182f, 0.023225f, 0.024147f, 0.024239f, 0.025014f, 0.026454f, 0.027051f, 0.027185f, 0.028276f, 0.029597f, 0.029906f, 0.03023f, 0.031562f, 0.032636f, 0.032763f, 0.033378f, 0.034821f, 0.035577f, 0.03567f, 0.036611f, 0.03801f, 0.03845f, 0.038664f, 0.039892f, 0.041101f, 0.0413f, 0.041762f, 0.043171f, 0.044088f, 0.044177f, 0.044958f, 0.0464f, 0.046989f, 0.047124f, 0.048221f, 0.049541f, 0.049844f, 0.05017f, 0.051508f, 0.052577f, 0.052701f, 0.053321f, 0.054767f, 0.055517f, 0.055608f, 0.056556f, 0.057955f, 0.058388f, 0.058604f, 0.059838f, 0.061044f, 0.061237f, 0.061704f, 0.063117f, 0.064028f, 0.064114f, 0.064901f, 0.066345f, 0.066928f, 0.067063f, 0.068167f, 0.069485f, 0.069781f, 0.070111f, 0.071454f, 0.07252f, 0.072638f, 0.073263f, 0.074714f, 0.075457f, 0.075546f, 0.0765f, 0.077901f, 0.078327f, 0.078543f, 0.079784f, 0.080988f, 0.081174f, 0.081645f, 0.083064f, 0.08397f, 0.084051f, 0.084845f, 0.086292f, 0.086867f, 0.087f, 0.088112f, 0.08943f, 0.089719f, 0.09005f, 0.091401f, 0.092463f, 0.092574f, 0.093205f, 0.094661f, 0.095397f, 0.095482f, 0.096445f, 0.097847f, 0.098265f, 0.098481f, 0.09973f, 0.100932f, 0.101111f, 0.101585f, 0.103011f, 0.103912f, 0.103987f, 0.104788f, 0.106239f, 0.106807f, 0.106937f, 0.108057f, 0.109376f, 0.109656f, 0.109989f, 0.111348f, 0.112406f, 0.11251f, 0.113146f, 0.114608f, 0.115338f, 0.115419f, 0.116389f, 0.117794f, 0.118203f, 0.118418f, 0.119676f, 0.120877f, 0.121047f, 0.121525f, 0.122959f, 0.123854f, 0.123923f, 0.12473f, 0.126186f, 0.126746f, 0.126873f, 0.128002f, 0.129322f, 0.129593f, 0.129927f, 0.131295f, 0.13235f, 0.132446f, 0.133087f, 0.134556f, 0.13528f, 0.135354f, 0.136332f, 0.137741f, 0.138142f, 0.138355f, 0.139623f, 0.140823f, 0.140984f, 0.141464f, 0.142907f, 0.143797f, 0.143858f, 0.144672f, 0.146135f, 0.146686f, 0.146809f, 0.147948f, 0.14927f, 0.14953f, 0.149864f, 0.151243f, 0.152295f, 0.152381f, 0.153027f, 0.154505f, 0.155221f, 0.155289f, 0.156276f, 0.15769f, 0.15808f, 0.15829f, 0.159569f, 0.16077f, 0.160919f, 0.161402f, 0.162856f, 0.163741f, 0.163792f, 0.164614f, 0.166084f, 0.166626f, 0.166743f, 0.167893f, 0.169218f, 0.169467f, 0.169801f, 0.171191f, 0.172241f, 0.172316f, 0.172966f, 0.174455f, 0.175163f, 0.175222f, 0.176219f, 0.177639f, 0.178018f, 0.178225f, 0.179516f, 0.180717f, 0.180855f, 0.181339f, 0.182805f, 0.183685f, 0.183726f, 0.184555f, 0.186034f, 0.186567f, 0.186677f, 0.187838f, 0.189167f, 0.189404f, 0.189736f, 0.191139f, 0.192187f, 0.19225f, 0.192905f, 0.194405f, 0.195106f, 0.195155f, 0.196162f, 0.19759f, 0.197957f, 0.198159f, 0.199463f, 0.200666f, 0.20079f, 0.201276f, 0.2
\ No newline at end of file
},
-0363f, 0.203659f, 0.204495f, 0.205985f, 0.206507f, 0.20661f, 0.207783f, 0.209117f, 0.20934f, 0.209671f, 0.211088f, 0.212135f, 0.212183f, 0.212843f, 0.214356f, 0.215049f, 0.215087f, 0.216105f, 0.217541f, 0.217895f, 0.218092f, 0.21941f, 0.220615f, 0.220724f, 0.221212f, 0.222705f, 0.223576f, 0.22359f, 0.224435f, 0.225937f, 0.226448f, 0.226541f, 0.227728f, 0.229068f, 0.229276f, 0.229604f, 0.231037f, 0.232083f, 0.232116f, 0.232781f, 0.234308f, 0.234993f, 0.235018f, 0.236047f, 0.237493f, 0.237834f, 0.238024f, 0.239358f, 0.240565f, 0.240658f, 0.241147f, 0.242656f, 0.243523f, 0.243521f, 0.244375f, 0.24589f, 0.24639f, 0.246472f, 0.247673f, 0.249021f, 0.249212f, 0.249537f, 0.250987f, 0.252032f, 0.252047f, 0.252718f, 0.254261f, 0.254937f, 0.254948f, 0.255989f, 0.257447f, 0.257772f, 0.257954f, 0.259305f, 0.260517f, 0.260591f, 0.26108f, 0.262609f, 0.26347f, 0.263451f, 0.264314f, 0.265845f, 0.266331f, 0.266401f, 0.267618f, 0.268974f, 0.269148f, 0.269468f, 0.270937f, 0.271982f, 0.271978f, 0.272654f, 0.274215f, 0.274882f, 0.274877f, 0.275931f, 0.277402f, 0.277711f, 0.277884f, 0.279253f, 0.28047f, 0.280524f, 0.281013f, 0.282562f, 0.283418f, 0.28338f, 0.284253f, 0.2858f, 0.286273f, 0.286329f, 0.287563f, 0.288929f, 0.289083f, 0.289398f, 0.290889f, 0.291933f, 0.291908f, 0.292589f, 0.29417f, 0.294827f, 0.294804f, 0.295873f, 0.297358f, 0.297649f, 0.297811f, 0.299202f, 0.300424f, 0.300456f, 0.300945f, 0.302516f, 0.303367f, 0.303308f, 0.304191f, 0.305757f, 0.306215f, 0.306255f, 0.307508f, 0.308886f, 0.309018f, 0.309327f, 0.310841f, 0.311886f, 0.311837f, 0.312523f, 0.314127f, 0.314773f, 0.31473f, 0.315814f, 0.317316f, 0.317587f, 0.317737f, 0.319151f, 0.32038f, 0.320387f, 0.320875f, 0.322471f, 0.323317f, 0.323234f, 0.324128f, 0.325716f, 0.326157f, 0.32618f, 0.327454f, 0.328844f, 0.328952f, 0.329254f, 0.330794f, 0.33184f, 0.331764f, 0.332455f, 0.334085f, 0.33472f, 0.334654f, 0.335755f, 0.337276f, 0.337525f, 0.337662f, 0.339101f, 0.340337f, 0.340317f, 0.340804f, 0.342428f, 0.343268f, 0.343158f, 0.344064f, 0.345677f, 0.346099f, 0.346102f, 0.347399f, 0.348804f, 0.348885f, 0.349179f, 0.350748f, 0.351795f, 0.35169f, 0.352387f, 0.354046f, 0.354667f, 0.354575f, 0.355696f, 0.357238f, 0.357463f, 0.357584f, 0.359051f, 0.360296f, 0.360246f, 0.360731f, 0.362386f, 0.36322f, 0.363081f, 0.364f, 0.365639f, 0.366042f, 0.366023f, 0.367345f, 0.368766f, 0.368818f, 0.369102f, 0.370703f, 0.371753f, 0.371615f, 0.372317f, 0.374008f, 0.374615f, 0.374495f, 0.375637f, 0.377203f, 0.377401f, 0.377504f, 0.379002f, 0.380258f, 0.380173f, 0.380656f, 0.382346f, 0.383174f, 0.383001f, 0.383934f, 0.385604f, 0.385986f, 0.38594f, 0.387291f, 0.388731f, 0.38875f, 0.389023f, 0.39066f, 0.391712f, 0.391537f, 0.392246f, 0.393972f, 0.394565f, 0.394412f, 0.395577f, 0.39717f, 0.397338f, 0.397421f, 0.398954f, 0.400222f, 0.400099f, 0.400579f, 0.402308f, 0.40313f, 0.402919f, 0.403868f, 0.405572f, 0.405929f, 0.405855f, 0.407237f, 0.408699f, 0.408681f, 0.408941f, 0.410618f, 0.411674f, 0.411457f, 0.412173f, 0.413939f, 0.414515f, 0.414326f, 0.415516f, 0.41714f, 0.417275f, 0.417335f, 0.418908f, 0.420189f, 0.420023f, 0.4205f, 0.422273f, 0.423088f, 0.422834f, 0.4238f, 0.425543f, 0.425874f, 0.425767f, 0.427184f, 0.42867f, 0.428611f, 0.428856f, 0.430579f, 0.431638f, 0.431375f, 0.432098f, 0.433909f, 0.434467f, 0.434237f, 0.435455f, 0.437114f, 0.437212f, 0.437246f, 0.438862f, 0.440159f, 0.439945f, 0.440418f, 0.44224f, 0.443047f, 0.442745f, 0.443731f, 0.445518f, 0.445818f, 0.445674f, 0.447131f, 0.448645f, 0.448539f, 0.448767f, 0.450541f, 0.451605f, 0.451289f, 0.452021f, 0.453883f, 0.454421f, 0.454143f, 0.455394f, 0.457092f, 0.457148f, 0.457152f, 0.458818f, 0.460133f, 0.459865f, 0.460332f, 0.462211f, 0.46301f, 0.462653f, 0.46366f, 0.465498f, 0.465764f, 0.465577f, 0.467078f, 0.468625f, 0.468466f, 0.468674f, 0.470506f, 0.471576f, 0.4712f, 0.47194f, 0.473861f, 0.474376f, 0.474045f, 0.475331f, 0.477075f, 0.477084f, 0.477053f, 0.478775f, 0.480112f, 0.479782f, 0.480243f, 0.482186f, 0.482975f, 0.482555f, 0.483587f, 0.485482f, 0.48571f, 0.485475f, 0.487026f, 0.48861f, 0.488391f, 0.488576f, 0.490475f, 0.491552f, 0.491
\ No newline at end of file
+5f, 0.206507f, 0.20661f, 0.207783f, 0.209117f, 0.20934f, 0.209671f, 0.211088f, 0.212135f, 0.212183f, 0.212843f, 0.214356f, 0.215049f, 0.215087f, 0.216105f, 0.217541f, 0.217895f, 0.218092f, 0.21941f, 0.220615f, 0.220724f, 0.221212f, 0.222705f, 0.223576f, 0.22359f, 0.224435f, 0.225937f, 0.226448f, 0.226541f, 0.227728f, 0.229068f, 0.229276f, 0.229604f, 0.231037f, 0.232083f, 0.232116f, 0.232781f, 0.234308f, 0.234993f, 0.235018f, 0.236047f, 0.237493f, 0.237834f, 0.238024f, 0.239358f, 0.240565f, 0.240658f, 0.241147f, 0.242656f, 0.243523f, 0.243521f, 0.244375f, 0.24589f, 0.24639f, 0.246472f, 0.247673f, 0.249021f, 0.249212f, 0.249537f, 0.250987f, 0.252032f, 0.252047f, 0.252718f, 0.254261f, 0.254937f, 0.254948f, 0.255989f, 0.257447f, 0.257772f, 0.257954f, 0.259305f, 0.260517f, 0.260591f, 0.26108f, 0.262609f, 0.26347f, 0.263451f, 0.264314f, 0.265845f, 0.266331f, 0.266401f, 0.267618f, 0.268974f, 0.269148f, 0.269468f, 0.270937f, 0.271982f, 0.271978f, 0.272654f, 0.274215f, 0.274882f, 0.274877f, 0.275931f, 0.277402f, 0.277711f, 0.277884f, 0.279253f, 0.28047f, 0.280524f, 0.281013f, 0.282562f, 0.283418f, 0.28338f, 0.284253f, 0.2858f, 0.286273f, 0.286329f, 0.287563f, 0.288929f, 0.289083f, 0.289398f, 0.290889f, 0.291933f, 0.291908f, 0.292589f, 0.29417f, 0.294827f, 0.294804f, 0.295873f, 0.297358f, 0.297649f, 0.297811f, 0.299202f, 0.300424f, 0.300456f, 0.300945f, 0.302516f, 0.303367f, 0.303308f, 0.304191f, 0.305757f, 0.306215f, 0.306255f, 0.307508f, 0.308886f, 0.309018f, 0.309327f, 0.310841f, 0.311886f, 0.311837f, 0.312523f, 0.314127f, 0.314773f, 0.31473f, 0.315814f, 0.317316f, 0.317587f, 0.317737f, 0.319151f, 0.32038f, 0.320387f, 0.320875f, 0.322471f, 0.323317f, 0.323234f, 0.324128f, 0.325716f, 0.326157f, 0.32618f, 0.327454f, 0.328844f, 0.328952f, 0.329254f, 0.330794f, 0.33184f, 0.331764f, 0.332455f, 0.334085f, 0.33472f, 0.334654f, 0.335755f, 0.337276f, 0.337525f, 0.337662f, 0.339101f, 0.340337f, 0.340317f, 0.340804f, 0.342428f, 0.343268f, 0.343158f, 0.344064f, 0.345677f, 0.346099f, 0.346102f, 0.347399f, 0.348804f, 0.348885f, 0.349179f, 0.350748f, 0.351795f, 0.35169f, 0.352387f, 0.354046f, 0.354667f, 0.354575f, 0.355696f, 0.357238f, 0.357463f, 0.357584f, 0.359051f, 0.360296f, 0.360246f, 0.360731f, 0.362386f, 0.36322f, 0.363081f, 0.364f, 0.365639f, 0.366042f, 0.366023f, 0.367345f, 0.368766f, 0.368818f, 0.369102f, 0.370703f, 0.371753f, 0.371615f, 0.372317f, 0.374008f, 0.374615f, 0.374495f, 0.375637f, 0.377203f, 0.377401f, 0.377504f, 0.379002f, 0.380258f, 0.380173f, 0.380656f, 0.382346f, 0.383174f, 0.383001f, 0.383934f, 0.385604f, 0.385986f, 0.38594f, 0.387291f, 0.388731f, 0.38875f, 0.389023f, 0.39066f, 0.391712f, 0.391537f, 0.392246f, 0.393972f, 0.394565f, 0.394412f, 0.395577f, 0.39717f, 0.397338f, 0.397421f, 0.398954f, 0.400222f, 0.400099f, 0.400579f, 0.402308f, 0.40313f, 0.402919f, 0.403868f, 0.405572f, 0.405929f, 0.405855f, 0.407237f, 0.408699f, 0.408681f, 0.408941f, 0.410618f, 0.411674f, 0.411457f, 0.412173f, 0.413939f, 0.414515f, 0.414326f, 0.415516f, 0.41714f, 0.417275f, 0.417335f, 0.418908f, 0.420189f, 0.420023f, 0.4205f, 0.422273f, 0.423088f, 0.422834f, 0.4238f, 0.425543f, 0.425874f, 0.425767f, 0.427184f, 0.42867f, 0.428611f, 0.428856f, 0.430579f, 0.431638f, 0.431375f, 0.432098f, 0.433909f, 0.434467f, 0.434237f, 0.435455f, 0.437114f, 0.437212f, 0.437246f, 0.438862f, 0.440159f, 0.439945f, 0.440418f, 0.44224f, 0.443047f, 0.442745f, 0.443731f, 0.445518f, 0.445818f, 0.445674f, 0.447131f, 0.448645f, 0.448539f, 0.448767f, 0.450541f, 0.451605f, 0.451289f, 0.452021f, 0.453883f, 0.454421f, 0.454143f, 0.455394f, 0.457092f, 0.457148f, 0.457152f, 0.458818f, 0.460133f, 0.459865f, 0.460332f, 0.462211f, 0.46301f, 0.462653f, 0.46366f, 0.465498f, 0.465764f, 0.465577f, 0.467078f, 0.468625f, 0.468466f, 0.468674f, 0.470506f, 0.471576f, 0.4712f, 0.47194f, 0.473861f, 0.474376f, 0.474045f, 0.475331f, 0.477075f, 0.477084f, 0.477053f, 0.478775f, 0.480112f, 0.479782f, 0.480243f, 0.482186f, 0.482975f, 0.482555f, 0.483587f, 0.485482f, 0.48571f, 0.485475f, 0.487026f, 0.48861f, 0.488391f, 0.488576f, 0.490475f, 0.491552f, 0.491107f, 0.491856f, 0.493845f, 0.494333
\ No newline at end of file
.203659f, 0.204495f, 0.205985f, 0.206507f, 0.20661f, 0.207783f, 0.209117f, 0.20934f, 0.209671f, 0.211088f, 0.212135f, 0.212183f, 0.212843f, 0.214356f, 0.215049f, 0.215087f, 0.216105f, 0.217541f, 0.217895f, 0.218092f, 0.21941f, 0.220615f, 0.220724f, 0.221212f, 0.222705f, 0.223576f, 0.22359f, 0.224435f, 0.225937f, 0.226448f, 0.226541f, 0.227728f, 0.229068f, 0.229276f, 0.229604f, 0.231037f, 0.232083f, 0.232116f, 0.232781f, 0.234308f, 0.234993f, 0.235018f, 0.236047f, 0.237493f, 0.237834f, 0.238024f, 0.239358f, 0.240565f, 0.240658f, 0.241147f, 0.242656f, 0.243523f, 0.243521f, 0.244375f, 0.24589f, 0.24639f, 0.246472f, 0.247673f, 0.249021f, 0.249212f, 0.249537f, 0.250987f, 0.252032f, 0.252047f, 0.252718f, 0.254261f, 0.254937f, 0.254948f, 0.255989f, 0.257447f, 0.257772f, 0.257954f, 0.259305f, 0.260517f, 0.260591f, 0.26108f, 0.262609f, 0.26347f, 0.263451f, 0.264314f, 0.265845f, 0.266331f, 0.266401f, 0.267618f, 0.268974f, 0.269148f, 0.269468f, 0.270937f, 0.271982f, 0.271978f, 0.272654f, 0.274215f, 0.274882f, 0.274877f, 0.275931f, 0.277402f, 0.277711f, 0.277884f, 0.279253f, 0.28047f, 0.280524f, 0.281013f, 0.282562f, 0.283418f, 0.28338f, 0.284253f, 0.2858f, 0.286273f, 0.286329f, 0.287563f, 0.288929f, 0.289083f, 0.289398f, 0.290889f, 0.291933f, 0.291908f, 0.292589f, 0.29417f, 0.294827f, 0.294804f, 0.295873f, 0.297358f, 0.297649f, 0.297811f, 0.299202f, 0.300424f, 0.300456f, 0.300945f, 0.302516f, 0.303367f, 0.303308f, 0.304191f, 0.305757f, 0.306215f, 0.306255f, 0.307508f, 0.308886f, 0.309018f, 0.309327f, 0.310841f, 0.311886f, 0.311837f, 0.312523f, 0.314127f, 0.314773f, 0.31473f, 0.315814f, 0.317316f, 0.317587f, 0.317737f, 0.319151f, 0.32038f, 0.320387f, 0.320875f, 0.322471f, 0.323317f, 0.323234f, 0.324128f, 0.325716f, 0.326157f, 0.32618f, 0.327454f, 0.328844f, 0.328952f, 0.329254f, 0.330794f, 0.33184f, 0.331764f, 0.332455f, 0.334085f, 0.33472f, 0.334654f, 0.335755f, 0.337276f, 0.337525f, 0.337662f, 0.339101f, 0.340337f, 0.340317f, 0.340804f, 0.342428f, 0.343268f, 0.343158f, 0.344064f, 0.345677f, 0.346099f, 0.346102f, 0.347399f, 0.348804f, 0.348885f, 0.349179f, 0.350748f, 0.351795f, 0.35169f, 0.352387f, 0.354046f, 0.354667f, 0.354575f, 0.355696f, 0.357238f, 0.357463f, 0.357584f, 0.359051f, 0.360296f, 0.360246f, 0.360731f, 0.362386f, 0.36322f, 0.363081f, 0.364f, 0.365639f, 0.366042f, 0.366023f, 0.367345f, 0.368766f, 0.368818f, 0.369102f, 0.370703f, 0.371753f, 0.371615f, 0.372317f, 0.374008f, 0.374615f, 0.374495f, 0.375637f, 0.377203f, 0.377401f, 0.377504f, 0.379002f, 0.380258f, 0.380173f, 0.380656f, 0.382346f, 0.383174f, 0.383001f, 0.383934f, 0.385604f, 0.385986f, 0.38594f, 0.387291f, 0.388731f, 0.38875f, 0.389023f, 0.39066f, 0.391712f, 0.391537f, 0.392246f, 0.393972f, 0.394565f, 0.394412f, 0.395577f, 0.39717f, 0.397338f, 0.397421f, 0.398954f, 0.400222f, 0.400099f, 0.400579f, 0.402308f, 0.40313f, 0.402919f, 0.403868f, 0.405572f, 0.405929f, 0.405855f, 0.407237f, 0.408699f, 0.408681f, 0.408941f, 0.410618f, 0.411674f, 0.411457f, 0.412173f, 0.413939f, 0.414515f, 0.414326f, 0.415516f, 0.41714f, 0.417275f, 0.417335f, 0.418908f, 0.420189f, 0.420023f, 0.4205f, 0.422273f, 0.423088f, 0.422834f, 0.4238f, 0.425543f, 0.425874f, 0.425767f, 0.427184f, 0.42867f, 0.428611f, 0.428856f, 0.430579f, 0.431638f, 0.431375f, 0.432098f, 0.433909f, 0.434467f, 0.434237f, 0.435455f, 0.437114f, 0.437212f, 0.437246f, 0.438862f, 0.440159f, 0.439945f, 0.440418f, 0.44224f, 0.443047f, 0.442745f, 0.443731f, 0.445518f, 0.445818f, 0.445674f, 0.447131f, 0.448645f, 0.448539f, 0.448767f, 0.450541f, 0.451605f, 0.451289f, 0.452021f, 0.453883f, 0.454421f, 0.454143f, 0.455394f, 0.457092f, 0.457148f, 0.457152f, 0.458818f, 0.460133f, 0.459865f, 0.460332f, 0.462211f, 0.46301f, 0.462653f, 0.46366f, 0.465498f, 0.465764f, 0.465577f, 0.467078f, 0.468625f, 0.468466f, 0.468674f, 0.470506f, 0.471576f, 0.4712f, 0.47194f, 0.473861f, 0.474376f, 0.474045f, 0.475331f, 0.477075f, 0.477084f, 0.477053f, 0.478775f, 0.480112f, 0.479782f, 0.480243f, 0.482186f, 0.482975f, 0.482555f, 0.483587f, 0.485482f, 0.48571f, 0.485475f, 0.487026f, 0.48861f, 0.488391f, 0.488576f, 0.490475f, 0.491552f, 0.491107f, 0.
\ No newline at end of file
-03659f, 0.204495f, 0.205985f, 0.206507f, 0.20661f, 0.207783f, 0.209117f, 0.20934f, 0.209671f, 0.211088f, 0.212135f, 0.212183f, 0.212843f, 0.214356f, 0.215049f, 0.215087f, 0.216105f, 0.217541f, 0.217895f, 0.218092f, 0.21941f, 0.220615f, 0.220724f, 0.221212f, 0.222705f, 0.223576f, 0.22359f, 0.224435f, 0.225937f, 0.226448f, 0.226541f, 0.227728f, 0.229068f, 0.229276f, 0.229604f, 0.231037f, 0.232083f, 0.232116f, 0.232781f, 0.234308f, 0.234993f, 0.235018f, 0.236047f, 0.237493f, 0.237834f, 0.238024f, 0.239358f, 0.240565f, 0.240658f, 0.241147f, 0.242656f, 0.243523f, 0.243521f, 0.244375f, 0.24589f, 0.24639f, 0.246472f, 0.247673f, 0.249021f, 0.249212f, 0.249537f, 0.250987f, 0.252032f, 0.252047f, 0.252718f, 0.254261f, 0.254937f, 0.254948f, 0.255989f, 0.257447f, 0.257772f, 0.257954f, 0.259305f, 0.260517f, 0.260591f, 0.26108f, 0.262609f, 0.26347f, 0.263451f, 0.264314f, 0.265845f, 0.266331f, 0.266401f, 0.267618f, 0.268974f, 0.269148f, 0.269468f, 0.270937f, 0.271982f, 0.271978f, 0.272654f, 0.274215f, 0.274882f, 0.274877f, 0.275931f, 0.277402f, 0.277711f, 0.277884f, 0.279253f, 0.28047f, 0.280524f, 0.281013f, 0.282562f, 0.283418f, 0.28338f, 0.284253f, 0.2858f, 0.286273f, 0.286329f, 0.287563f, 0.288929f, 0.289083f, 0.289398f, 0.290889f, 0.291933f, 0.291908f, 0.292589f, 0.29417f, 0.294827f, 0.294804f, 0.295873f, 0.297358f, 0.297649f, 0.297811f, 0.299202f, 0.300424f, 0.300456f, 0.300945f, 0.302516f, 0.303367f, 0.303308f, 0.304191f, 0.305757f, 0.306215f, 0.306255f, 0.307508f, 0.308886f, 0.309018f, 0.309327f, 0.310841f, 0.311886f, 0.311837f, 0.312523f, 0.314127f, 0.314773f, 0.31473f, 0.315814f, 0.317316f, 0.317587f, 0.317737f, 0.319151f, 0.32038f, 0.320387f, 0.320875f, 0.322471f, 0.323317f, 0.323234f, 0.324128f, 0.325716f, 0.326157f, 0.32618f, 0.327454f, 0.328844f, 0.328952f, 0.329254f, 0.330794f, 0.33184f, 0.331764f, 0.332455f, 0.334085f, 0.33472f, 0.334654f, 0.335755f, 0.337276f, 0.337525f, 0.337662f, 0.339101f, 0.340337f, 0.340317f, 0.340804f, 0.342428f, 0.343268f, 0.343158f, 0.344064f, 0.345677f, 0.346099f, 0.346102f, 0.347399f, 0.348804f, 0.348885f, 0.349179f, 0.350748f, 0.351795f, 0.35169f, 0.352387f, 0.354046f, 0.354667f, 0.354575f, 0.355696f, 0.357238f, 0.357463f, 0.357584f, 0.359051f, 0.360296f, 0.360246f, 0.360731f, 0.362386f, 0.36322f, 0.363081f, 0.364f, 0.365639f, 0.366042f, 0.366023f, 0.367345f, 0.368766f, 0.368818f, 0.369102f, 0.370703f, 0.371753f, 0.371615f, 0.372317f, 0.374008f, 0.374615f, 0.374495f, 0.375637f, 0.377203f, 0.377401f, 0.377504f, 0.379002f, 0.380258f, 0.380173f, 0.380656f, 0.382346f, 0.383174f, 0.383001f, 0.383934f, 0.385604f, 0.385986f, 0.38594f, 0.387291f, 0.388731f, 0.38875f, 0.389023f, 0.39066f, 0.391712f, 0.391537f, 0.392246f, 0.393972f, 0.394565f, 0.394412f, 0.395577f, 0.39717f, 0.397338f, 0.397421f, 0.398954f, 0.400222f, 0.400099f, 0.400579f, 0.402308f, 0.40313f, 0.402919f, 0.403868f, 0.405572f, 0.405929f, 0.405855f, 0.407237f, 0.408699f, 0.408681f, 0.408941f, 0.410618f, 0.411674f, 0.411457f, 0.412173f, 0.413939f, 0.414515f, 0.414326f, 0.415516f, 0.41714f, 0.417275f, 0.417335f, 0.418908f, 0.420189f, 0.420023f, 0.4205f, 0.422273f, 0.423088f, 0.422834f, 0.4238f, 0.425543f, 0.425874f, 0.425767f, 0.427184f, 0.42867f, 0.428611f, 0.428856f, 0.430579f, 0.431638f, 0.431375f, 0.432098f, 0.433909f, 0.434467f, 0.434237f, 0.435455f, 0.437114f, 0.437212f, 0.437246f, 0.438862f, 0.440159f, 0.439945f, 0.440418f, 0.44224f, 0.443047f, 0.442745f, 0.443731f, 0.445518f, 0.445818f, 0.445674f, 0.447131f, 0.448645f, 0.448539f, 0.448767f, 0.450541f, 0.451605f, 0.451289f, 0.452021f, 0.453883f, 0.454421f, 0.454143f, 0.455394f, 0.457092f, 0.457148f, 0.457152f, 0.458818f, 0.460133f, 0.459865f, 0.460332f, 0.462211f, 0.46301f, 0.462653f, 0.46366f, 0.465498f, 0.465764f, 0.465577f, 0.467078f, 0.468625f, 0.468466f, 0.468674f, 0.470506f, 0.471576f, 0.4712f, 0.47194f, 0.473861f, 0.474376f, 0.474045f, 0.475331f, 0.477075f, 0.477084f, 0.477053f, 0.478775f, 0.480112f, 0.479782f, 0.480243f, 0.482186f, 0.482975f, 0.482555f, 0.483587f, 0.485482f, 0.48571f, 0.485475f, 0.487026f, 0.48861f, 0.488391f, 0.488576f, 0.490475f, 0.491552f, 0.491107f, 0.49
\ No newline at end of file
+17f, 0.20934f, 0.209671f, 0.211088f, 0.212135f, 0.212183f, 0.212843f, 0.214356f, 0.215049f, 0.215087f, 0.216105f, 0.217541f, 0.217895f, 0.218092f, 0.21941f, 0.220615f, 0.220724f, 0.221212f, 0.222705f, 0.223576f, 0.22359f, 0.224435f, 0.225937f, 0.226448f, 0.226541f, 0.227728f, 0.229068f, 0.229276f, 0.229604f, 0.231037f, 0.232083f, 0.232116f, 0.232781f, 0.234308f, 0.234993f, 0.235018f, 0.236047f, 0.237493f, 0.237834f, 0.238024f, 0.239358f, 0.240565f, 0.240658f, 0.241147f, 0.242656f, 0.243523f, 0.243521f, 0.244375f, 0.24589f, 0.24639f, 0.246472f, 0.247673f, 0.249021f, 0.249212f, 0.249537f, 0.250987f, 0.252032f, 0.252047f, 0.252718f, 0.254261f, 0.254937f, 0.254948f, 0.255989f, 0.257447f, 0.257772f, 0.257954f, 0.259305f, 0.260517f, 0.260591f, 0.26108f, 0.262609f, 0.26347f, 0.263451f, 0.264314f, 0.265845f, 0.266331f, 0.266401f, 0.267618f, 0.268974f, 0.269148f, 0.269468f, 0.270937f, 0.271982f, 0.271978f, 0.272654f, 0.274215f, 0.274882f, 0.274877f, 0.275931f, 0.277402f, 0.277711f, 0.277884f, 0.279253f, 0.28047f, 0.280524f, 0.281013f, 0.282562f, 0.283418f, 0.28338f, 0.284253f, 0.2858f, 0.286273f, 0.286329f, 0.287563f, 0.288929f, 0.289083f, 0.289398f, 0.290889f, 0.291933f, 0.291908f, 0.292589f, 0.29417f, 0.294827f, 0.294804f, 0.295873f, 0.297358f, 0.297649f, 0.297811f, 0.299202f, 0.300424f, 0.300456f, 0.300945f, 0.302516f, 0.303367f, 0.303308f, 0.304191f, 0.305757f, 0.306215f, 0.306255f, 0.307508f, 0.308886f, 0.309018f, 0.309327f, 0.310841f, 0.311886f, 0.311837f, 0.312523f, 0.314127f, 0.314773f, 0.31473f, 0.315814f, 0.317316f, 0.317587f, 0.317737f, 0.319151f, 0.32038f, 0.320387f, 0.320875f, 0.322471f, 0.323317f, 0.323234f, 0.324128f, 0.325716f, 0.326157f, 0.32618f, 0.327454f, 0.328844f, 0.328952f, 0.329254f, 0.330794f, 0.33184f, 0.331764f, 0.332455f, 0.334085f, 0.33472f, 0.334654f, 0.335755f, 0.337276f, 0.337525f, 0.337662f, 0.339101f, 0.340337f, 0.340317f, 0.340804f, 0.342428f, 0.343268f, 0.343158f, 0.344064f, 0.345677f, 0.346099f, 0.346102f, 0.347399f, 0.348804f, 0.348885f, 0.349179f, 0.350748f, 0.351795f, 0.35169f, 0.352387f, 0.354046f, 0.354667f, 0.354575f, 0.355696f, 0.357238f, 0.357463f, 0.357584f, 0.359051f, 0.360296f, 0.360246f, 0.360731f, 0.362386f, 0.36322f, 0.363081f, 0.364f, 0.365639f, 0.366042f, 0.366023f, 0.367345f, 0.368766f, 0.368818f, 0.369102f, 0.370703f, 0.371753f, 0.371615f, 0.372317f, 0.374008f, 0.374615f, 0.374495f, 0.375637f, 0.377203f, 0.377401f, 0.377504f, 0.379002f, 0.380258f, 0.380173f, 0.380656f, 0.382346f, 0.383174f, 0.383001f, 0.383934f, 0.385604f, 0.385986f, 0.38594f, 0.387291f, 0.388731f, 0.38875f, 0.389023f, 0.39066f, 0.391712f, 0.391537f, 0.392246f, 0.393972f, 0.394565f, 0.394412f, 0.395577f, 0.39717f, 0.397338f, 0.397421f, 0.398954f, 0.400222f, 0.400099f, 0.400579f, 0.402308f, 0.40313f, 0.402919f, 0.403868f, 0.405572f, 0.405929f, 0.405855f, 0.407237f, 0.408699f, 0.408681f, 0.408941f, 0.410618f, 0.411674f, 0.411457f, 0.412173f, 0.413939f, 0.414515f, 0.414326f, 0.415516f, 0.41714f, 0.417275f, 0.417335f, 0.418908f, 0.420189f, 0.420023f, 0.4205f, 0.422273f, 0.423088f, 0.422834f, 0.4238f, 0.425543f, 0.425874f, 0.425767f, 0.427184f, 0.42867f, 0.428611f, 0.428856f, 0.430579f, 0.431638f, 0.431375f, 0.432098f, 0.433909f, 0.434467f, 0.434237f, 0.435455f, 0.437114f, 0.437212f, 0.437246f, 0.438862f, 0.440159f, 0.439945f, 0.440418f, 0.44224f, 0.443047f, 0.442745f, 0.443731f, 0.445518f, 0.445818f, 0.445674f, 0.447131f, 0.448645f, 0.448539f, 0.448767f, 0.450541f, 0.451605f, 0.451289f, 0.452021f, 0.453883f, 0.454421f, 0.454143f, 0.455394f, 0.457092f, 0.457148f, 0.457152f, 0.458818f, 0.460133f, 0.459865f, 0.460332f, 0.462211f, 0.46301f, 0.462653f, 0.46366f, 0.465498f, 0.465764f, 0.465577f, 0.467078f, 0.468625f, 0.468466f, 0.468674f, 0.470506f, 0.471576f, 0.4712f, 0.47194f, 0.473861f, 0.474376f, 0.474045f, 0.475331f, 0.477075f, 0.477084f, 0.477053f, 0.478775f, 0.480112f, 0.479782f, 0.480243f, 0.482186f, 0.482975f, 0.482555f, 0.483587f, 0.485482f, 0.48571f, 0.485475f, 0.487026f, 0.48861f, 0.488391f, 0.488576f, 0.490475f, 0.491552f, 0.491107f, 0.491856f, 0.493845f, 0.494333f, 0.493941f, 0.495268f, 0.497065f, 0.4970
\ No newline at end of file
85f, 0.206507f, 0.20661f, 0.207783f, 0.209117f, 0.20934f, 0.209671f, 0.211088f, 0.212135f, 0.212183f, 0.212843f, 0.214356f, 0.215049f, 0.215087f, 0.216105f, 0.217541f, 0.217895f, 0.218092f, 0.21941f, 0.220615f, 0.220724f, 0.221212f, 0.222705f, 0.223576f, 0.22359f, 0.224435f, 0.225937f, 0.226448f, 0.226541f, 0.227728f, 0.229068f, 0.229276f, 0.229604f, 0.231037f, 0.232083f, 0.232116f, 0.232781f, 0.234308f, 0.234993f, 0.235018f, 0.236047f, 0.237493f, 0.237834f, 0.238024f, 0.239358f, 0.240565f, 0.240658f, 0.241147f, 0.242656f, 0.243523f, 0.243521f, 0.244375f, 0.24589f, 0.24639f, 0.246472f, 0.247673f, 0.249021f, 0.249212f, 0.249537f, 0.250987f, 0.252032f, 0.252047f, 0.252718f, 0.254261f, 0.254937f, 0.254948f, 0.255989f, 0.257447f, 0.257772f, 0.257954f, 0.259305f, 0.260517f, 0.260591f, 0.26108f, 0.262609f, 0.26347f, 0.263451f, 0.264314f, 0.265845f, 0.266331f, 0.266401f, 0.267618f, 0.268974f, 0.269148f, 0.269468f, 0.270937f, 0.271982f, 0.271978f, 0.272654f, 0.274215f, 0.274882f, 0.274877f, 0.275931f, 0.277402f, 0.277711f, 0.277884f, 0.279253f, 0.28047f, 0.280524f, 0.281013f, 0.282562f, 0.283418f, 0.28338f, 0.284253f, 0.2858f, 0.286273f, 0.286329f, 0.287563f, 0.288929f, 0.289083f, 0.289398f, 0.290889f, 0.291933f, 0.291908f, 0.292589f, 0.29417f, 0.294827f, 0.294804f, 0.295873f, 0.297358f, 0.297649f, 0.297811f, 0.299202f, 0.300424f, 0.300456f, 0.300945f, 0.302516f, 0.303367f, 0.303308f, 0.304191f, 0.305757f, 0.306215f, 0.306255f, 0.307508f, 0.308886f, 0.309018f, 0.309327f, 0.310841f, 0.311886f, 0.311837f, 0.312523f, 0.314127f, 0.314773f, 0.31473f, 0.315814f, 0.317316f, 0.317587f, 0.317737f, 0.319151f, 0.32038f, 0.320387f, 0.320875f, 0.322471f, 0.323317f, 0.323234f, 0.324128f, 0.325716f, 0.326157f, 0.32618f, 0.327454f, 0.328844f, 0.328952f, 0.329254f, 0.330794f, 0.33184f, 0.331764f, 0.332455f, 0.334085f, 0.33472f, 0.334654f, 0.335755f, 0.337276f, 0.337525f, 0.337662f, 0.339101f, 0.340337f, 0.340317f, 0.340804f, 0.342428f, 0.343268f, 0.343158f, 0.344064f, 0.345677f, 0.346099f, 0.346102f, 0.347399f, 0.348804f, 0.348885f, 0.349179f, 0.350748f, 0.351795f, 0.35169f, 0.352387f, 0.354046f, 0.354667f, 0.354575f, 0.355696f, 0.357238f, 0.357463f, 0.357584f, 0.359051f, 0.360296f, 0.360246f, 0.360731f, 0.362386f, 0.36322f, 0.363081f, 0.364f, 0.365639f, 0.366042f, 0.366023f, 0.367345f, 0.368766f, 0.368818f, 0.369102f, 0.370703f, 0.371753f, 0.371615f, 0.372317f, 0.374008f, 0.374615f, 0.374495f, 0.375637f, 0.377203f, 0.377401f, 0.377504f, 0.379002f, 0.380258f, 0.380173f, 0.380656f, 0.382346f, 0.383174f, 0.383001f, 0.383934f, 0.385604f, 0.385986f, 0.38594f, 0.387291f, 0.388731f, 0.38875f, 0.389023f, 0.39066f, 0.391712f, 0.391537f, 0.392246f, 0.393972f, 0.394565f, 0.394412f, 0.395577f, 0.39717f, 0.397338f, 0.397421f, 0.398954f, 0.400222f, 0.400099f, 0.400579f, 0.402308f, 0.40313f, 0.402919f, 0.403868f, 0.405572f, 0.405929f, 0.405855f, 0.407237f, 0.408699f, 0.408681f, 0.408941f, 0.410618f, 0.411674f, 0.411457f, 0.412173f, 0.413939f, 0.414515f, 0.414326f, 0.415516f, 0.41714f, 0.417275f, 0.417335f, 0.418908f, 0.420189f, 0.420023f, 0.4205f, 0.422273f, 0.423088f, 0.422834f, 0.4238f, 0.425543f, 0.425874f, 0.425767f, 0.427184f, 0.42867f, 0.428611f, 0.428856f, 0.430579f, 0.431638f, 0.431375f, 0.432098f, 0.433909f, 0.434467f, 0.434237f, 0.435455f, 0.437114f, 0.437212f, 0.437246f, 0.438862f, 0.440159f, 0.439945f, 0.440418f, 0.44224f, 0.443047f, 0.442745f, 0.443731f, 0.445518f, 0.445818f, 0.445674f, 0.447131f, 0.448645f, 0.448539f, 0.448767f, 0.450541f, 0.451605f, 0.451289f, 0.452021f, 0.453883f, 0.454421f, 0.454143f, 0.455394f, 0.457092f, 0.457148f, 0.457152f, 0.458818f, 0.460133f, 0.459865f, 0.460332f, 0.462211f, 0.46301f, 0.462653f, 0.46366f, 0.465498f, 0.465764f, 0.465577f, 0.467078f, 0.468625f, 0.468466f, 0.468674f, 0.470506f, 0.471576f, 0.4712f, 0.47194f, 0.473861f, 0.474376f, 0.474045f, 0.475331f, 0.477075f, 0.477084f, 0.477053f, 0.478775f, 0.480112f, 0.479782f, 0.480243f, 0.482186f, 0.482975f, 0.482555f, 0.483587f, 0.485482f, 0.48571f, 0.485475f, 0.487026f, 0.48861f, 0.488391f, 0.488576f, 0.490475f, 0.491552f, 0.491107f, 0.491856f, 0.493845f, 0.49433
\ No newline at end of file
},
@@ -3484,12 +3482,9 @@
.10852f, 0.108576f, 0.108825f, 0.109358f, 0.110216f, 0.111384f, 0.112791f, 0.114326f, 0.115854f, 0.11724f, 0.118378f, 0.119201f, 0.119699f, 0.119919f, 0.119957f, 0.119941f, 0.120008f, 0.120281f, 0.120846f, 0.12174f, 0.12294f, 0.12437f, 0.125915f, 0.127438f, 0.128806f, 0.129914f, 0.130703f, 0.131166f, 0.131359f, 0.131381f, 0.131363f, 0.131442f, 0.131739f, 0.132338f, 0.133266f, 0.134498f, 0.13595f, 0.137504f, 0.139021f, 0.14037f, 0.141449f, 0.142202f, 0.142632f, 0.142797f, 0.142803f, 0.142784f, 0.142877f, 0.1432f, 0.143832f, 0.144796f, 0.146058f, 0.147533f, 0.149095f, 0.150605f, 0.151933f, 0.152981f, 0.153698f, 0.154094f, 0.154233f, 0.154224f, 0.154205f, 0.154312f, 0.154662f, 0.155328f, 0.156328f, 0.157622f, 0.159117f, 0.160686f, 0.162188f, 0.163494f, 0.16451f, 0.165192f, 0.165554f, 0.165666f, 0.165644f, 0.165626f, 0.165749f, 0.166126f, 0.166827f, 0.167863f, 0.169188f, 0.170703f, 0.172277f, 0.173771f, 0.175054f, 0.176038f, 0.176683f, 0.17701f, 0.177097f, 0.177062f, 0.177046f, 0.177186f, 0.177593f, 0.178329f, 0.179401f, 0.180756f, 0.18229f, 0.18387f, 0.185353f, 0.186612f, 0.187563f, 0.188171f, 0.188464f, 0.188526f, 0.188479f, 0.188467f, 0.188625f, 0.189061f, 0.189834f, 0.190942f, 0.192327f, 0.19388f, 0.195463f, 0.196934f, 0.198169f, 0.199085f, 0.199656f, 0.199915f, 0.199952f, 0.199895f, 0.199887f, 0.200065f, 0.200532f, 0.201342f, 0.202486f, 0.203901f, 0.205471f, 0.207057f, 0.208515f, 0.209724f, 0.210605f, 0.211138f, 0.211364f, 0.211377f, 0.211309f, 0.211307f, 0.211506f, 0.212005f, 0.212852f, 0.214033f, 0.215477f, 0.217065f, 0.218652f, 0.220096f, 0.221277f, 0.222122f, 0.222617f, 0.222809f, 0.222799f, 0.222722f, 0.222727f, 0.222948f, 0.22348f, 0.224365f, 0.225584f, 0.227056f, 0.22866f, 0.230248f, 0.231676f, 0.232828f, 0.233636f, 0.234092f, 0.234251f, 0.234218f, 0.234134f, 0.234147f, 0.234391f, 0.234957f, 0.235882f, 0.237137f, 0.238638f, 0.240257f, 0.241844f, 0.243255f, 0.244377f, 0.245148f, 0.245565f, 0.24569f, 0.245635f, 0.245544f, 0.245567f, 0.245836f, 0.246437f, 0.247401f, 0.248694f, 0.250223f, 0.251856f, 0.253441f, 0.254834f, 0.255925f, 0.256657f, 0.257034f, 0.257126f, 0.25705f, 0.256953f, 0.256987f, 0.257281f, 0.257919f, 0.258923f, 0.260253f, 0.261811f, 0.263457f, 0.265039f, 0.266412f, 0.267471f, 0.268163f, 0.2685f, 0.268559f, 0.268462f, 0.26836f, 0.268407f, 0.268729f, 0.269404f, 0.270449f, 0.271817f, 0.273402f, 0.275061f, 0.276637f, 0.27799f, 0.279014f, 0.279666f, 0.279963f, 0.279988f, 0.279871f, 0.279766f, 0.279827f, 0.280177f, 0.280891f, 0.281978f, 0.283383f, 0.284995f, 0.286666f, 0.288237f, 0.289567f, 0.290556f, 0.291166f, 0.291422f, 0.291414f, 0.291278f, 0.291171f, 0.291246f, 0.291627f, 0.292381f, 0.293511f, 0.294954f, 0.296592f, 0.298273f, 0.299837f, 0.301143f, 0.302096f, 0.302663f, 0.302878f, 0.302837f, 0.302682f, 0.302573f, 0.302666f, 0.303078f, 0.303873f, 0.305047f, 0.306528f, 0.308192f, 0.309883f, 0.311438f, 0.312718f, 0.313633f, 0.314156f, 0.314329f, 0.314256f, 0.314083f, 0.313975f, 0.314086f, 0.314531f, 0.315369f, 0.316586f, 0.318106f, 0.319796f, 0.321495f, 0.32304f, 0.324293f, 0.325168f, 0.325647f, 0.325777f, 0.325671f, 0.325481f, 0.325374f, 0.325505f, 0.325986f, 0.326867f, 0.328129f, 0.329688f, 0.331403f, 0.33311f, 0.334642f, 0.335867f, 0.336701f, 0.337133f, 0.337221f, 0.337082f, 0.336876f, 0.336772f, 0.336925f, 0.337442f, 0.338368f, 0.339677f, 0.341274f, 0.343014f, 0.344727f, 0.346246f, 0.34744f, 0.348232f, 0.348617f, 0.34866f, 0.348489f, 0.348267f, 0.348168f, 0.348344f, 0.348899f, 0.349872f, 0.351228f, 0.352864f, 0.354628f, 0.356346f, 0.357851f, 0.359012f, 0.35976f, 0.360096f, 0.360096f, 0.359892f, 0.359656f, 0.359562f, 0.359763f, 0.360359f, 0.36138f, 0.362783f, 0.364459f, 0.366247f, 0.367969f, 0.369457f, 0.370584f, 0.371285f, 0.371572f, 0.371526f, 0.371291f, 0.371041f, 0.370954f, 0.371182f, 0.37182f, 0.372891f, 0.374343f, 0.376058f, 0.37787f, 0.379594f, 0.381064f, 0.382155f, 0.382808f, 0.383043f, 0.382952f, 0.382685f, 0.382422f, 0.382344f, 0.382601f, 0.383282f, 0.384405f, 0.385908f, 0.387663f, 0.389497f, 0.391223f, 0.392672f, 0.393725f, 0.394328f, 0.394511f, 0.394373f, 0.394073f, 0.393799f, 0.393731f, 0
\ No newline at end of file
},
-576f, 0.108825f, 0.109358f, 0.110216f, 0.111384f, 0.112791f, 0.114326f, 0.115854f, 0.11724f, 0.118378f, 0.119201f, 0.119699f, 0.119919f, 0.119957f, 0.119941f, 0.120008f, 0.120281f, 0.120846f, 0.12174f, 0.12294f, 0.12437f, 0.125915f, 0.127438f, 0.128806f, 0.129914f, 0.130703f, 0.131166f, 0.131359f, 0.131381f, 0.131363f, 0.131442f, 0.131739f, 0.132338f, 0.133266f, 0.134498f, 0.13595f, 0.137504f, 0.139021f, 0.14037f, 0.141449f, 0.142202f, 0.142632f, 0.142797f, 0.142803f, 0.142784f, 0.142877f, 0.1432f, 0.143832f, 0.144796f, 0.146058f, 0.147533f, 0.149095f, 0.150605f, 0.151933f, 0.152981f, 0.153698f, 0.154094f, 0.154233f, 0.154224f, 0.154205f, 0.154312f, 0.154662f, 0.155328f, 0.156328f, 0.157622f, 0.159117f, 0.160686f, 0.162188f, 0.163494f, 0.16451f, 0.165192f, 0.165554f, 0.165666f, 0.165644f, 0.165626f, 0.165749f, 0.166126f, 0.166827f, 0.167863f, 0.169188f, 0.170703f, 0.172277f, 0.173771f, 0.175054f, 0.176038f, 0.176683f, 0.17701f, 0.177097f, 0.177062f, 0.177046f, 0.177186f, 0.177593f, 0.178329f, 0.179401f, 0.180756f, 0.18229f, 0.18387f, 0.185353f, 0.186612f, 0.187563f, 0.188171f, 0.188464f, 0.188526f, 0.188479f, 0.188467f, 0.188625f, 0.189061f, 0.189834f, 0.190942f, 0.192327f, 0.19388f, 0.195463f, 0.196934f, 0.198169f, 0.199085f, 0.199656f, 0.199915f, 0.199952f, 0.199895f, 0.199887f, 0.200065f, 0.200532f, 0.201342f, 0.202486f, 0.203901f, 0.205471f, 0.207057f, 0.208515f, 0.209724f, 0.210605f, 0.211138f, 0.211364f, 0.211377f, 0.211309f, 0.211307f, 0.211506f, 0.212005f, 0.212852f, 0.214033f, 0.215477f, 0.217065f, 0.218652f, 0.220096f, 0.221277f, 0.222122f, 0.222617f, 0.222809f, 0.222799f, 0.222722f, 0.222727f, 0.222948f, 0.22348f, 0.224365f, 0.225584f, 0.227056f, 0.22866f, 0.230248f, 0.231676f, 0.232828f, 0.233636f, 0.234092f, 0.234251f, 0.234218f, 0.234134f, 0.234147f, 0.234391f, 0.234957f, 0.235882f, 0.237137f, 0.238638f, 0.240257f, 0.241844f, 0.243255f, 0.244377f, 0.245148f, 0.245565f, 0.24569f, 0.245635f, 0.245544f, 0.245567f, 0.245836f, 0.246437f, 0.247401f, 0.248694f, 0.250223f, 0.251856f, 0.253441f, 0.254834f, 0.255925f, 0.256657f, 0.257034f, 0.257126f, 0.25705f, 0.256953f, 0.256987f, 0.257281f, 0.257919f, 0.258923f, 0.260253f, 0.261811f, 0.263457f, 0.265039f, 0.266412f, 0.267471f, 0.268163f, 0.2685f, 0.268559f, 0.268462f, 0.26836f, 0.268407f, 0.268729f, 0.269404f, 0.270449f, 0.271817f, 0.273402f, 0.275061f, 0.276637f, 0.27799f, 0.279014f, 0.279666f, 0.279963f, 0.279988f, 0.279871f, 0.279766f, 0.279827f, 0.280177f, 0.280891f, 0.281978f, 0.283383f, 0.284995f, 0.286666f, 0.288237f, 0.289567f, 0.290556f, 0.291166f, 0.291422f, 0.291414f, 0.291278f, 0.291171f, 0.291246f, 0.291627f, 0.292381f, 0.293511f, 0.294954f, 0.296592f, 0.298273f, 0.299837f, 0.301143f, 0.302096f, 0.302663f, 0.302878f, 0.302837f, 0.302682f, 0.302573f, 0.302666f, 0.303078f, 0.303873f, 0.305047f, 0.306528f, 0.308192f, 0.309883f, 0.311438f, 0.312718f, 0.313633f, 0.314156f, 0.314329f, 0.314256f, 0.314083f, 0.313975f, 0.314086f, 0.314531f, 0.315369f, 0.316586f, 0.318106f, 0.319796f, 0.321495f, 0.32304f, 0.324293f, 0.325168f, 0.325647f, 0.325777f, 0.325671f, 0.325481f, 0.325374f, 0.325505f, 0.325986f, 0.326867f, 0.328129f, 0.329688f, 0.331403f, 0.33311f, 0.334642f, 0.335867f, 0.336701f, 0.337133f, 0.337221f, 0.337082f, 0.336876f, 0.336772f, 0.336925f, 0.337442f, 0.338368f, 0.339677f, 0.341274f, 0.343014f, 0.344727f, 0.346246f, 0.34744f, 0.348232f, 0.348617f, 0.34866f, 0.348489f, 0.348267f, 0.348168f, 0.348344f, 0.348899f, 0.349872f, 0.351228f, 0.352864f, 0.354628f, 0.356346f, 0.357851f, 0.359012f, 0.35976f, 0.360096f, 0.360096f, 0.359892f, 0.359656f, 0.359562f, 0.359763f, 0.360359f, 0.36138f, 0.362783f, 0.364459f, 0.366247f, 0.367969f, 0.369457f, 0.370584f, 0.371285f, 0.371572f, 0.371526f, 0.371291f, 0.371041f, 0.370954f, 0.371182f, 0.37182f, 0.372891f, 0.374343f, 0.376058f, 0.37787f, 0.379594f, 0.381064f, 0.382155f, 0.382808f, 0.383043f, 0.382952f, 0.382685f, 0.382422f, 0.382344f, 0.382601f, 0.383282f, 0.384405f, 0.385908f, 0.387663f, 0.389497f, 0.391223f, 0.392672f, 0.393725f, 0.394328f, 0.394511f, 0.394373f, 0.394073f, 0.393799f, 0.393731f, 0.394019f, 0.39
\ No newline at end of file
+115854f, 0.11724f, 0.118378f, 0.119201f, 0.119699f, 0.119919f, 0.119957f, 0.119941f, 0.120008f, 0.120281f, 0.120846f, 0.12174f, 0.12294f, 0.12437f, 0.125915f, 0.127438f, 0.128806f, 0.129914f, 0.130703f, 0.131166f, 0.131359f, 0.131381f, 0.131363f, 0.131442f, 0.131739f, 0.132338f, 0.133266f, 0.134498f, 0.13595f, 0.137504f, 0.139021f, 0.14037f, 0.141449f, 0.142202f, 0.142632f, 0.142797f, 0.142803f, 0.142784f, 0.142877f, 0.1432f, 0.143832f, 0.144796f, 0.146058f, 0.147533f, 0.149095f, 0.150605f, 0.151933f, 0.152981f, 0.153698f, 0.154094f, 0.154233f, 0.154224f, 0.154205f, 0.154312f, 0.154662f, 0.155328f, 0.156328f, 0.157622f, 0.159117f, 0.160686f, 0.162188f, 0.163494f, 0.16451f, 0.165192f, 0.165554f, 0.165666f, 0.165644f, 0.165626f, 0.165749f, 0.166126f, 0.166827f, 0.167863f, 0.169188f, 0.170703f, 0.172277f, 0.173771f, 0.175054f, 0.176038f, 0.176683f, 0.17701f, 0.177097f, 0.177062f, 0.177046f, 0.177186f, 0.177593f, 0.178329f, 0.179401f, 0.180756f, 0.18229f, 0.18387f, 0.185353f, 0.186612f, 0.187563f, 0.188171f, 0.188464f, 0.188526f, 0.188479f, 0.188467f, 0.188625f, 0.189061f, 0.189834f, 0.190942f, 0.192327f, 0.19388f, 0.195463f, 0.196934f, 0.198169f, 0.199085f, 0.199656f, 0.199915f, 0.199952f, 0.199895f, 0.199887f, 0.200065f, 0.200532f, 0.201342f, 0.202486f, 0.203901f, 0.205471f, 0.207057f, 0.208515f, 0.209724f, 0.210605f, 0.211138f, 0.211364f, 0.211377f, 0.211309f, 0.211307f, 0.211506f, 0.212005f, 0.212852f, 0.214033f, 0.215477f, 0.217065f, 0.218652f, 0.220096f, 0.221277f, 0.222122f, 0.222617f, 0.222809f, 0.222799f, 0.222722f, 0.222727f, 0.222948f, 0.22348f, 0.224365f, 0.225584f, 0.227056f, 0.22866f, 0.230248f, 0.231676f, 0.232828f, 0.233636f, 0.234092f, 0.234251f, 0.234218f, 0.234134f, 0.234147f, 0.234391f, 0.234957f, 0.235882f, 0.237137f, 0.238638f, 0.240257f, 0.241844f, 0.243255f, 0.244377f, 0.245148f, 0.245565f, 0.24569f, 0.245635f, 0.245544f, 0.245567f, 0.245836f, 0.246437f, 0.247401f, 0.248694f, 0.250223f, 0.251856f, 0.253441f, 0.254834f, 0.255925f, 0.256657f, 0.257034f, 0.257126f, 0.25705f, 0.256953f, 0.256987f, 0.257281f, 0.257919f, 0.258923f, 0.260253f, 0.261811f, 0.263457f, 0.265039f, 0.266412f, 0.267471f, 0.268163f, 0.2685f, 0.268559f, 0.268462f, 0.26836f, 0.268407f, 0.268729f, 0.269404f, 0.270449f, 0.271817f, 0.273402f, 0.275061f, 0.276637f, 0.27799f, 0.279014f, 0.279666f, 0.279963f, 0.279988f, 0.279871f, 0.279766f, 0.279827f, 0.280177f, 0.280891f, 0.281978f, 0.283383f, 0.284995f, 0.286666f, 0.288237f, 0.289567f, 0.290556f, 0.291166f, 0.291422f, 0.291414f, 0.291278f, 0.291171f, 0.291246f, 0.291627f, 0.292381f, 0.293511f, 0.294954f, 0.296592f, 0.298273f, 0.299837f, 0.301143f, 0.302096f, 0.302663f, 0.302878f, 0.302837f, 0.302682f, 0.302573f, 0.302666f, 0.303078f, 0.303873f, 0.305047f, 0.306528f, 0.308192f, 0.309883f, 0.311438f, 0.312718f, 0.313633f, 0.314156f, 0.314329f, 0.314256f, 0.314083f, 0.313975f, 0.314086f, 0.314531f, 0.315369f, 0.316586f, 0.318106f, 0.319796f, 0.321495f, 0.32304f, 0.324293f, 0.325168f, 0.325647f, 0.325777f, 0.325671f, 0.325481f, 0.325374f, 0.325505f, 0.325986f, 0.326867f, 0.328129f, 0.329688f, 0.331403f, 0.33311f, 0.334642f, 0.335867f, 0.336701f, 0.337133f, 0.337221f, 0.337082f, 0.336876f, 0.336772f, 0.336925f, 0.337442f, 0.338368f, 0.339677f, 0.341274f, 0.343014f, 0.344727f, 0.346246f, 0.34744f, 0.348232f, 0.348617f, 0.34866f, 0.348489f, 0.348267f, 0.348168f, 0.348344f, 0.348899f, 0.349872f, 0.351228f, 0.352864f, 0.354628f, 0.356346f, 0.357851f, 0.359012f, 0.35976f, 0.360096f, 0.360096f, 0.359892f, 0.359656f, 0.359562f, 0.359763f, 0.360359f, 0.36138f, 0.362783f, 0.364459f, 0.366247f, 0.367969f, 0.369457f, 0.370584f, 0.371285f, 0.371572f, 0.371526f, 0.371291f, 0.371041f, 0.370954f, 0.371182f, 0.37182f, 0.372891f, 0.374343f, 0.376058f, 0.37787f, 0.379594f, 0.381064f, 0.382155f, 0.382808f, 0.383043f, 0.382952f, 0.382685f, 0.382422f, 0.382344f, 0.382601f, 0.383282f, 0.384405f, 0.385908f, 0.387663f, 0.389497f, 0.391223f, 0.392672f, 0.393725f, 0.394328f, 0.394511f, 0.394373f, 0.394073f, 0.393799f, 0.393731f, 0.394019f, 0.394747f, 0.395923f, 0.397478f, 0.399273f, 0.401129f, 0.402855f, 0.404282f, 0
\ No newline at end of file
108825f, 0.109358f, 0.110216f, 0.111384f, 0.112791f, 0.114326f, 0.115854f, 0.11724f, 0.118378f, 0.119201f, 0.119699f, 0.119919f, 0.119957f, 0.119941f, 0.120008f, 0.120281f, 0.120846f, 0.12174f, 0.12294f, 0.12437f, 0.125915f, 0.127438f, 0.128806f, 0.129914f, 0.130703f, 0.131166f, 0.131359f, 0.131381f, 0.131363f, 0.131442f, 0.131739f, 0.132338f, 0.133266f, 0.134498f, 0.13595f, 0.137504f, 0.139021f, 0.14037f, 0.141449f, 0.142202f, 0.142632f, 0.142797f, 0.142803f, 0.142784f, 0.142877f, 0.1432f, 0.143832f, 0.144796f, 0.146058f, 0.147533f, 0.149095f, 0.150605f, 0.151933f, 0.152981f, 0.153698f, 0.154094f, 0.154233f, 0.154224f, 0.154205f, 0.154312f, 0.154662f, 0.155328f, 0.156328f, 0.157622f, 0.159117f, 0.160686f, 0.162188f, 0.163494f, 0.16451f, 0.165192f, 0.165554f, 0.165666f, 0.165644f, 0.165626f, 0.165749f, 0.166126f, 0.166827f, 0.167863f, 0.169188f, 0.170703f, 0.172277f, 0.173771f, 0.175054f, 0.176038f, 0.176683f, 0.17701f, 0.177097f, 0.177062f, 0.177046f, 0.177186f, 0.177593f, 0.178329f, 0.179401f, 0.180756f, 0.18229f, 0.18387f, 0.185353f, 0.186612f, 0.187563f, 0.188171f, 0.188464f, 0.188526f, 0.188479f, 0.188467f, 0.188625f, 0.189061f, 0.189834f, 0.190942f, 0.192327f, 0.19388f, 0.195463f, 0.196934f, 0.198169f, 0.199085f, 0.199656f, 0.199915f, 0.199952f, 0.199895f, 0.199887f, 0.200065f, 0.200532f, 0.201342f, 0.202486f, 0.203901f, 0.205471f, 0.207057f, 0.208515f, 0.209724f, 0.210605f, 0.211138f, 0.211364f, 0.211377f, 0.211309f, 0.211307f, 0.211506f, 0.212005f, 0.212852f, 0.214033f, 0.215477f, 0.217065f, 0.218652f, 0.220096f, 0.221277f, 0.222122f, 0.222617f, 0.222809f, 0.222799f, 0.222722f, 0.222727f, 0.222948f, 0.22348f, 0.224365f, 0.225584f, 0.227056f, 0.22866f, 0.230248f, 0.231676f, 0.232828f, 0.233636f, 0.234092f, 0.234251f, 0.234218f, 0.234134f, 0.234147f, 0.234391f, 0.234957f, 0.235882f, 0.237137f, 0.238638f, 0.240257f, 0.241844f, 0.243255f, 0.244377f, 0.245148f, 0.245565f, 0.24569f, 0.245635f, 0.245544f, 0.245567f, 0.245836f, 0.246437f, 0.247401f, 0.248694f, 0.250223f, 0.251856f, 0.253441f, 0.254834f, 0.255925f, 0.256657f, 0.257034f, 0.257126f, 0.25705f, 0.256953f, 0.256987f, 0.257281f, 0.257919f, 0.258923f, 0.260253f, 0.261811f, 0.263457f, 0.265039f, 0.266412f, 0.267471f, 0.268163f, 0.2685f, 0.268559f, 0.268462f, 0.26836f, 0.268407f, 0.268729f, 0.269404f, 0.270449f, 0.271817f, 0.273402f, 0.275061f, 0.276637f, 0.27799f, 0.279014f, 0.279666f, 0.279963f, 0.279988f, 0.279871f, 0.279766f, 0.279827f, 0.280177f, 0.280891f, 0.281978f, 0.283383f, 0.284995f, 0.286666f, 0.288237f, 0.289567f, 0.290556f, 0.291166f, 0.291422f, 0.291414f, 0.291278f, 0.291171f, 0.291246f, 0.291627f, 0.292381f, 0.293511f, 0.294954f, 0.296592f, 0.298273f, 0.299837f, 0.301143f, 0.302096f, 0.302663f, 0.302878f, 0.302837f, 0.302682f, 0.302573f, 0.302666f, 0.303078f, 0.303873f, 0.305047f, 0.306528f, 0.308192f, 0.309883f, 0.311438f, 0.312718f, 0.313633f, 0.314156f, 0.314329f, 0.314256f, 0.314083f, 0.313975f, 0.314086f, 0.314531f, 0.315369f, 0.316586f, 0.318106f, 0.319796f, 0.321495f, 0.32304f, 0.324293f, 0.325168f, 0.325647f, 0.325777f, 0.325671f, 0.325481f, 0.325374f, 0.325505f, 0.325986f, 0.326867f, 0.328129f, 0.329688f, 0.331403f, 0.33311f, 0.334642f, 0.335867f, 0.336701f, 0.337133f, 0.337221f, 0.337082f, 0.336876f, 0.336772f, 0.336925f, 0.337442f, 0.338368f, 0.339677f, 0.341274f, 0.343014f, 0.344727f, 0.346246f, 0.34744f, 0.348232f, 0.348617f, 0.34866f, 0.348489f, 0.348267f, 0.348168f, 0.348344f, 0.348899f, 0.349872f, 0.351228f, 0.352864f, 0.354628f, 0.356346f, 0.357851f, 0.359012f, 0.35976f, 0.360096f, 0.360096f, 0.359892f, 0.359656f, 0.359562f, 0.359763f, 0.360359f, 0.36138f, 0.362783f, 0.364459f, 0.366247f, 0.367969f, 0.369457f, 0.370584f, 0.371285f, 0.371572f, 0.371526f, 0.371291f, 0.371041f, 0.370954f, 0.371182f, 0.37182f, 0.372891f, 0.374343f, 0.376058f, 0.37787f, 0.379594f, 0.381064f, 0.382155f, 0.382808f, 0.383043f, 0.382952f, 0.382685f, 0.382422f, 0.382344f, 0.382601f, 0.383282f, 0.384405f, 0.385908f, 0.387663f, 0.389497f, 0.391223f, 0.392672f, 0.393725f, 0.394328f, 0.394511f, 0.394373f, 0.394073f, 0.393799f, 0.393731f, 0.394019f, 0.394747f, 0
\ No newline at end of file
-8825f, 0.109358f, 0.110216f, 0.111384f, 0.112791f, 0.114326f, 0.115854f, 0.11724f, 0.118378f, 0.119201f, 0.119699f, 0.119919f, 0.119957f, 0.119941f, 0.120008f, 0.120281f, 0.120846f, 0.12174f, 0.12294f, 0.12437f, 0.125915f, 0.127438f, 0.128806f, 0.129914f, 0.130703f, 0.131166f, 0.131359f, 0.131381f, 0.131363f, 0.131442f, 0.131739f, 0.132338f, 0.133266f, 0.134498f, 0.13595f, 0.137504f, 0.139021f, 0.14037f, 0.141449f, 0.142202f, 0.142632f, 0.142797f, 0.142803f, 0.142784f, 0.142877f, 0.1432f, 0.143832f, 0.144796f, 0.146058f, 0.147533f, 0.149095f, 0.150605f, 0.151933f, 0.152981f, 0.153698f, 0.154094f, 0.154233f, 0.154224f, 0.154205f, 0.154312f, 0.154662f, 0.155328f, 0.156328f, 0.157622f, 0.159117f, 0.160686f, 0.162188f, 0.163494f, 0.16451f, 0.165192f, 0.165554f, 0.165666f, 0.165644f, 0.165626f, 0.165749f, 0.166126f, 0.166827f, 0.167863f, 0.169188f, 0.170703f, 0.172277f, 0.173771f, 0.175054f, 0.176038f, 0.176683f, 0.17701f, 0.177097f, 0.177062f, 0.177046f, 0.177186f, 0.177593f, 0.178329f, 0.179401f, 0.180756f, 0.18229f, 0.18387f, 0.185353f, 0.186612f, 0.187563f, 0.188171f, 0.188464f, 0.188526f, 0.188479f, 0.188467f, 0.188625f, 0.189061f, 0.189834f, 0.190942f, 0.192327f, 0.19388f, 0.195463f, 0.196934f, 0.198169f, 0.199085f, 0.199656f, 0.199915f, 0.199952f, 0.199895f, 0.199887f, 0.200065f, 0.200532f, 0.201342f, 0.202486f, 0.203901f, 0.205471f, 0.207057f, 0.208515f, 0.209724f, 0.210605f, 0.211138f, 0.211364f, 0.211377f, 0.211309f, 0.211307f, 0.211506f, 0.212005f, 0.212852f, 0.214033f, 0.215477f, 0.217065f, 0.218652f, 0.220096f, 0.221277f, 0.222122f, 0.222617f, 0.222809f, 0.222799f, 0.222722f, 0.222727f, 0.222948f, 0.22348f, 0.224365f, 0.225584f, 0.227056f, 0.22866f, 0.230248f, 0.231676f, 0.232828f, 0.233636f, 0.234092f, 0.234251f, 0.234218f, 0.234134f, 0.234147f, 0.234391f, 0.234957f, 0.235882f, 0.237137f, 0.238638f, 0.240257f, 0.241844f, 0.243255f, 0.244377f, 0.245148f, 0.245565f, 0.24569f, 0.245635f, 0.245544f, 0.245567f, 0.245836f, 0.246437f, 0.247401f, 0.248694f, 0.250223f, 0.251856f, 0.253441f, 0.254834f, 0.255925f, 0.256657f, 0.257034f, 0.257126f, 0.25705f, 0.256953f, 0.256987f, 0.257281f, 0.257919f, 0.258923f, 0.260253f, 0.261811f, 0.263457f, 0.265039f, 0.266412f, 0.267471f, 0.268163f, 0.2685f, 0.268559f, 0.268462f, 0.26836f, 0.268407f, 0.268729f, 0.269404f, 0.270449f, 0.271817f, 0.273402f, 0.275061f, 0.276637f, 0.27799f, 0.279014f, 0.279666f, 0.279963f, 0.279988f, 0.279871f, 0.279766f, 0.279827f, 0.280177f, 0.280891f, 0.281978f, 0.283383f, 0.284995f, 0.286666f, 0.288237f, 0.289567f, 0.290556f, 0.291166f, 0.291422f, 0.291414f, 0.291278f, 0.291171f, 0.291246f, 0.291627f, 0.292381f, 0.293511f, 0.294954f, 0.296592f, 0.298273f, 0.299837f, 0.301143f, 0.302096f, 0.302663f, 0.302878f, 0.302837f, 0.302682f, 0.302573f, 0.302666f, 0.303078f, 0.303873f, 0.305047f, 0.306528f, 0.308192f, 0.309883f, 0.311438f, 0.312718f, 0.313633f, 0.314156f, 0.314329f, 0.314256f, 0.314083f, 0.313975f, 0.314086f, 0.314531f, 0.315369f, 0.316586f, 0.318106f, 0.319796f, 0.321495f, 0.32304f, 0.324293f, 0.325168f, 0.325647f, 0.325777f, 0.325671f, 0.325481f, 0.325374f, 0.325505f, 0.325986f, 0.326867f, 0.328129f, 0.329688f, 0.331403f, 0.33311f, 0.334642f, 0.335867f, 0.336701f, 0.337133f, 0.337221f, 0.337082f, 0.336876f, 0.336772f, 0.336925f, 0.337442f, 0.338368f, 0.339677f, 0.341274f, 0.343014f, 0.344727f, 0.346246f, 0.34744f, 0.348232f, 0.348617f, 0.34866f, 0.348489f, 0.348267f, 0.348168f, 0.348344f, 0.348899f, 0.349872f, 0.351228f, 0.352864f, 0.354628f, 0.356346f, 0.357851f, 0.359012f, 0.35976f, 0.360096f, 0.360096f, 0.359892f, 0.359656f, 0.359562f, 0.359763f, 0.360359f, 0.36138f, 0.362783f, 0.364459f, 0.366247f, 0.367969f, 0.369457f, 0.370584f, 0.371285f, 0.371572f, 0.371526f, 0.371291f, 0.371041f, 0.370954f, 0.371182f, 0.37182f, 0.372891f, 0.374343f, 0.376058f, 0.37787f, 0.379594f, 0.381064f, 0.382155f, 0.382808f, 0.383043f, 0.382952f, 0.382685f, 0.382422f, 0.382344f, 0.382601f, 0.383282f, 0.384405f, 0.385908f, 0.387663f, 0.389497f, 0.391223f, 0.392672f, 0.393725f, 0.394328f, 0.394511f, 0.394373f, 0.394073f, 0.393799f, 0.393731f, 0.394019f, 0.394747f, 0.3
\ No newline at end of file
- },
-
- {
+, 0.119699f, 0.119919f, 0.119957f, 0.119941f, 0.120008f, 0.120281f, 0.120846f, 0.12174f, 0.12294f, 0.12437f, 0.125915f, 0.127438f, 0.128806f, 0.129914f, 0.130703f, 0.131166f, 0.131359f, 0.131381f, 0.131363f, 0.131442f, 0.131739f, 0.132338f, 0.133266f, 0.134498f, 0.13595f, 0.137504f, 0.139021f, 0.14037f, 0.141449f, 0.142202f, 0.142632f, 0.142797f, 0.142803f, 0.142784f, 0.142877f, 0.1432f, 0.143832f, 0.144796f, 0.146058f, 0.147533f, 0.149095f, 0.150605f, 0.151933f, 0.152981f, 0.153698f, 0.154094f, 0.154233f, 0.154224f, 0.154205f, 0.154312f, 0.154662f, 0.155328f, 0.156328f, 0.157622f, 0.159117f, 0.160686f, 0.162188f, 0.163494f, 0.16451f, 0.165192f, 0.165554f, 0.165666f, 0.165644f, 0.165626f, 0.165749f, 0.166126f, 0.166827f, 0.167863f, 0.169188f, 0.170703f, 0.172277f, 0.173771f, 0.175054f, 0.176038f, 0.176683f, 0.17701f, 0.177097f, 0.177062f, 0.177046f, 0.177186f, 0.177593f, 0.178329f, 0.179401f, 0.180756f, 0.18229f, 0.18387f, 0.185353f, 0.186612f, 0.187563f, 0.188171f, 0.188464f, 0.188526f, 0.188479f, 0.188467f, 0.188625f, 0.189061f, 0.189834f, 0.190942f, 0.192327f, 0.19388f, 0.195463f, 0.196934f, 0.198169f, 0.199085f, 0.199656f, 0.199915f, 0.199952f, 0.199895f, 0.199887f, 0.200065f, 0.200532f, 0.201342f, 0.202486f, 0.203901f, 0.205471f, 0.207057f, 0.208515f, 0.209724f, 0.210605f, 0.211138f, 0.211364f, 0.211377f, 0.211309f, 0.211307f, 0.211506f, 0.212005f, 0.212852f, 0.214033f, 0.215477f, 0.217065f, 0.218652f, 0.220096f, 0.221277f, 0.222122f, 0.222617f, 0.222809f, 0.222799f, 0.222722f, 0.222727f, 0.222948f, 0.22348f, 0.224365f, 0.225584f, 0.227056f, 0.22866f, 0.230248f, 0.231676f, 0.232828f, 0.233636f, 0.234092f, 0.234251f, 0.234218f, 0.234134f, 0.234147f, 0.234391f, 0.234957f, 0.235882f, 0.237137f, 0.238638f, 0.240257f, 0.241844f, 0.243255f, 0.244377f, 0.245148f, 0.245565f, 0.24569f, 0.245635f, 0.245544f, 0.245567f, 0.245836f, 0.246437f, 0.247401f, 0.248694f, 0.250223f, 0.251856f, 0.253441f, 0.254834f, 0.255925f, 0.256657f, 0.257034f, 0.257126f, 0.25705f, 0.256953f, 0.256987f, 0.257281f, 0.257919f, 0.258923f, 0.260253f, 0.261811f, 0.263457f, 0.265039f, 0.266412f, 0.267471f, 0.268163f, 0.2685f, 0.268559f, 0.268462f, 0.26836f, 0.268407f, 0.268729f, 0.269404f, 0.270449f, 0.271817f, 0.273402f, 0.275061f, 0.276637f, 0.27799f, 0.279014f, 0.279666f, 0.279963f, 0.279988f, 0.279871f, 0.279766f, 0.279827f, 0.280177f, 0.280891f, 0.281978f, 0.283383f, 0.284995f, 0.286666f, 0.288237f, 0.289567f, 0.290556f, 0.291166f, 0.291422f, 0.291414f, 0.291278f, 0.291171f, 0.291246f, 0.291627f, 0.292381f, 0.293511f, 0.294954f, 0.296592f, 0.298273f, 0.299837f, 0.301143f, 0.302096f, 0.302663f, 0.302878f, 0.302837f, 0.302682f, 0.302573f, 0.302666f, 0.303078f, 0.303873f, 0.305047f, 0.306528f, 0.308192f, 0.309883f, 0.311438f, 0.312718f, 0.313633f, 0.314156f, 0.314329f, 0.314256f, 0.314083f, 0.313975f, 0.314086f, 0.314531f, 0.315369f, 0.316586f, 0.318106f, 0.319796f, 0.321495f, 0.32304f, 0.324293f, 0.325168f, 0.325647f, 0.325777f, 0.325671f, 0.325481f, 0.325374f, 0.325505f, 0.325986f, 0.326867f, 0.328129f, 0.329688f, 0.331403f, 0.33311f, 0.334642f, 0.335867f, 0.336701f, 0.337133f, 0.337221f, 0.337082f, 0.336876f, 0.336772f, 0.336925f, 0.337442f, 0.338368f, 0.339677f, 0.341274f, 0.343014f, 0.344727f, 0.346246f, 0.34744f, 0.348232f, 0.348617f, 0.34866f, 0.348489f, 0.348267f, 0.348168f, 0.348344f, 0.348899f, 0.349872f, 0.351228f, 0.352864f, 0.354628f, 0.356346f, 0.357851f, 0.359012f, 0.35976f, 0.360096f, 0.360096f, 0.359892f, 0.359656f, 0.359562f, 0.359763f, 0.360359f, 0.36138f, 0.362783f, 0.364459f, 0.366247f, 0.367969f, 0.369457f, 0.370584f, 0.371285f, 0.371572f, 0.371526f, 0.371291f, 0.371041f, 0.370954f, 0.371182f, 0.37182f, 0.372891f, 0.374343f, 0.376058f, 0.37787f, 0.379594f, 0.381064f, 0.382155f, 0.382808f, 0.383043f, 0.382952f, 0.382685f, 0.382422f, 0.382344f, 0.382601f, 0.383282f, 0.384405f, 0.385908f, 0.387663f, 0.389497f, 0.391223f, 0.392672f, 0.393725f, 0.394328f, 0.394511f, 0.394373f, 0.394073f, 0.393799f, 0.393731f, 0.394019f, 0.394747f, 0.395923f, 0.397478f, 0.399273f, 0.401129f, 0.402855f, 0.404282f, 0.405294f, 0.405845f, 0.405973f, 0.40578
\ No newline at end of file
11384f, 0.112791f, 0.114326f, 0.115854f, 0.11724f, 0.118378f, 0.119201f, 0.119699f, 0.119919f, 0.119957f, 0.119941f, 0.120008f, 0.120281f, 0.120846f, 0.12174f, 0.12294f, 0.12437f, 0.125915f, 0.127438f, 0.128806f, 0.129914f, 0.130703f, 0.131166f, 0.131359f, 0.131381f, 0.131363f, 0.131442f, 0.131739f, 0.132338f, 0.133266f, 0.134498f, 0.13595f, 0.137504f, 0.139021f, 0.14037f, 0.141449f, 0.142202f, 0.142632f, 0.142797f, 0.142803f, 0.142784f, 0.142877f, 0.1432f, 0.143832f, 0.144796f, 0.146058f, 0.147533f, 0.149095f, 0.150605f, 0.151933f, 0.152981f, 0.153698f, 0.154094f, 0.154233f, 0.154224f, 0.154205f, 0.154312f, 0.154662f, 0.155328f, 0.156328f, 0.157622f, 0.159117f, 0.160686f, 0.162188f, 0.163494f, 0.16451f, 0.165192f, 0.165554f, 0.165666f, 0.165644f, 0.165626f, 0.165749f, 0.166126f, 0.166827f, 0.167863f, 0.169188f, 0.170703f, 0.172277f, 0.173771f, 0.175054f, 0.176038f, 0.176683f, 0.17701f, 0.177097f, 0.177062f, 0.177046f, 0.177186f, 0.177593f, 0.178329f, 0.179401f, 0.180756f, 0.18229f, 0.18387f, 0.185353f, 0.186612f, 0.187563f, 0.188171f, 0.188464f, 0.188526f, 0.188479f, 0.188467f, 0.188625f, 0.189061f, 0.189834f, 0.190942f, 0.192327f, 0.19388f, 0.195463f, 0.196934f, 0.198169f, 0.199085f, 0.199656f, 0.199915f, 0.199952f, 0.199895f, 0.199887f, 0.200065f, 0.200532f, 0.201342f, 0.202486f, 0.203901f, 0.205471f, 0.207057f, 0.208515f, 0.209724f, 0.210605f, 0.211138f, 0.211364f, 0.211377f, 0.211309f, 0.211307f, 0.211506f, 0.212005f, 0.212852f, 0.214033f, 0.215477f, 0.217065f, 0.218652f, 0.220096f, 0.221277f, 0.222122f, 0.222617f, 0.222809f, 0.222799f, 0.222722f, 0.222727f, 0.222948f, 0.22348f, 0.224365f, 0.225584f, 0.227056f, 0.22866f, 0.230248f, 0.231676f, 0.232828f, 0.233636f, 0.234092f, 0.234251f, 0.234218f, 0.234134f, 0.234147f, 0.234391f, 0.234957f, 0.235882f, 0.237137f, 0.238638f, 0.240257f, 0.241844f, 0.243255f, 0.244377f, 0.245148f, 0.245565f, 0.24569f, 0.245635f, 0.245544f, 0.245567f, 0.245836f, 0.246437f, 0.247401f, 0.248694f, 0.250223f, 0.251856f, 0.253441f, 0.254834f, 0.255925f, 0.256657f, 0.257034f, 0.257126f, 0.25705f, 0.256953f, 0.256987f, 0.257281f, 0.257919f, 0.258923f, 0.260253f, 0.261811f, 0.263457f, 0.265039f, 0.266412f, 0.267471f, 0.268163f, 0.2685f, 0.268559f, 0.268462f, 0.26836f, 0.268407f, 0.268729f, 0.269404f, 0.270449f, 0.271817f, 0.273402f, 0.275061f, 0.276637f, 0.27799f, 0.279014f, 0.279666f, 0.279963f, 0.279988f, 0.279871f, 0.279766f, 0.279827f, 0.280177f, 0.280891f, 0.281978f, 0.283383f, 0.284995f, 0.286666f, 0.288237f, 0.289567f, 0.290556f, 0.291166f, 0.291422f, 0.291414f, 0.291278f, 0.291171f, 0.291246f, 0.291627f, 0.292381f, 0.293511f, 0.294954f, 0.296592f, 0.298273f, 0.299837f, 0.301143f, 0.302096f, 0.302663f, 0.302878f, 0.302837f, 0.302682f, 0.302573f, 0.302666f, 0.303078f, 0.303873f, 0.305047f, 0.306528f, 0.308192f, 0.309883f, 0.311438f, 0.312718f, 0.313633f, 0.314156f, 0.314329f, 0.314256f, 0.314083f, 0.313975f, 0.314086f, 0.314531f, 0.315369f, 0.316586f, 0.318106f, 0.319796f, 0.321495f, 0.32304f, 0.324293f, 0.325168f, 0.325647f, 0.325777f, 0.325671f, 0.325481f, 0.325374f, 0.325505f, 0.325986f, 0.326867f, 0.328129f, 0.329688f, 0.331403f, 0.33311f, 0.334642f, 0.335867f, 0.336701f, 0.337133f, 0.337221f, 0.337082f, 0.336876f, 0.336772f, 0.336925f, 0.337442f, 0.338368f, 0.339677f, 0.341274f, 0.343014f, 0.344727f, 0.346246f, 0.34744f, 0.348232f, 0.348617f, 0.34866f, 0.348489f, 0.348267f, 0.348168f, 0.348344f, 0.348899f, 0.349872f, 0.351228f, 0.352864f, 0.354628f, 0.356346f, 0.357851f, 0.359012f, 0.35976f, 0.360096f, 0.360096f, 0.359892f, 0.359656f, 0.359562f, 0.359763f, 0.360359f, 0.36138f, 0.362783f, 0.364459f, 0.366247f, 0.367969f, 0.369457f, 0.370584f, 0.371285f, 0.371572f, 0.371526f, 0.371291f, 0.371041f, 0.370954f, 0.371182f, 0.37182f, 0.372891f, 0.374343f, 0.376058f, 0.37787f, 0.379594f, 0.381064f, 0.382155f, 0.382808f, 0.383043f, 0.382952f, 0.382685f, 0.382422f, 0.382344f, 0.382601f, 0.383282f, 0.384405f, 0.385908f, 0.387663f, 0.389497f, 0.391223f, 0.392672f, 0.393725f, 0.394328f, 0.394511f, 0.394373f, 0.394073f, 0.393799f, 0.393731f, 0.394019f, 0.394747f, 0.395923f, 0.397478f, 0.399273f, 0.
\ No newline at end of file
},
@@ -10049,9 +10044,9 @@
48f, 4.005378f, 4.00391f, 4.002443f, 4.000977f, 3.999512f, 3.998048f, 3.996585f, 3.995123f, 3.993662f, 3.992203f, 3.990744f, 3.989287f, 3.98783f,
3.986375f, 3.98492f, 3.983467f, 3.982015f, 3.980564f, 3.979114f, 3.977664f, 3.976216f, 3.97477f, 3.973324f, 3.971879f, 3.970435f, 3.968992f, 3.967551f, 3.96611f, 3.96467f, 3.963232f, 3.961794f, 3.960358f, 3.958922f,
3.957488f, 3.956055f, 3.954622f, 3.953191f, 3.951761f, 3.950332f, 3.948903f, 3.947476f, 3.94605f, 3.944625f, 3.943201f, 3.941778f, 3.940356f, 3.938935f, 3.937515f, 3.936096f, 3.934678f, 3.933261f, 3.931845f, 3.930431f,
- 3.953191f, 3.951761f, 3.950332f, 3.948903f, 3.947476f, 3.94605f, 3.944625f, 3.943201f, 3.941778f, 3.940356f, 3.938935f, 3.937515f, 3.936096f, 3.934678f, 3.933261f, 3.931845f, 3.930431f,
+ 3.953191f, 3.951761f, 3.950332f, 3.948903f, 3.947476f, 3.94605f, 3.944625f, 3.943201f, 3.941778f, 3.940356f, 3.938935f, 3.937515f, 3.936096f, 3.934678f, 3.933261f, 3.931845f, 3.930431f,
1f, 3.951761f, 3.950332f, 3.948903f, 3.947476f, 3.94605f, 3.944625f, 3.943201f, 3.941778f, 3.940356f, 3.938935f, 3.937515f, 3.936096f, 3.934678f, 3.933261f, 3.931845f, 3.930431f,
-, 3.951761f, 3.950332f, 3.948903f, 3.947476f, 3.94605f, 3.944625f, 3.943201f, 3.941778f, 3.940356f, 3.938935f, 3.937515f, 3.936096f, 3.934678f, 3.933261f, 3.931845f, 3.930431f,
+8903f, 3.947476f, 3.94605f, 3.944625f, 3.943201f, 3.941778f, 3.940356f, 3.938935f, 3.937515f, 3.936096f, 3.934678f, 3.933261f, 3.931845f, 3.930431f,
3.951761f, 3.950332f, 3.948903f, 3.947476f, 3.94605f, 3.944625f, 3.943201f, 3.941778f, 3.940356f, 3.938935f, 3.937515f, 3.936096f, 3.934678f, 3.933261f, 3.931845f, 3.930431f,
3.929017f, 3.927604f, 3.926192f, 3.924781f, 3.923372f, 3.921963f, 3.920555f, 3.919148f, 3.917743f, 3.916338f, 3.914934f, 3.913532f, 3.91213f, 3.910729f, 3.90933f, 3.907931f, 3.906533f, 3.905136f, 3.903741f, 3.902346f,
3.900952f, 3.89956f, 3.898168f, 3.896777f, 3.895388f, 3.893999f, 3.892611f, 3.891224f, 3.889839f, 3.888454f, 3.88707f, 3.885687f, 3.884305f, 3.882925f, 3.881545f, 3.880166f, 3.878788f, 3.877411f, 3.876035f, 3.87466f,
@@ -10259,11 +10254,11 @@
f, 1.598283f, 1.598049f, 1.597815f, 1.597582f, 1.597348f, 1.597115f,
1.596881f, 1.596648f, 1.596414f, 1.596181f, 1.595948f, 1.595715f, 1.595482f, 1.595249f, 1.595016f, 1.594783f, 1.59455f, 1.594317f, 1.594084f, 1.593852f, 1.593619f, 1.593387f, 1.593154f, 1.592922f, 1.59269f, 1.592458f,
1.592225f, 1.591993f, 1.591761f, 1.591529f, 1.591298f, 1.591066f, 1.590834f, 1.590602f, 1.590371f, 1.590139f, 1.589908f, 1.589676f, 1.589445f, 1.589214f, 1.588983f, 1.588752f, 1.58852f, 1.588289f, 1.588059f, 1.587828f,
+88752f, 1.58852f, 1.588289f, 1.588059f, 1.587828f,
, 1.589908f, 1.589676f, 1.589445f, 1.589214f, 1.588983f, 1.588752f, 1.58852f, 1.588289f, 1.588059f, 1.587828f,
-1.589908f, 1.589676f, 1.589445f, 1.589214f, 1.588983f, 1.588752f, 1.58852f, 1.588289f, 1.588059f, 1.587828f,
-1.587597f, 1.587366f, 1.587136f, 1.586905f, 1.586674f, 1.586444f, 1.586214f, 1.585983f, 1.585753f, 1.585523f, 1.585293f, 1.585063f, 1.584833f, 1.584603f, 1.584373f, 1.584143f, 1.583913f, 1.583684f, 1.583454f, 1.583225f,
+587828f,
f, 1.589445f, 1.589214f, 1.588983f, 1.588752f, 1.58852f, 1.588289f, 1.588059f, 1.587828f,
-444f, 1.586214f, 1.585983f, 1.585753f, 1.585523f, 1.585293f, 1.585063f, 1.584833f, 1.584603f, 1.584373f, 1.584143f, 1.583913f, 1.583684f, 1.583454f, 1.583225f,
+143f, 1.583913f, 1.583684f, 1.583454f, 1.583225f,
f, 1.580476f, 1.580247f, 1.580018f, 1.57979f, 1.579561f, 1.579333f, 1.579105f, 1.578876f, 1.578648f,
1.57842f, 1.578192f, 1.577964f, 1.577736f, 1.577508f, 1.57728f, 1.577053f, 1.576825f, 1.576597f, 1.57637f, 1.576142f, 1.575915f, 1.575688f, 1.57546f, 1.575233f, 1.575006f, 1.574779f, 1.574552f, 1.574325f, 1.574098f,
1.573871f, 1.573645f, 1.573418f, 1.573191f, 1.572965f, 1.572738f, 1.572512f, 1.572285f, 1.572059f, 1.571833f, 1.571607f, 1.571381f, 1.571155f, 1.570929f, 1.570703f, 1.570477f, 1.570251f, 1.570025f, 1.5698f, 1.569574f,
@@ -10468,7 +10463,9 @@
0.924709f, 0.924631f, 0.924553f, 0.924475f, 0.924396f, 0.924318f, 0.92424f, 0.924162f,
0.924083f, 0.924005f, 0.923927f, 0.923849f, 0.923771f, 0.923693f, 0.923615f, 0.923537f, 0.923458f, 0.92338f, 0.923302f, 0.923224f, 0.923146f, 0.923068f, 0.92299f, 0.922912f, 0.922834f, 0.922756f, 0.922678f, 0.9226f,
0.922523f, 0.922445f, 0.922367f, 0.922289f, 0.922211f, 0.922133f, 0.922055f, 0.921977f, 0.9219f, 0.921822f, 0.921744f, 0.921666f, 0.921588f, 0.921511f, 0.921433f, 0.921355f, 0.921278f, 0.9212f, 0.921122f, 0.921044f,
+,
798f, 0.91872f, 0.918643f, 0.918566f, 0.918489f, 0.918411f, 0.918334f, 0.918257f, 0.91818f, 0.918103f, 0.918025f, 0.917948f,
+.91764f, 0.917563f, 0.917486f, 0.917409f, 0.917332f, 0.917255f, 0.917177f, 0.9171f, 0.917023f, 0.916946f, 0.91687f, 0.916793f, 0.916716f, 0.916639f, 0.916562f, 0.916485f, 0.916408f,
8f, 0.91872f, 0.918643f, 0.918566f, 0.918489f, 0.918411f, 0.918334f, 0.918257f, 0.91818f, 0.918103f, 0.918025f, 0.917948f,
0.917871f, 0.917794f, 0.917717f, 0.91764f, 0.917563f, 0.917486f, 0.917409f, 0.917332f, 0.917255f, 0.917177f, 0.9171f, 0.917023f, 0.916946f, 0.91687f, 0.916793f, 0.916716f, 0.916639f, 0.916562f, 0.916485f, 0.916408f,
0.916331f, 0.916254f, 0.916177f, 0.916101f, 0.916024f, 0.915947f, 0.91587f, 0.915793f, 0.915717f, 0.91564f, 0.915563f, 0.915486f, 0.91541f, 0.915333f, 0.915256f, 0.915179f, 0.915103f, 0.915026f, 0.914949f, 0.914873f,
@@ -10674,8 +10671,10 @@
85279f,
0.685236f, 0.685193f, 0.68515f, 0.685107f, 0.685064f, 0.685021f, 0.684978f, 0.684936f, 0.684893f, 0.68485f, 0.684807f, 0.684764f, 0.684721f, 0.684678f, 0.684635f, 0.684592f, 0.684549f, 0.684506f, 0.684463f, 0.68442f,
0.684378f, 0.684335f, 0.684292f, 0.684249f, 0.684206f, 0.684163f, 0.68412f, 0.684078f, 0.684035f, 0.683992f, 0.683949f, 0.683906f, 0.683863f, 0.683821f, 0.683778f, 0.683735f, 0.683692f, 0.683649f, 0.683607f, 0.683564f,
+0.682112f, 0.68207f, 0.682027f, 0.681985f, 0.681942f, 0.6819f, 0.681857f,
.682837f, 0.682795f, 0.682752f, 0.682709f,
-82837f, 0.682795f, 0.682752f, 0.682709f,
+1985f, 0.681942f, 0.6819f, 0.681857f,
+0.681814f, 0.681772f, 0.681729f, 0.681687f, 0.681644f, 0.681602f, 0.681559f, 0.681517f, 0.681474f, 0.681432f, 0.681389f, 0.681347f, 0.681304f, 0.681262f, 0.681219f, 0.681177f, 0.681134f, 0.681092f, 0.681049f, 0.681007f,
2f, 0.681729f, 0.681687f, 0.681644f, 0.681602f, 0.681559f, 0.681517f, 0.681474f, 0.681432f, 0.681389f, 0.681347f, 0.681304f, 0.681262f, 0.681219f, 0.681177f, 0.681134f, 0.681092f, 0.681049f, 0.681007f,
0.680964f, 0.680922f, 0.680879f, 0.680837f, 0.680794f, 0.680752f, 0.68071f, 0.680667f, 0.680625f, 0.680582f, 0.68054f, 0.680498f, 0.680455f, 0.680413f, 0.68037f, 0.680328f, 0.680286f, 0.680243f, 0.680201f, 0.680159f,
0.680116f, 0.680074f, 0.680032f, 0.679989f, 0.679947f, 0.679905f, 0.679862f, 0.67982f, 0.679778f, 0.679735f, 0.679693f, 0.679651f, 0.679608f, 0.679566f, 0.679524f, 0.679482f, 0.679439f, 0.679397f, 0.679355f, 0.679313f,
@@ -13952,9 +13951,9 @@
.932725f, -0.932717f, -0.932709f, -0.932701f, -0.932693f, -0.932685f, -0.932678f, -0.93267f, -0.932662f, -0.932654f, -0.932646f, -0.932638f, -0.93263f, -0.932622f, -0.932614f, -0.932606f, -0.932598f, -0.93259f, -0.932582f, -0.932574f,
-0.932566f, -0.932558f, -0.93255f, -0.932542f, -0.932534f, -0.932526f, -0.932519f, -0.932511f, -0.932503f, -0.932495f, -0.932487f, -0.932479f, -0.932471f, -0.932463f, -0.932455f, -0.932447f, -0.932439f, -0.932431f, -0.932423f, -0.932415f,
-0.932407f, -0.932399f, -0.932391f, -0.932383f, -0.932375f, -0.932367f, -0.932359f, -0.932351f, -0.932343f, -0.932335f, -0.932327f, -0.932319f, -0.932311f, -0.932303f, -0.932295f, -0.932287f, -0.932279f, -0.932271f, -0.932263f, -0.932255f,
+19f, -0.932311f, -0.932303f, -0.932295f, -0.932287f, -0.932279f, -0.932271f, -0.932263f, -0.932255f,
19f, -0.932311f, -0.932303f, -0.932295f, -0.932287f, -0.932279f, -0.932271f, -0.932263f, -0.932255f,
-f, -0.932311f, -0.932303f, -0.932295f, -0.932287f, -0.932279f, -0.932271f, -0.932263f, -0.932255f,
--0.932247f, -0.932239f, -0.932231f, -0.932223f, -0.932215f, -0.932207f, -0.932199f, -0.932191f, -0.932183f, -0.932175f, -0.932167f, -0.932159f, -0.932151f, -0.932143f, -0.932135f, -0.932127f, -0.932119f, -0.932111f, -0.932103f, -0.932095f,
+5f, -0.932287f, -0.932279f, -0.932271f, -0.932263f, -0.932255f,
11f, -0.932303f, -0.932295f, -0.932287f, -0.932279f, -0.932271f, -0.932263f, -0.932255f,
-0.932247f, -0.932239f, -0.932231f, -0.932223f, -0.932215f, -0.932207f, -0.932199f, -0.932191f, -0.932183f, -0.932175f, -0.932167f, -0.932159f, -0.932151f, -0.932143f, -0.932135f, -0.932127f, -0.932119f, -0.932111f, -0.932103f, -0.932095f,
-0.932087f, -0.932079f, -0.932071f, -0.932063f, -0.932055f, -0.932047f, -0.932039f, -0.932031f, -0.932023f, -0.932015f, -0.932007f, -0.931999f, -0.931991f, -0.931983f, -0.931975f, -0.931967f, -0.931959f, -0.931951f, -0.931943f, -0.931935f,
@@ -14059,11 +14058,10 @@
.916724f, -0.916715f, -0.916705f, -0.916695f,
-0.916685f, -0.916676f, -0.916666f, -0.916656f, -0.916646f, -0.916637f, -0.916627f, -0.916617f, -0.916607f, -0.916598f, -0.916588f, -0.916578f, -0.916568f, -0.916559f, -0.916549f, -0.916539f, -0.916529f, -0.91652f, -0.91651f, -0.9165f,
-0.91649f, -0.91648f, -0.916471f, -0.916461f, -0.916451f, -0.916441f, -0.916432f, -0.916422f, -0.916412f, -0.916402f, -0.916393f, -0.916383f, -0.916373f, -0.916363f, -0.916353f, -0.916344f, -0.916334f, -0.916324f, -0.916314f, -0.916304f,
+ -0.916422f, -0.916412f, -0.916402f, -0.916393f, -0.916383f, -0.916373f, -0.916363f, -0.916353f, -0.916344f, -0.916334f, -0.916324f, -0.916314f, -0.916304f,
6471f, -0.916461f, -0.916451f, -0.916441f, -0.916432f, -0.916422f, -0.916412f, -0.916402f, -0.916393f, -0.916383f, -0.916373f, -0.916363f, -0.916353f, -0.916344f, -0.916334f, -0.916324f, -0.916314f, -0.916304f,
-71f, -0.916461f, -0.916451f, -0.916441f, -0.916432f, -0.916422f, -0.916412f, -0.916402f, -0.916393f, -0.916383f, -0.916373f, -0.916363f, -0.916353f, -0.916344f, -0.916334f, -0.916324f, -0.916314f, -0.916304f,
+-0.916393f, -0.916383f, -0.916373f, -0.916363f, -0.916353f, -0.916344f, -0.916334f, -0.916324f, -0.916314f, -0.916304f,
f, -0.916461f, -0.916451f, -0.916441f, -0.916432f, -0.916422f, -0.916412f, -0.916402f, -0.916393f, -0.916383f, -0.916373f, -0.916363f, -0.916353f, -0.916344f, -0.916334f, -0.916324f, -0.916314f, -0.916304f,
-12f, -0.916402f, -0.916393f, -0.916383f, -0.916373f, -0.916363f, -0.916353f, -0.916344f, -0.916334f, -0.916324f, -0.916314f, -0.916304f,
--0.916295f, -0.916285f, -0.916275f, -0.916265f, -0.916256f, -0.916246f, -0.916236f, -0.916226f, -0.916216f, -0.916207f, -0.916197f, -0.916187f, -0.916177f, -0.916167f, -0.916157f, -0.916148f, -0.916138f, -0.916128f, -0.916118f, -0.916108f,
-0.916402f, -0.916393f, -0.916383f, -0.916373f, -0.916363f, -0.916353f, -0.916344f, -0.916334f, -0.916324f, -0.916314f, -0.916304f,
-0.916295f, -0.916285f, -0.916275f, -0.916265f, -0.916256f, -0.916246f, -0.916236f, -0.916226f, -0.916216f, -0.916207f, -0.916197f, -0.916187f, -0.916177f, -0.916167f, -0.916157f, -0.916148f, -0.916138f, -0.916128f, -0.916118f, -0.916108f,
-0.916099f, -0.916089f, -0.916079f, -0.916069f, -0.916059f, -0.91605f, -0.91604f, -0.91603f, -0.91602f, -0.91601f, -0.916f, -0.915991f, -0.915981f, -0.915971f, -0.915961f, -0.915951f, -0.915942f, -0.915932f, -0.915922f, -0.915912f,
@@ -15820,3 +15818,4 @@
.445182f, -0.445133f, -0.445084f, -0.445035f, -0.444986f, -0.444938f, -0.444889f, -0.44484f, -0.444791f, -0.444742f, -0.444693f, -0.444644f, -0.444595f, -0.444546f, -0.444497f,
-0.444448f, -0.444399f, -0.44435f, -0.444301f, -0.444252f, -0.444203f, -0.444154f, -0.444105f, -0.444056f, -0.444007f, -0.443958f, -0.443909f, -0.44386f, -0.443811f, -0.443762f, -0.443713f, -0.443664f, -0.443615f, -0.443566f, -0.443517f,
-0.443468f, -0.443419f, -0.44337f, -0.443321f, -0.443272f, -0.443223f, -0.443173f, -0.443124f, -0.443075f, -0.443026f, -0.442977f, -0.442928f, -0.442879f, -0.44283f, -0.442781f, -0.442732f, -0.442683f, -0.442634f, -0.442585f, -0.442536f,
+154f, -0.444105f, -0.444056f, -0.444007f, -0.443958f, -0.443909f, -0.44386f, -0.443811f, -0.443762f, -0.443713f, -0.443664f, -0.443615f, -0.443566f, -0.443517f,
--- /dev/null
+++ b/leaf/leaf-config.h
@@ -1,0 +1,59 @@
+/*
+ ==============================================================================
+
+ leaf-config.h
+ Created: 18 Dec 2020 1:24:49pm
+ Author: Matthew Wang
+
+ ==============================================================================
+*/
+
+#ifndef LEAF_CONFIG_H_INCLUDED
+#define LEAF_CONFIG_H_INCLUDED
+
+/*!
+ @file leaf-config.h
+ @brief LEAF configuration file. Contains defines for controlling inclusion of various tables.
+ */
+
+//==============================================================================
+
+//! Include FIR tables required to use tOversampler.
+#define LEAF_INCLUDE_OVERSAMPLER_TABLES 1
+
+// Unused
+#define LEAF_INCLUDE_SHAPER_TABLE 0
+
+// Unused
+#define LEAF_INCLUDE_MTOF_TABLE 0
+
+//! Include table required to use tEfficientSVF.
+#define LEAF_INCLUDE_FILTERTAN_TABLE 1
+
+// Unused
+#define LEAF_INCLUDE_TANH_TABLE 0
+
+// Unused
+#define LEAF_INCLUDE_ADC_TABLE 0
+
+//! Include tables required to use tEnvelope and tADSR (but not tADSR2, tADSR3, and tADSR4).
+#define LEAF_INCLUDE_ADSR_TABLES 1
+
+//! Include wave table required to use tCycle.
+#define LEAF_INCLUDE_SINE_TABLE 1
+
+//! Include wave table required to use tTriangle.
+#define LEAF_INCLUDE_TRIANGLE_TABLE 1
+
+//! Include wave table required to use tSquare.
+#define LEAF_INCLUDE_SQUARE_TABLE 1
+
+//! Include wave table required to use tSawtooth.
+#define LEAF_INCLUDE_SAWTOOTH_TABLE 1
+
+//! Include tables for minblep insertion, required for all tMB objects.
+#define LEAF_INCLUDE_MINBLEP_TABLES 1
+
+//==============================================================================
+
+#endif // LEAF_CONFIG_H_INCLUDED
--- a/leaf/leaf.h
+++ b/leaf/leaf.h
@@ -122,8 +122,8 @@
/*!
@param sampleRate The audio sample rate.
@param blockSize The audio block size.
- @param memory A pointer to the memory that will make up the default LEAF mempool.
- @param memorySize The size of the memory that will make up the default LEAF mempool.
+ @param memory A pointer to the memory that will make up the default mempool of a LEAF instance.
+ @param memorySize The size of the memory that will make up the default mempool of a LEAF instance.
@param random A pointer to a random number function. Should return a float >= 0 and < 1.
*/
void LEAF_init (LEAF* const leaf, float sampleRate, int blockSize, char* memory, size_t memorySize, float(*random)(void));