Files
SourMesen e391fd8f9a Code: Add auto-formatting rules for C++ (clang-format) and enforce in CI via "clang-format" and "dotnet format" (#78)
* Code: Add auto-formatting rules for C++ projects (clang-format) and enforce code style via "clang-format" and "dotnet format"

* fix ui format warnings
2026-04-30 06:03:55 -07:00

30 lines
1.1 KiB
C++

#include "pch.h"
#include "StereoCombFilter.h"
void StereoCombFilter::ApplyFilter(int16_t* stereoBuffer, size_t sampleCount, uint32_t sampleRate, int32_t delay, uint32_t strength)
{
size_t delaySampleCount = (int32_t)((double)delay / 1000 * sampleRate);
if(delaySampleCount != _lastDelay) {
_delayedSamplesLeft.clear();
_delayedSamplesRight.clear();
for(size_t i = 0; i < delaySampleCount; i++) {
_delayedSamplesLeft.push_back(0);
_delayedSamplesRight.push_back(0);
}
}
_lastDelay = delaySampleCount;
double ratio = strength == 0 ? 0 : strength / 100.0;
for(size_t i = 0; i < sampleCount * 2; i += 2) {
_delayedSamplesLeft.push_back(stereoBuffer[i]);
_delayedSamplesRight.push_back(stereoBuffer[i + 1]);
int16_t delayedSample = (_delayedSamplesRight.front() + _delayedSamplesLeft.front()) / 2;
int16_t monoSample = (stereoBuffer[i] + stereoBuffer[i + 1]) / 2;
stereoBuffer[i] = monoSample + (int16_t)(delayedSample * ratio);
stereoBuffer[i + 1] = monoSample - (int16_t)(delayedSample * ratio);
_delayedSamplesLeft.pop_front();
_delayedSamplesRight.pop_front();
}
}