diff options
| author | Asapha <git@asapha.me> | 2022-10-17 22:27:06 +0200 |
|---|---|---|
| committer | Asapha <git@asapha.me> | 2022-10-17 22:27:06 +0200 |
| commit | b2e5e4707e4e014f3f463139838d94c98bbf0e70 (patch) | |
| tree | f079c8a53ba83f45eb97a7319626af2b5038a887 /RtAudio.cpp | |
| parent | a3e9aa621e65a0744f125e9740d057a4d088e0e9 (diff) | |
clamp values when converting from floats
Diffstat (limited to 'RtAudio.cpp')
| -rw-r--r-- | RtAudio.cpp | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/RtAudio.cpp b/RtAudio.cpp index 55a9597..e7329d9 100644 --- a/RtAudio.cpp +++ b/RtAudio.cpp @@ -11143,7 +11143,7 @@ void RtApi :: convertBuffer( char *outBuffer, char *inBuffer, ConvertInfo &info for (unsigned int i=0; i<stream_.bufferSize; i++) { for (j=0; j<info.channels; j++) { // Use llround() which returns `long long` which is guaranteed to be at least 64 bits. - out[info.outOffset[j]] = (Int32) std::min(std::llround(in[info.inOffset[j]] * 2147483648.f), 2147483647LL); + out[info.outOffset[j]] = (Int32) std::max(std::min(std::llround(in[info.inOffset[j]] * 2147483648.f), 2147483647LL), -2147483648LL); } in += info.inJump; out += info.outJump; @@ -11153,7 +11153,7 @@ void RtApi :: convertBuffer( char *outBuffer, char *inBuffer, ConvertInfo &info Float64 *in = (Float64 *)inBuffer; for (unsigned int i=0; i<stream_.bufferSize; i++) { for (j=0; j<info.channels; j++) { - out[info.outOffset[j]] = (Int32) std::min(std::llround(in[info.inOffset[j]] * 2147483648.0), 2147483647LL); + out[info.outOffset[j]] = (Int32) std::max(std::min(std::llround(in[info.inOffset[j]] * 2147483648.0), 2147483647LL), -2147483648LL); } in += info.inJump; out += info.outJump; @@ -11210,7 +11210,7 @@ void RtApi :: convertBuffer( char *outBuffer, char *inBuffer, ConvertInfo &info Float32 *in = (Float32 *)inBuffer; for (unsigned int i=0; i<stream_.bufferSize; i++) { for (j=0; j<info.channels; j++) { - out[info.outOffset[j]] = (Int32) std::min(std::llround(in[info.inOffset[j]] * 8388608.f), 8388607LL); + out[info.outOffset[j]] = (Int32) std::max(std::min(std::llround(in[info.inOffset[j]] * 8388608.f), 8388607LL), -8388608LL); } in += info.inJump; out += info.outJump; @@ -11220,7 +11220,7 @@ void RtApi :: convertBuffer( char *outBuffer, char *inBuffer, ConvertInfo &info Float64 *in = (Float64 *)inBuffer; for (unsigned int i=0; i<stream_.bufferSize; i++) { for (j=0; j<info.channels; j++) { - out[info.outOffset[j]] = (Int32) std::min(std::llround(in[info.inOffset[j]] * 8388608.0), 8388607LL); + out[info.outOffset[j]] = (Int32) std::max(std::min(std::llround(in[info.inOffset[j]] * 8388608.0), 8388607LL), -8388608LL); } in += info.inJump; out += info.outJump; @@ -11275,7 +11275,7 @@ void RtApi :: convertBuffer( char *outBuffer, char *inBuffer, ConvertInfo &info Float32 *in = (Float32 *)inBuffer; for (unsigned int i=0; i<stream_.bufferSize; i++) { for (j=0; j<info.channels; j++) { - out[info.outOffset[j]] = (Int16) std::min(std::llround(in[info.inOffset[j]] * 32768.f), 32767LL); + out[info.outOffset[j]] = (Int16) std::max(std::min(std::llround(in[info.inOffset[j]] * 32768.f), 32767LL), -32768LL); } in += info.inJump; out += info.outJump; @@ -11285,7 +11285,7 @@ void RtApi :: convertBuffer( char *outBuffer, char *inBuffer, ConvertInfo &info Float64 *in = (Float64 *)inBuffer; for (unsigned int i=0; i<stream_.bufferSize; i++) { for (j=0; j<info.channels; j++) { - out[info.outOffset[j]] = (Int16) std::min(std::llround(in[info.inOffset[j]] * 32768.0), 32767LL); + out[info.outOffset[j]] = (Int16) std::max(std::min(std::llround(in[info.inOffset[j]] * 32768.0), 32767LL), -32768LL); } in += info.inJump; out += info.outJump; @@ -11339,7 +11339,7 @@ void RtApi :: convertBuffer( char *outBuffer, char *inBuffer, ConvertInfo &info Float32 *in = (Float32 *)inBuffer; for (unsigned int i=0; i<stream_.bufferSize; i++) { for (j=0; j<info.channels; j++) { - out[info.outOffset[j]] = (signed char) std::min(std::llround(in[info.inOffset[j]] * 128.f), 127LL); + out[info.outOffset[j]] = (signed char) std::max(std::min(std::llround(in[info.inOffset[j]] * 128.f), 127LL), -128LL); } in += info.inJump; out += info.outJump; @@ -11349,7 +11349,7 @@ void RtApi :: convertBuffer( char *outBuffer, char *inBuffer, ConvertInfo &info Float64 *in = (Float64 *)inBuffer; for (unsigned int i=0; i<stream_.bufferSize; i++) { for (j=0; j<info.channels; j++) { - out[info.outOffset[j]] = (signed char) std::min(std::llround(in[info.inOffset[j]] * 128.0), 127LL); + out[info.outOffset[j]] = (signed char) std::max(std::min(std::llround(in[info.inOffset[j]] * 128.0), 127LL), -128LL); } in += info.inJump; out += info.outJump; |
