30#include "../Core/AudioBuffer.h"
36#ifndef DSPARK_RESTRICT
37 #if defined(__clang__) || defined(__GNUC__)
38 #define DSPARK_RESTRICT __restrict__
39 #elif defined(_MSC_VER)
40 #define DSPARK_RESTRICT __restrict
42 #define DSPARK_RESTRICT
70 static constexpr void encodeSample(T& left_mid, T& right_side)
noexcept
73 const T r = right_side;
74 left_mid = (l + r) * T(0.5);
75 right_side = (l - r) * T(0.5);
86 static constexpr void decodeSample(T& mid_left, T& side_right)
noexcept
89 const T s = side_right;
110 assert(buffer.getNumChannels() >= 2);
112 const int n = buffer.getNumSamples();
113 if (buffer.getNumChannels() < 2 || n <= 0)
return;
115 T* DSPARK_RESTRICT left = buffer.getChannel(0);
116 T* DSPARK_RESTRICT right = buffer.getChannel(1);
118 for (
int i = 0; i < n; ++i)
121 const T r = right[i];
122 left[i] = (l + r) * T(0.5);
123 right[i] = (l - r) * T(0.5);
140 assert(buffer.getNumChannels() >= 2);
142 const int n = buffer.getNumSamples();
143 if (buffer.getNumChannels() < 2 || n <= 0)
return;
145 T* DSPARK_RESTRICT mid = buffer.getChannel(0);
146 T* DSPARK_RESTRICT side = buffer.getChannel(1);
148 for (
int i = 0; i < n; ++i)
Non-owning view over audio channel data.
Main namespace for the DSPark framework.
Static utility for Mid/Side stereo encoding and decoding.
static void encode(AudioBufferView< T > buffer) noexcept
Encodes an entire stereo buffer from Left/Right to Mid/Side.
static void decode(AudioBufferView< T > buffer) noexcept
Decodes an entire stereo buffer from Mid/Side back to Left/Right.
static constexpr void encodeSample(T &left_mid, T &right_side) noexcept
Encodes a single sample frame from Left/Right to Mid/Side in-place.
static constexpr void decodeSample(T &mid_left, T &side_right) noexcept
Decodes a single sample frame from Mid/Side to Left/Right in-place.