22 float x = std::sin(k * 127.1f + 0.7f) * 43758.5453f;
23 return x - std::floor(x);
29 constexpr float kHalfPi = 1.5707963f;
30 if (n <= 1)
return kHalfPi * 0.5f;
31 return static_cast<float>(k) /
static_cast<float>(n - 1) * kHalfPi;
38inline void flow_pan_room(
float base_theta, std::uint32_t room_index,
float depth,
39 float spread,
double t_seconds,
float norm,
40 float& pan_l,
float& pan_r) {
41 constexpr float kHalfPi = 1.5707963f;
42 constexpr float kTwoPi = 6.2831853f;
46 const float swing = depth * (0.6f + 0.6f * spread);
51 const float rate = 0.15f + 0.35f *
flow_hash(room_index * 5u + 2u);
52 const float phase =
flow_hash(room_index * 11u + 4u) * kTwoPi;
53 float theta = base_theta + swing * std::sin(kTwoPi * rate *
54 static_cast<float>(t_seconds) + phase);
56 if (theta < 0.0f) theta = -theta;
57 theta = std::fmod(theta, 2.0f * kHalfPi);
58 if (theta > kHalfPi) theta = 2.0f * kHalfPi - theta;
59 pan_l = std::cos(theta) * norm;
60 pan_r = std::sin(theta) * norm;
66 float spread,
double t_seconds,
float norm,
67 float* pan_l,
float* pan_r) {
68 for (std::uint32_t k = 0; k < n; ++k)
69 flow_pan_room(base_theta[k], k, depth, spread, t_seconds, norm, pan_l[k], pan_r[k]);
74 float spread,
float* pan_l,
float* pan_r) {
75 const float norm = n > 0 ? 1.0f / std::sqrt(
static_cast<float>(n)) : 1.0f;
76 for (std::uint32_t k = 0; k < n; ++k)
Definition flow_pans.hpp:19
float flow_hash(std::uint32_t k)
Definition flow_pans.hpp:21
void flow_pans_from_base(const float *base_theta, std::uint32_t n, float depth, float spread, double t_seconds, float norm, float *pan_l, float *pan_r)
Definition flow_pans.hpp:65
void flow_pan_room(float base_theta, std::uint32_t room_index, float depth, float spread, double t_seconds, float norm, float &pan_l, float &pan_r)
Definition flow_pans.hpp:38
float flow_base_azimuth(std::uint32_t k, std::uint32_t n)
Definition flow_pans.hpp:28
void fill_flow_pans(std::uint32_t n, double t_seconds, float depth, float spread, float *pan_l, float *pan_r)
Definition flow_pans.hpp:73