diff --git a/src/CSoundInput.cpp b/src/CSoundInput.cpp index 1df2f60..b0b7187 100644 --- a/src/CSoundInput.cpp +++ b/src/CSoundInput.cpp @@ -1,14 +1,16 @@ +#define NOMINMAX + #include "CSoundInput.h" #include #include #include #include +#include #include #include "alt-voice.h" - CSoundInput::CSoundInput(int _bitRate) : encoder(new COpusEncoder(SAMPLE_RATE, AUDIO_CHANNELS, _bitRate)), bitrate(_bitRate) { denoiser = rnnoise_create(nullptr); @@ -261,6 +263,12 @@ bool CSoundInput::IsNoiseSuppressionEnabled() const return noiseSuppressionEnabled; } +// https://github.com/mumble-voip/mumble/pull/5363/files +static short clampFloatSample(float v) { + return static_cast(std::min(std::max(v, static_cast(std::numeric_limits::min())), + static_cast(std::numeric_limits::max()))); +} + void CSoundInput::NoiseSuppressionProcess(void* buffer, DWORD length) { const auto shortSamples = static_cast(buffer); @@ -280,7 +288,7 @@ void CSoundInput::NoiseSuppressionProcess(void* buffer, DWORD length) // Convert the floating-point samples back to 16-bit integer samples for (int i = 0; i < FRAME_SIZE_SAMPLES; i++) { - shortSamples[i] = static_cast(floatBuffer[i]); + shortSamples[i] = static_cast(clampFloatSample(floatBuffer[i])); } }