#pragma once #include #include inline void encode_ms(float* left, float* right, size_t n) { for (size_t i = 0; i < n; i++) { float mid = (left[i] + right[i]) * 0.5f; float side = (left[i] - right[i]) * 0.5f; left[i] = mid; right[i] = side; } } inline void decode_ms(float* left, float* right, size_t n) { for (size_t i = 0; i < n; i++) { float mid = left[i]; float side = right[i]; left[i] = mid + side; right[i] = mid - side; } } inline void apply_balance(float* left, float* right, float balance, size_t n) { float gain_l = std::sqrt(0.5f * (1 - balance)); float gain_r = std::sqrt(0.5f * (1 + balance)); for (size_t i = 0; i < n; i++) { left[i] *= gain_l; right[i] *= gain_r; } }