36 unsigned int code = 0;
37 for (
int i = 1; i < size; ++i) {
39 for (
int j = 0; j < i; ++j)
40 index += order[i] < order[j];
59 int code =
static_cast<int>(float_code);
60 for (
int i = 0; i < size; ++i)
63 for (
int i = 0; i < size; ++i) {
64 int remaining = size - i;
65 int index = remaining - 1;
66 int inversions = code % remaining;
69 int placement = order[index - inversions];
70 for (
int j = index - inversions; j < index; ++j)
71 order[j] = order[j + 1];
73 order[index] = placement;
78 for (
int i = 0; i < size; ++i)
82 void complexToPcmData(int16_t* pcm_data,
const std::complex<float>* complex_data,
int size) {
86 for (
int i = 0; i < size / 2; ++i) {
87 float amp = std::abs(complex_data[i]);
88 float phase = std::arg(complex_data[i]);
95 for (
int i = 0; i < size; ++i)
96 float_data[i] = pcm_data[i] * (1.0f /
kPcmScale);
99 void pcmToComplexData(std::complex<float>* complex_data,
const int16_t* pcm_data,
int size) {
101 for (
int i = 0; i < size / 2; ++i) {
104 complex_data[i] = std::polar(amp, phase);
static int next_seed_
Static seed counter used to automatically assign seeds if none specified.
Definition utils.h:64
#define VITAL_ASSERT(x)
Definition common.h:11
Contains a collection of utility functions and classes used throughout Vital.
force_inline poly_float clamp(poly_float value, mono_float min, mono_float max)
Clamps each lane of a vector to [min, max].
Definition poly_utils.h:306
constexpr int kMaxOrderLength
Maximum length for orders that can be encoded as a float via encodeOrderToFloat().
Definition utils.h:27
void pcmToComplexData(std::complex< float > *complex_data, const int16_t *pcm_data, int size)
Converts 16-bit PCM data representing complex info (amp/phase) back to std::complex floats.
Definition utils.cpp:99
void floatToPcmData(int16_t *pcm_data, const float *float_data, int size)
Converts floating-point audio data to 16-bit PCM data.
Definition utils.cpp:77
void decodeFloatToOrder(int *order, mono_float float_code, int size)
Decodes a float-encoded permutation back into order.
Definition utils.cpp:55
mono_float encodeOrderToFloat(int *order, int size)
Encodes a permutation (stored in order) into a single float.
Definition utils.cpp:32
void complexToPcmData(int16_t *pcm_data, const std::complex< float > *complex_data, int size)
Converts an array of complex floats (magnitude/phase) to PCM data.
Definition utils.cpp:82
void pcmToFloatData(float *float_data, const int16_t *pcm_data, int size)
Converts 16-bit PCM data to floating-point audio data.
Definition utils.cpp:94
Contains classes and functions used within the Vital synthesizer framework.
constexpr float kPcmScale
Scaling for converting float data to 16-bit PCM.
Definition utils.cpp:12
constexpr float kComplexPhasePcmScale
Additional phase scale used for complex data to PCM.
Definition utils.cpp:16
constexpr float kComplexAmplitudePcmScale
Additional amplitude scale used for complex data to PCM.
Definition utils.cpp:14
float mono_float
Definition common.h:33
Provides various utility functions, classes, and constants for audio, math, and general-purpose opera...