@@ -42,9 +42,9 @@ struct RealTimeConvolver { | |||
this->blockSize = blockSize; | |||
pffft = pffft_new_setup(blockSize*2, PFFFT_REAL); | |||
outputTail = new float[blockSize]; | |||
memset(outputTail, 0, blockSize * sizeof(float)); | |||
std::memset(outputTail, 0, blockSize * sizeof(float)); | |||
tmpBlock = new float[blockSize*2]; | |||
memset(tmpBlock, 0, blockSize*2 * sizeof(float)); | |||
std::memset(tmpBlock, 0, blockSize*2 * sizeof(float)); | |||
} | |||
~RealTimeConvolver() { | |||
@@ -74,13 +74,13 @@ struct RealTimeConvolver { | |||
// Allocate blocks | |||
kernelFfts = (float*) pffft_aligned_malloc(sizeof(float) * blockSize*2 * kernelBlocks); | |||
inputFfts = (float*) pffft_aligned_malloc(sizeof(float) * blockSize*2 * kernelBlocks); | |||
memset(inputFfts, 0, sizeof(float) * blockSize*2 * kernelBlocks); | |||
std::memset(inputFfts, 0, sizeof(float) * blockSize*2 * kernelBlocks); | |||
for (size_t i = 0; i < kernelBlocks; i++) { | |||
// Pad each block with zeros | |||
memset(tmpBlock, 0, sizeof(float) * blockSize*2); | |||
std::memset(tmpBlock, 0, sizeof(float) * blockSize*2); | |||
size_t len = std::min((int) blockSize, (int) (length - i*blockSize)); | |||
memcpy(tmpBlock, &kernel[i*blockSize], sizeof(float)*len); | |||
std::memcpy(tmpBlock, &kernel[i*blockSize], sizeof(float)*len); | |||
// Compute fft | |||
pffft_transform(pffft, tmpBlock, &kernelFfts[blockSize*2 * i], NULL, PFFFT_FORWARD); | |||
} | |||
@@ -92,19 +92,19 @@ struct RealTimeConvolver { | |||
*/ | |||
void processBlock(const float *input, float *output) { | |||
if (kernelBlocks == 0) { | |||
memset(output, 0, sizeof(float) * blockSize); | |||
std::memset(output, 0, sizeof(float) * blockSize); | |||
return; | |||
} | |||
// Step input position | |||
inputPos = (inputPos + 1) % kernelBlocks; | |||
// Pad block with zeros | |||
memset(tmpBlock, 0, sizeof(float) * blockSize*2); | |||
memcpy(tmpBlock, input, sizeof(float) * blockSize); | |||
std::memset(tmpBlock, 0, sizeof(float) * blockSize*2); | |||
std::memcpy(tmpBlock, input, sizeof(float) * blockSize); | |||
// Compute input fft | |||
pffft_transform(pffft, tmpBlock, &inputFfts[blockSize*2 * inputPos], NULL, PFFFT_FORWARD); | |||
// Create output fft | |||
memset(tmpBlock, 0, sizeof(float) * blockSize*2); | |||
std::memset(tmpBlock, 0, sizeof(float) * blockSize*2); | |||
// convolve input fft by kernel fft | |||
// Note: This is the CPU bottleneck loop | |||
for (size_t i = 0; i < kernelBlocks; i++) { | |||
@@ -95,7 +95,7 @@ struct SampleRateConverter { | |||
else { | |||
// Simply copy the buffer without conversion | |||
int frames = std::min(*inFrames, *outFrames); | |||
memcpy(out, in, frames * sizeof(Frame<CHANNELS>)); | |||
std::memcpy(out, in, frames * sizeof(Frame<CHANNELS>)); | |||
*inFrames = frames; | |||
*outFrames = frames; | |||
} | |||
@@ -117,12 +117,12 @@ struct Decimator { | |||
} | |||
void reset() { | |||
inIndex = 0; | |||
memset(inBuffer, 0, sizeof(inBuffer)); | |||
std::memset(inBuffer, 0, sizeof(inBuffer)); | |||
} | |||
/** `in` must be length OVERSAMPLE */ | |||
float process(float *in) { | |||
// Copy input to buffer | |||
memcpy(&inBuffer[inIndex], in, OVERSAMPLE*sizeof(float)); | |||
std::memcpy(&inBuffer[inIndex], in, OVERSAMPLE*sizeof(float)); | |||
// Advance index | |||
inIndex += OVERSAMPLE; | |||
inIndex %= OVERSAMPLE*QUALITY; | |||
@@ -152,7 +152,7 @@ struct Upsampler { | |||
} | |||
void reset() { | |||
inIndex = 0; | |||
memset(inBuffer, 0, sizeof(inBuffer)); | |||
std::memset(inBuffer, 0, sizeof(inBuffer)); | |||
} | |||
/** `out` must be length OVERSAMPLE */ | |||
void process(float in, float *out) { | |||
@@ -28,9 +28,9 @@ struct RingBuffer { | |||
size_t i = mask(end); | |||
size_t e1 = i + n; | |||
size_t e2 = (e1 < S) ? e1 : S; | |||
memcpy(&data[i], t, sizeof(T) * (e2 - i)); | |||
std::memcpy(&data[i], t, sizeof(T) * (e2 - i)); | |||
if (e1 > S) { | |||
memcpy(data, &t[S - i], sizeof(T) * (e1 - S)); | |||
std::memcpy(data, &t[S - i], sizeof(T) * (e1 - S)); | |||
} | |||
end += n; | |||
} | |||
@@ -41,9 +41,9 @@ struct RingBuffer { | |||
size_t i = mask(start); | |||
size_t s1 = i + n; | |||
size_t s2 = (s1 < S) ? s1 : S; | |||
memcpy(t, &data[i], sizeof(T) * (s2 - i)); | |||
std::memcpy(t, &data[i], sizeof(T) * (s2 - i)); | |||
if (s1 > S) { | |||
memcpy(&t[S - i], data, sizeof(T) * (s1 - S)); | |||
std::memcpy(&t[S - i], data, sizeof(T) * (s1 - S)); | |||
} | |||
start += n; | |||
} | |||
@@ -112,11 +112,11 @@ struct DoubleRingBuffer { | |||
size_t e1 = e + n; | |||
size_t e2 = (e1 < S) ? e1 : S; | |||
// Copy data forward | |||
memcpy(&data[S + e], &data[e], sizeof(T) * (e2 - e)); | |||
std::memcpy(&data[S + e], &data[e], sizeof(T) * (e2 - e)); | |||
if (e1 > S) { | |||
// Copy data backward from the doubled block to the main block | |||
memcpy(data, &data[S], sizeof(T) * (e1 - S)); | |||
std::memcpy(data, &data[S], sizeof(T) * (e1 - S)); | |||
} | |||
end += n; | |||
} | |||
@@ -147,7 +147,7 @@ struct AppleRingBuffer { | |||
// move end block to beginning | |||
// may overlap, but memmove handles that correctly | |||
size_t s = size(); | |||
memmove(data, &data[start], sizeof(T) * s); | |||
std::memmove(data, &data[start], sizeof(T) * s); | |||
start = 0; | |||
end = s; | |||
} | |||
@@ -13,7 +13,7 @@ struct VuMeter { | |||
float dBScaled; | |||
/** Value should be scaled so that 1.0 is clipping */ | |||
void setValue(float v) { | |||
dBScaled = std::log10(std::abs(v)) * 20.0 / dBInterval; | |||
dBScaled = std::log10(std::fabs(v)) * 20.0 / dBInterval; | |||
} | |||
/** Returns the brightness of the light indexed by i. | |||
Light 0 is a clip light (red) which is either on or off. | |||
@@ -71,7 +71,7 @@ struct VuMeter2 { | |||
v += (value - v) * lambda * deltaTime; | |||
} | |||
else { | |||
value = std::abs(value); | |||
value = std::fabs(value); | |||
if (value >= v) { | |||
v = value; | |||
} | |||
@@ -81,9 +81,7 @@ struct Param { | |||
return value; | |||
} | |||
/* Clamps and set the value. | |||
Don't call this directly from Modules. Use `APP->engine->setParam()`. | |||
*/ | |||
/* Clamps and sets the value. */ | |||
void setValue(float value) { | |||
this->value = math::clamp(value, minValue, maxValue); | |||
} | |||
@@ -95,14 +95,14 @@ inline bool isPow2(int n) { | |||
Assumes a <= b | |||
*/ | |||
inline float clamp(float x, float a, float b) { | |||
return std::min(std::max(x, a), b); | |||
return std::fmin(std::fmax(x, a), b); | |||
} | |||
/** Limits `x` between `a` and `b` | |||
If a > b, switches the two values | |||
*/ | |||
inline float clampSafe(float x, float a, float b) { | |||
return clamp(x, std::min(a, b), std::max(a, b)); | |||
return clamp(x, std::fmin(a, b), std::fmax(a, b)); | |||
} | |||
/** Returns 1 for positive numbers, -1 for negative numbers, and 0 for zero | |||
@@ -126,7 +126,7 @@ inline float eucMod(float a, float base) { | |||
} | |||
inline bool isNear(float a, float b, float epsilon = 1e-6f) { | |||
return std::abs(a - b) <= epsilon; | |||
return std::fabs(a - b) <= epsilon; | |||
} | |||
/** If the magnitude of x if less than epsilon, return 0 */ | |||
@@ -201,7 +201,7 @@ struct Vec { | |||
return x * b.x + y * b.y; | |||
} | |||
float norm() const { | |||
return std::hypotf(x, y); | |||
return std::hypot(x, y); | |||
} | |||
float square() const { | |||
return x * x + y * y; | |||
@@ -219,10 +219,10 @@ struct Vec { | |||
return Vec(y, x); | |||
} | |||
Vec min(Vec b) const { | |||
return Vec(std::min(x, b.x), std::min(y, b.y)); | |||
return Vec(std::fmin(x, b.x), std::fmin(y, b.y)); | |||
} | |||
Vec max(Vec b) const { | |||
return Vec(std::max(x, b.x), std::max(y, b.y)); | |||
return Vec(std::fmax(x, b.x), std::fmax(y, b.y)); | |||
} | |||
Vec round() const { | |||
return Vec(std::round(x), std::round(y)); | |||
@@ -320,19 +320,19 @@ struct Rect { | |||
/** Expands this Rect to contain `b` */ | |||
Rect expand(Rect b) const { | |||
Rect r; | |||
r.pos.x = std::min(pos.x, b.pos.x); | |||
r.pos.y = std::min(pos.y, b.pos.y); | |||
r.size.x = std::max(pos.x + size.x, b.pos.x + b.size.x) - r.pos.x; | |||
r.size.y = std::max(pos.y + size.y, b.pos.y + b.size.y) - r.pos.y; | |||
r.pos.x = std::fmin(pos.x, b.pos.x); | |||
r.pos.y = std::fmin(pos.y, b.pos.y); | |||
r.size.x = std::fmax(pos.x + size.x, b.pos.x + b.size.x) - r.pos.x; | |||
r.size.y = std::fmax(pos.y + size.y, b.pos.y + b.size.y) - r.pos.y; | |||
return r; | |||
} | |||
/** Returns the intersection of `this` and `b` */ | |||
Rect intersect(Rect b) const { | |||
Rect r; | |||
r.pos.x = std::max(pos.x, b.pos.x); | |||
r.pos.y = std::max(pos.y, b.pos.y); | |||
r.size.x = std::min(pos.x + size.x, b.pos.x + b.size.x) - r.pos.x; | |||
r.size.y = std::min(pos.y + size.y, b.pos.y + b.size.y) - r.pos.y; | |||
r.pos.x = std::fmax(pos.x, b.pos.x); | |||
r.pos.y = std::fmax(pos.y, b.pos.y); | |||
r.size.x = std::fmin(pos.x + size.x, b.pos.x + b.size.x) - r.pos.x; | |||
r.size.y = std::fmin(pos.y + size.y, b.pos.y + b.size.y) - r.pos.y; | |||
return r; | |||
} | |||
/** Returns a Rect with its position set to zero */ | |||
@@ -368,8 +368,14 @@ inline Vec Vec::clampSafe(Rect bound) const { | |||
} | |||
/** Useful for debugging Vecs and Rects, e.g. | |||
/** Expands a Vec and Rect into a comma-separated list. | |||
Useful for print debugging. | |||
printf("%f %f %f %f", RECT_ARGS(r)); | |||
Or passing the values to a C function. | |||
nvgRect(vg, RECT_ARGS(r)); | |||
*/ | |||
#define VEC_ARGS(v) (v).x, (v).y | |||
#define RECT_ARGS(r) (r).pos.x, (r).pos.y, (r).size.x, (r).size.y | |||
@@ -31,11 +31,11 @@ DEPRECATED inline float clamp2(float x, float a, float b) {return clampSafe(x, a | |||
DEPRECATED inline int mini(int a, int b) {return std::min(a, b);} | |||
DEPRECATED inline int maxi(int a, int b) {return std::max(a, b);} | |||
DEPRECATED inline int clampi(int x, int min, int max) {return math::clamp(x, min, max);} | |||
DEPRECATED inline int absi(int a) {return std::abs(a);} | |||
DEPRECATED inline int absi(int a) {return std::fabs(a);} | |||
DEPRECATED inline int eucmodi(int a, int base) {return eucMod(a, base);} | |||
DEPRECATED inline int log2i(int n) {return log2(n);} | |||
DEPRECATED inline int log2i(int n) {return math::log2(n);} | |||
DEPRECATED inline bool ispow2i(int n) {return isPow2(n);} | |||
DEPRECATED inline float absf(float x) {return std::abs(x);} | |||
DEPRECATED inline float absf(float x) {return std::fabs(x);} | |||
DEPRECATED inline float sgnf(float x) {return sgn(x);} | |||
DEPRECATED inline float eucmodf(float a, float base) {return eucMod(a, base);} | |||
DEPRECATED inline bool nearf(float a, float b, float epsilon = 1.0e-6f) {return math::isNear(a, b, epsilon);} | |||
@@ -218,7 +218,7 @@ struct BridgeClientConnection { | |||
} | |||
float output[BRIDGE_OUTPUTS * frames]; | |||
memset(&output, 0, sizeof(output)); | |||
std::memset(&output, 0, sizeof(output)); | |||
processStream(input, output, frames); | |||
if (!send(&output, BRIDGE_OUTPUTS * frames * sizeof(float))) { | |||
DEBUG("Failed to send"); | |||
@@ -340,7 +340,7 @@ static void serverConnect() { | |||
// Get address | |||
struct sockaddr_in addr; | |||
memset(&addr, 0, sizeof(addr)); | |||
std::memset(&addr, 0, sizeof(addr)); | |||
addr.sin_family = AF_INET; | |||
addr.sin_port = htons(BRIDGE_PORT); | |||
#if defined ARCH_WIN | |||
@@ -24,15 +24,15 @@ void minBlepImpulse(int z, int o, float *output) { | |||
RealFFT rfft(n); | |||
rfft.rfft(x, fx); | |||
// fx = log(abs(fx)) | |||
fx[0] = std::log(std::abs(fx[0])); | |||
fx[0] = std::log(std::fabs(fx[0])); | |||
for (int i = 1; i < n; i++) { | |||
fx[2*i] = std::log(std::hypot(fx[2*i], fx[2*i+1])); | |||
fx[2*i+1] = 0.f; | |||
} | |||
fx[1] = std::log(std::abs(fx[1])); | |||
fx[1] = std::log(std::fabs(fx[1])); | |||
// Clamp values in case we have -inf | |||
for (int i = 0; i < 2*n; i++) { | |||
fx[i] = std::max(-30.f, fx[i]); | |||
fx[i] = std::fmax(-30.f, fx[i]); | |||
} | |||
rfft.irfft(fx, x); | |||
rfft.scale(x); | |||
@@ -52,14 +52,14 @@ uint64_t u64() { | |||
float uniform() { | |||
// 24 bits of granularity is the best that can be done with floats while ensuring that the return value lies in [0.0, 1.0). | |||
return (xoroshiro128plus_next() >> (64 - 24)) / powf(2, 24); | |||
return (xoroshiro128plus_next() >> (64 - 24)) / std::pow(2, 24); | |||
} | |||
float normal() { | |||
// Box-Muller transform | |||
float radius = sqrtf(-2.f * logf(1.f - uniform())); | |||
float radius = std::sqrt(-2.f * std::log(1.f - uniform())); | |||
float theta = 2.f * M_PI * uniform(); | |||
return radius * sinf(theta); | |||
return radius * std::sin(theta); | |||
// // Central Limit Theorem | |||
// const int n = 8; | |||
@@ -67,7 +67,7 @@ float normal() { | |||
// for (int i = 0; i < n; i++) { | |||
// sum += uniform(); | |||
// } | |||
// return (sum - n / 2.f) / sqrtf(n / 12.f); | |||
// return (sum - n / 2.f) / std::sqrt(n / 12.f); | |||
} | |||