From 7b016e5e4040743ecf58dec2966c83b71c44d8e8 Mon Sep 17 00:00:00 2001 From: Paul Ferrand Date: Fri, 29 May 2020 13:50:10 +0200 Subject: [PATCH 1/7] Fixed precision in debug messages --- src/sfizz/Debug.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/sfizz/Debug.h b/src/sfizz/Debug.h index b8705552..f20d10a9 100644 --- a/src/sfizz/Debug.h +++ b/src/sfizz/Debug.h @@ -8,6 +8,7 @@ #if !defined(NDEBUG) || defined(SFIZZ_ENABLE_RELEASE_ASSERT) #include +#include // Break in source code #if defined(_WIN32) && defined(_MSC_VER) @@ -49,7 +50,7 @@ // Debug message #if !defined(NDEBUG) || defined(SFIZZ_ENABLE_RELEASE_DBG) #include -#define DBG(ostream) do { std::cerr << ostream << '\n'; } while (0) +#define DBG(ostream) do { std::cerr << std::fixed << std::setprecision(2) << ostream << '\n'; } while (0) #else #define DBG(ostream) do {} while (0) #endif From 011d02cfcad1fdfa44fcb95c33a5e4b0f763ce35 Mon Sep 17 00:00:00 2001 From: Paul Ferrand Date: Fri, 29 May 2020 13:55:11 +0200 Subject: [PATCH 2/7] Add soft asserts and fixed precision in debug messages --- src/sfizz/Debug.h | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/sfizz/Debug.h b/src/sfizz/Debug.h index f20d10a9..edafe597 100644 --- a/src/sfizz/Debug.h +++ b/src/sfizz/Debug.h @@ -8,7 +8,6 @@ #if !defined(NDEBUG) || defined(SFIZZ_ENABLE_RELEASE_ASSERT) #include -#include // Break in source code #if defined(_WIN32) && defined(_MSC_VER) @@ -40,16 +39,30 @@ ASSERTFALSE; \ } while (0) +#define CHECKFALSE \ + do { \ + std::cerr << "Check failed at " << __FILE__ << ":" << __LINE__ << '\n'; \ + } while (0) + +#define CHECK(expression) \ + do { \ + if (!(expression)) \ + CHECKFALSE; \ + } while (0) + #else // NDEBUG #define ASSERTFALSE do {} while (0) #define ASSERT(expression) do {} while (0) +#define CHECKFALSE do {} while (0) +#define CHECK(expression) do {} while (0) #endif // Debug message #if !defined(NDEBUG) || defined(SFIZZ_ENABLE_RELEASE_DBG) #include +#include #define DBG(ostream) do { std::cerr << std::fixed << std::setprecision(2) << ostream << '\n'; } while (0) #else #define DBG(ostream) do {} while (0) From b89ef09406d88a95400b0fe1498dd6aac05ab9f3 Mon Sep 17 00:00:00 2001 From: Paul Ferrand Date: Fri, 29 May 2020 13:57:03 +0200 Subject: [PATCH 3/7] SIMD helpers asserts are more checks --- src/sfizz/SIMDHelpers.h | 68 ++++++++++++++++++++--------------------- src/sfizz/SIMDSSE.cpp | 54 ++++++++++++++++---------------- 2 files changed, 61 insertions(+), 61 deletions(-) diff --git a/src/sfizz/SIMDHelpers.h b/src/sfizz/SIMDHelpers.h index 3db5d7bb..7773b794 100644 --- a/src/sfizz/SIMDHelpers.h +++ b/src/sfizz/SIMDHelpers.h @@ -65,8 +65,8 @@ template void readInterleaved(absl::Span input, absl::Span outputLeft, absl::Span outputRight) noexcept { // The size of the output is not big enough for the input... - ASSERT(outputLeft.size() >= input.size() / 2); - ASSERT(outputRight.size() >= input.size() / 2); + CHECK(outputLeft.size() >= input.size() / 2); + CHECK(outputRight.size() >= input.size() / 2); auto* in = input.begin(); auto* lOut = outputLeft.begin(); @@ -98,8 +98,8 @@ namespace _internals { template void writeInterleaved(absl::Span inputLeft, absl::Span inputRight, absl::Span output) noexcept { - ASSERT(inputLeft.size() <= output.size() / 2); - ASSERT(inputRight.size() <= output.size() / 2); + CHECK(inputLeft.size() <= output.size() / 2); + CHECK(inputRight.size() <= output.size() / 2); auto* lIn = inputLeft.begin(); auto* rIn = inputRight.begin(); @@ -142,7 +142,7 @@ void fill(absl::Span output, float value) noexcept; template void exp(absl::Span input, absl::Span output) noexcept { - ASSERT(output.size() >= input.size()); + CHECK(output.size() >= input.size()); auto sentinel = std::min(input.size(), output.size()); for (decltype(sentinel) i = 0; i < sentinel; ++i) output[i] = std::exp(input[i]); @@ -164,7 +164,7 @@ void exp(absl::Span input, absl::Span output) n template void log(absl::Span input, absl::Span output) noexcept { - ASSERT(output.size() >= input.size()); + CHECK(output.size() >= input.size()); auto sentinel = std::min(input.size(), output.size()); for (decltype(sentinel) i = 0; i < sentinel; ++i) output[i] = std::log(input[i]); @@ -186,7 +186,7 @@ void log(absl::Span input, absl::Span output) n template void sin(absl::Span input, absl::Span output) noexcept { - ASSERT(output.size() >= input.size()); + CHECK(output.size() >= input.size()); auto sentinel = std::min(input.size(), output.size()); for (decltype(sentinel) i = 0; i < sentinel; ++i) output[i] = std::sin(input[i]); @@ -208,7 +208,7 @@ void sin(absl::Span input, absl::Span output) n template void cos(absl::Span input, absl::Span output) noexcept { - ASSERT(output.size() >= input.size()); + CHECK(output.size() >= input.size()); auto sentinel = std::min(input.size(), output.size()); for (decltype(sentinel) i = 0; i < sentinel; ++i) output[i] = std::cos(input[i]); @@ -259,9 +259,9 @@ namespace _internals { template float saturatingSFZIndex(absl::Span jumps, absl::Span leftCoeffs, absl::Span rightCoeffs, absl::Span indices, T floatIndex, T loopEnd) noexcept { - ASSERT(indices.size() >= jumps.size()); - ASSERT(indices.size() == leftCoeffs.size()); - ASSERT(indices.size() == rightCoeffs.size()); + CHECK(indices.size() >= jumps.size()); + CHECK(indices.size() == leftCoeffs.size()); + CHECK(indices.size() == rightCoeffs.size()); auto* index = indices.begin(); auto* leftCoeff = leftCoeffs.begin(); @@ -312,9 +312,9 @@ namespace _internals { template float loopingSFZIndex(absl::Span jumps, absl::Span leftCoeffs, absl::Span rightCoeffs, absl::Span indices, T floatIndex, T loopEnd, T loopStart) noexcept { - ASSERT(indices.size() >= jumps.size()); - ASSERT(indices.size() == leftCoeffs.size()); - ASSERT(indices.size() == rightCoeffs.size()); + CHECK(indices.size() >= jumps.size()); + CHECK(indices.size() == leftCoeffs.size()); + CHECK(indices.size() == rightCoeffs.size()); auto* index = indices.begin(); auto* leftCoeff = leftCoeffs.begin(); @@ -353,7 +353,7 @@ namespace _internals { template void applyGain(T gain, absl::Span input, absl::Span output) noexcept { - ASSERT(input.size() <= output.size()); + CHECK(input.size() <= output.size()); auto* in = input.begin(); auto* out = output.begin(); auto* sentinel = out + std::min(output.size(), input.size()); @@ -383,8 +383,8 @@ namespace _internals { template void applyGain(absl::Span gain, absl::Span input, absl::Span output) noexcept { - ASSERT(gain.size() == input.size()); - ASSERT(input.size() <= output.size()); + CHECK(gain.size() == input.size()); + CHECK(input.size() <= output.size()); auto* in = input.begin(); auto* g = gain.begin(); auto* out = output.begin(); @@ -451,8 +451,8 @@ namespace _internals { template void divide(absl::Span input, absl::Span divisor, absl::Span output) noexcept { - ASSERT(divisor.size() == input.size()); - ASSERT(input.size() <= output.size()); + CHECK(divisor.size() == input.size()); + CHECK(input.size() <= output.size()); auto* in = input.begin(); auto* d = divisor.begin(); auto* out = output.begin(); @@ -507,8 +507,8 @@ namespace _internals { template void multiplyAdd(absl::Span gain, absl::Span input, absl::Span output) noexcept { - ASSERT(gain.size() == input.size()); - ASSERT(input.size() <= output.size()); + CHECK(gain.size() == input.size()); + CHECK(input.size() <= output.size()); auto* in = input.begin(); auto* g = gain.begin(); auto* out = output.begin(); @@ -523,7 +523,7 @@ void multiplyAdd(absl::Span gain, absl::Span void multiplyAdd(const T gain, absl::Span input, absl::Span output) noexcept { - // ASSERT(input.size() <= output.size()); + // CHECK(input.size() <= output.size()); auto* in = input.begin(); auto* out = output.begin(); auto* sentinel = out + std::min(output.size(), input.size()); @@ -622,7 +622,7 @@ namespace _internals { template void add(absl::Span input, absl::Span output) noexcept { - ASSERT(output.size() >= input.size()); + CHECK(output.size() >= input.size()); auto* in = input.begin(); auto* out = output.begin(); auto* sentinel = out + min(input.size(), output.size()); @@ -689,7 +689,7 @@ void subtract(const T value, absl::Span output) noexcept template void subtract(absl::Span input, absl::Span output) noexcept { - ASSERT(output.size() >= input.size()); + CHECK(output.size() >= input.size()); auto* in = input.begin(); auto* out = output.begin(); auto* sentinel = out + min(input.size(), output.size()); @@ -724,7 +724,7 @@ namespace _internals { template void copy(absl::Span input, absl::Span output) noexcept { - ASSERT(output.size() >= input.size()); + CHECK(output.size() >= input.size()); if (output.data() == input.data() && output.size() == input.size()) return; auto* in = input.begin(); @@ -801,8 +801,8 @@ namespace _internals { template void pan(absl::Span panEnvelope, absl::Span leftBuffer, absl::Span rightBuffer) noexcept { - ASSERT(leftBuffer.size() >= panEnvelope.size()); - ASSERT(rightBuffer.size() >= panEnvelope.size()); + CHECK(leftBuffer.size() >= panEnvelope.size()); + CHECK(rightBuffer.size() >= panEnvelope.size()); auto* pan = panEnvelope.begin(); auto* left = leftBuffer.begin(); auto* right = rightBuffer.begin(); @@ -831,8 +831,8 @@ void pan(absl::Span panEnvelope, absl::Span lef template void width(absl::Span widthEnvelope, absl::Span leftBuffer, absl::Span rightBuffer) noexcept { - ASSERT(leftBuffer.size() >= widthEnvelope.size()); - ASSERT(rightBuffer.size() >= widthEnvelope.size()); + CHECK(leftBuffer.size() >= widthEnvelope.size()); + CHECK(rightBuffer.size() >= widthEnvelope.size()); auto* width = widthEnvelope.begin(); auto* left = leftBuffer.begin(); auto* right = rightBuffer.begin(); @@ -921,7 +921,7 @@ namespace _internals { template void cumsum(absl::Span input, absl::Span output) noexcept { - ASSERT(output.size() >= input.size()); + CHECK(output.size() >= input.size()); if (input.size() == 0) return; @@ -962,9 +962,9 @@ namespace _internals { template void sfzInterpolationCast(absl::Span floatJumps, absl::Span jumps, absl::Span leftCoeffs, absl::Span rightCoeffs) noexcept { - ASSERT(jumps.size() >= floatJumps.size()); - ASSERT(jumps.size() == leftCoeffs.size()); - ASSERT(jumps.size() == rightCoeffs.size()); + CHECK(jumps.size() >= floatJumps.size()); + CHECK(jumps.size() == leftCoeffs.size()); + CHECK(jumps.size() == rightCoeffs.size()); auto floatJump = floatJumps.data(); auto jump = jumps.data(); @@ -1003,7 +1003,7 @@ namespace _internals { template void diff(absl::Span input, absl::Span output) noexcept { - ASSERT(output.size() >= input.size()); + CHECK(output.size() >= input.size()); if (input.size() == 0) return; diff --git a/src/sfizz/SIMDSSE.cpp b/src/sfizz/SIMDSSE.cpp index 1048e9cc..062d5476 100644 --- a/src/sfizz/SIMDSSE.cpp +++ b/src/sfizz/SIMDSSE.cpp @@ -50,10 +50,10 @@ template <> void sfz::readInterleaved(absl::Span input, absl::Span outputLeft, absl::Span outputRight) noexcept { // The size of the outputs is not big enough for the input... - ASSERT(outputLeft.size() >= input.size() / 2); - ASSERT(outputRight.size() >= input.size() / 2); + CHECK(outputLeft.size() >= input.size() / 2); + CHECK(outputRight.size() >= input.size() / 2); // Input is too small - ASSERT(input.size() > 1); + CHECK(input.size() > 1); auto* in = input.begin(); auto* lOut = outputLeft.begin(); @@ -90,8 +90,8 @@ template <> void sfz::writeInterleaved(absl::Span inputLeft, absl::Span inputRight, absl::Span output) noexcept { // The size of the output is not big enough for the inputs... - ASSERT(inputLeft.size() <= output.size() / 2); - ASSERT(inputRight.size() <= output.size() / 2); + CHECK(inputLeft.size() <= output.size() / 2); + CHECK(inputRight.size() <= output.size() / 2); auto* lIn = inputLeft.begin(); auto* rIn = inputRight.begin(); @@ -146,7 +146,7 @@ void sfz::fill(absl::Span output, float value) noexcept template <> void sfz::exp(absl::Span input, absl::Span output) noexcept { - ASSERT(output.size() >= input.size()); + CHECK(output.size() >= input.size()); auto* in = input.begin(); auto* out = output.begin(); auto* sentinel = in + std::min(input.size(), output.size()); @@ -167,7 +167,7 @@ void sfz::exp(absl::Span input, absl::Span outp template <> void sfz::cos(absl::Span input, absl::Span output) noexcept { - ASSERT(output.size() >= input.size()); + CHECK(output.size() >= input.size()); auto* in = input.begin(); auto* out = output.begin(); auto* sentinel = in + std::min(input.size(), output.size()); @@ -188,7 +188,7 @@ void sfz::cos(absl::Span input, absl::Span outp template <> void sfz::log(absl::Span input, absl::Span output) noexcept { - ASSERT(output.size() >= input.size()); + CHECK(output.size() >= input.size()); auto* in = input.begin(); auto* out = output.begin(); auto* sentinel = in + std::min(input.size(), output.size()); @@ -209,7 +209,7 @@ void sfz::log(absl::Span input, absl::Span outp template <> void sfz::sin(absl::Span input, absl::Span output) noexcept { - ASSERT(output.size() >= input.size()); + CHECK(output.size() >= input.size()); auto* in = input.begin(); auto* out = output.begin(); auto* sentinel = in + std::min(input.size(), output.size()); @@ -347,9 +347,9 @@ float sfz::loopingSFZIndex(absl::Span jumps, float loopEnd, float loopStart) noexcept { - ASSERT(indices.size() >= jumps.size()); - ASSERT(indices.size() == leftCoeffs.size()); - ASSERT(indices.size() == rightCoeffs.size()); + CHECK(indices.size() >= jumps.size()); + CHECK(indices.size() == leftCoeffs.size()); + CHECK(indices.size() == rightCoeffs.size()); auto index = indices.data(); auto leftCoeff = leftCoeffs.data(); @@ -405,9 +405,9 @@ float sfz::saturatingSFZIndex(absl::Span jumps, float floatIndex, float loopEnd) noexcept { - ASSERT(indices.size() >= jumps.size()); - ASSERT(indices.size() == leftCoeffs.size()); - ASSERT(indices.size() == rightCoeffs.size()); + CHECK(indices.size() >= jumps.size()); + CHECK(indices.size() == leftCoeffs.size()); + CHECK(indices.size() == rightCoeffs.size()); auto index = indices.data(); auto leftCoeff = leftCoeffs.data(); @@ -506,7 +506,7 @@ float sfz::multiplicativeRamp(absl::Span output, float value template <> void sfz::add(absl::Span input, absl::Span output) noexcept { - ASSERT(output.size() >= input.size()); + CHECK(output.size() >= input.size()); auto* in = input.begin(); auto* out = output.begin(); auto* sentinel = out + min(input.size(), output.size()); @@ -547,7 +547,7 @@ void sfz::add(float value, absl::Span output) noexcept template <> void sfz::subtract(absl::Span input, absl::Span output) noexcept { - ASSERT(output.size() >= input.size()); + CHECK(output.size() >= input.size()); auto* in = input.begin(); auto* out = output.begin(); auto* sentinel = out + min(input.size(), output.size()); @@ -588,7 +588,7 @@ void sfz::subtract(const float value, absl::Span output) noe template <> void sfz::copy(absl::Span input, absl::Span output) noexcept { - ASSERT(output.size() >= input.size()); + CHECK(output.size() >= input.size()); auto* in = input.begin(); auto* out = output.begin(); auto* sentinel = out + min(input.size(), output.size()); @@ -609,8 +609,8 @@ void sfz::copy(absl::Span input, absl::Span out template <> void sfz::pan(absl::Span panEnvelope, absl::Span leftBuffer, absl::Span rightBuffer) noexcept { - ASSERT(leftBuffer.size() >= panEnvelope.size()); - ASSERT(rightBuffer.size() >= panEnvelope.size()); + CHECK(leftBuffer.size() >= panEnvelope.size()); + CHECK(rightBuffer.size() >= panEnvelope.size()); auto* pan = panEnvelope.begin(); auto* left = leftBuffer.begin(); auto* right = rightBuffer.begin(); @@ -647,8 +647,8 @@ void sfz::pan(absl::Span panEnvelope, absl::Span void sfz::width(absl::Span widthEnvelope, absl::Span leftBuffer, absl::Span rightBuffer) noexcept { - ASSERT(leftBuffer.size() >= widthEnvelope.size()); - ASSERT(rightBuffer.size() >= widthEnvelope.size()); + CHECK(leftBuffer.size() >= widthEnvelope.size()); + CHECK(rightBuffer.size() >= widthEnvelope.size()); auto* width = widthEnvelope.begin(); auto* left = leftBuffer.begin(); auto* right = rightBuffer.begin(); @@ -757,7 +757,7 @@ float sfz::meanSquared(absl::Span vector) noexcept template <> void sfz::cumsum(absl::Span input, absl::Span output) noexcept { - ASSERT(output.size() >= input.size()); + CHECK(output.size() >= input.size()); if (input.size() == 0) return; @@ -789,9 +789,9 @@ template <> void sfz::sfzInterpolationCast(absl::Span floatJumps, absl::Span jumps, absl::Span leftCoeffs, absl::Span rightCoeffs) noexcept { sfz::sfzInterpolationCast(floatJumps, jumps, leftCoeffs, rightCoeffs); - // ASSERT(jumps.size() >= floatJumps.size()); - // ASSERT(jumps.size() == leftCoeffs.size()); - // ASSERT(jumps.size() == rightCoeffs.size()); + // CHECK(jumps.size() >= floatJumps.size()); + // CHECK(jumps.size() == leftCoeffs.size()); + // CHECK(jumps.size() == rightCoeffs.size()); // auto floatJump = floatJumps.data(); // auto jump = jumps.data(); @@ -822,7 +822,7 @@ void sfz::sfzInterpolationCast(absl::Span floatJumps, template <> void sfz::diff(absl::Span input, absl::Span output) noexcept { - ASSERT(output.size() >= input.size()); + CHECK(output.size() >= input.size()); if (input.size() == 0) return; From f3cb2bcc9a85ff155a21464f915ee96dc6e74f3e Mon Sep 17 00:00:00 2001 From: Paul Ferrand Date: Fri, 29 May 2020 13:59:01 +0200 Subject: [PATCH 4/7] Change `isValidAudio` to checks and not asserts, and reactivate in the main render block --- src/sfizz/Synth.cpp | 6 ++---- src/sfizz/Voice.cpp | 12 ++++++------ 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/sfizz/Synth.cpp b/src/sfizz/Synth.cpp index c980e5a0..b32b0132 100644 --- a/src/sfizz/Synth.cpp +++ b/src/sfizz/Synth.cpp @@ -724,12 +724,10 @@ void sfz::Synth::renderBlock(AudioSpan buffer) noexcept } } -#if 0 ASSERT(!hasNanInf(buffer.getConstSpan(0))); ASSERT(!hasNanInf(buffer.getConstSpan(1))); - ASSERT(isValidAudio(buffer.getConstSpan(0))); - ASSERT(isValidAudio(buffer.getConstSpan(1))); -#endif + CHECK(isValidAudio(buffer.getConstSpan(0))); + CHECK(isValidAudio(buffer.getConstSpan(1))); } void sfz::Synth::noteOn(int delay, int noteNumber, uint8_t velocity) noexcept diff --git a/src/sfizz/Voice.cpp b/src/sfizz/Voice.cpp index edb00a07..d6da13ab 100644 --- a/src/sfizz/Voice.cpp +++ b/src/sfizz/Voice.cpp @@ -250,8 +250,8 @@ void sfz::Voice::renderBlock(AudioSpan buffer) noexcept #if 0 ASSERT(!hasNanInf(buffer.getConstSpan(0))); ASSERT(!hasNanInf(buffer.getConstSpan(1))); - ASSERT(isValidAudio(buffer.getConstSpan(0))); - ASSERT(isValidAudio(buffer.getConstSpan(1))); + CHECK(isValidAudio(buffer.getConstSpan(0))); + CHECK(isValidAudio(buffer.getConstSpan(1))); #endif } @@ -529,8 +529,8 @@ void sfz::Voice::fillWithData(AudioSpan buffer) noexcept #if 0 ASSERT(!hasNanInf(buffer.getConstSpan(0))); ASSERT(!hasNanInf(buffer.getConstSpan(1))); - ASSERT(isValidAudio(buffer.getConstSpan(0))); - ASSERT(isValidAudio(buffer.getConstSpan(1))); + CHECK(isValidAudio(buffer.getConstSpan(0))); + CHECK(isValidAudio(buffer.getConstSpan(1))); #endif } @@ -595,8 +595,8 @@ void sfz::Voice::fillWithGenerator(AudioSpan buffer) noexcept #if 0 ASSERT(!hasNanInf(buffer.getConstSpan(0))); ASSERT(!hasNanInf(buffer.getConstSpan(1))); - ASSERT(isValidAudio(buffer.getConstSpan(0))); - ASSERT(isValidAudio(buffer.getConstSpan(1))); + CHECK(isValidAudio(buffer.getConstSpan(0))); + CHECK(isValidAudio(buffer.getConstSpan(1))); #endif } From f26be4e2b60aa3bc6259c2091e66b05171a6768e Mon Sep 17 00:00:00 2001 From: Paul Ferrand Date: Fri, 29 May 2020 14:00:11 +0200 Subject: [PATCH 5/7] Relax a bit the "valid audio" check --- src/sfizz/MathHelpers.h | 4 ++-- src/sfizz/Synth.cpp | 4 ++-- src/sfizz/Voice.cpp | 12 ++++++------ 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/sfizz/MathHelpers.h b/src/sfizz/MathHelpers.h index 6567d5b5..2f63e3ec 100644 --- a/src/sfizz/MathHelpers.h +++ b/src/sfizz/MathHelpers.h @@ -331,10 +331,10 @@ bool hasNanInf(absl::Span span) } template -bool isValidAudio(absl::Span span) +bool isReasonableAudio(absl::Span span) { for (const auto& x : span) - if (x < -1.0f || x > 1.0f) + if (x < -10.0f || x > 10.0f) return false; return true; diff --git a/src/sfizz/Synth.cpp b/src/sfizz/Synth.cpp index b32b0132..41f72086 100644 --- a/src/sfizz/Synth.cpp +++ b/src/sfizz/Synth.cpp @@ -726,8 +726,8 @@ void sfz::Synth::renderBlock(AudioSpan buffer) noexcept ASSERT(!hasNanInf(buffer.getConstSpan(0))); ASSERT(!hasNanInf(buffer.getConstSpan(1))); - CHECK(isValidAudio(buffer.getConstSpan(0))); - CHECK(isValidAudio(buffer.getConstSpan(1))); + CHECK(isReasonableAudio(buffer.getConstSpan(0))); + CHECK(isReasonableAudio(buffer.getConstSpan(1))); } void sfz::Synth::noteOn(int delay, int noteNumber, uint8_t velocity) noexcept diff --git a/src/sfizz/Voice.cpp b/src/sfizz/Voice.cpp index d6da13ab..60f99e2c 100644 --- a/src/sfizz/Voice.cpp +++ b/src/sfizz/Voice.cpp @@ -250,8 +250,8 @@ void sfz::Voice::renderBlock(AudioSpan buffer) noexcept #if 0 ASSERT(!hasNanInf(buffer.getConstSpan(0))); ASSERT(!hasNanInf(buffer.getConstSpan(1))); - CHECK(isValidAudio(buffer.getConstSpan(0))); - CHECK(isValidAudio(buffer.getConstSpan(1))); + CHECK(isReasonableAudio(buffer.getConstSpan(0))); + CHECK(isReasonableAudio(buffer.getConstSpan(1))); #endif } @@ -529,8 +529,8 @@ void sfz::Voice::fillWithData(AudioSpan buffer) noexcept #if 0 ASSERT(!hasNanInf(buffer.getConstSpan(0))); ASSERT(!hasNanInf(buffer.getConstSpan(1))); - CHECK(isValidAudio(buffer.getConstSpan(0))); - CHECK(isValidAudio(buffer.getConstSpan(1))); + CHECK(isReasonableAudio(buffer.getConstSpan(0))); + CHECK(isReasonableAudio(buffer.getConstSpan(1))); #endif } @@ -595,8 +595,8 @@ void sfz::Voice::fillWithGenerator(AudioSpan buffer) noexcept #if 0 ASSERT(!hasNanInf(buffer.getConstSpan(0))); ASSERT(!hasNanInf(buffer.getConstSpan(1))); - CHECK(isValidAudio(buffer.getConstSpan(0))); - CHECK(isValidAudio(buffer.getConstSpan(1))); + CHECK(isReasonableAudio(buffer.getConstSpan(0))); + CHECK(isReasonableAudio(buffer.getConstSpan(1))); #endif } From 2bf960df2717812798d630bfed155dd835a5fc63 Mon Sep 17 00:00:00 2001 From: Paul Ferrand Date: Fri, 29 May 2020 14:02:24 +0200 Subject: [PATCH 6/7] check span size is a check --- src/sfizz/MathHelpers.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sfizz/MathHelpers.h b/src/sfizz/MathHelpers.h index 2f63e3ec..d8976c88 100644 --- a/src/sfizz/MathHelpers.h +++ b/src/sfizz/MathHelpers.h @@ -397,7 +397,7 @@ constexpr bool checkSpanSizes(const absl::Span& span1, Others... others) return _checkSpanSizes(span1.size(), others...); } -#define CHECK_SPAN_SIZES(...) ASSERT(checkSpanSizes(__VA_ARGS__)) +#define CHECK_SPAN_SIZES(...) CHECK(checkSpanSizes(__VA_ARGS__)) class ScopedRoundingMode { From 969e1d09158ee47effb0037538beddce483974f1 Mon Sep 17 00:00:00 2001 From: Paul Ferrand Date: Fri, 29 May 2020 16:39:17 +0200 Subject: [PATCH 7/7] Added the failed expression in the message --- src/sfizz/Debug.h | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/sfizz/Debug.h b/src/sfizz/Debug.h index edafe597..c7020a9d 100644 --- a/src/sfizz/Debug.h +++ b/src/sfizz/Debug.h @@ -33,10 +33,12 @@ debugBreak(); \ } while (0) -#define ASSERT(expression) \ - do { \ - if (!(expression)) \ - ASSERTFALSE; \ +#define ASSERT(expression) \ + do { \ + if (!(expression)) { \ + std::cerr << "Assert failed: " << #expression << '\n'; \ + ASSERTFALSE; \ + } \ } while (0) #define CHECKFALSE \ @@ -44,10 +46,12 @@ std::cerr << "Check failed at " << __FILE__ << ":" << __LINE__ << '\n'; \ } while (0) -#define CHECK(expression) \ - do { \ - if (!(expression)) \ - CHECKFALSE; \ +#define CHECK(expression) \ + do { \ + if (!(expression)) { \ + std::cerr << "Check failed: " << #expression << '\n'; \ + CHECKFALSE; \ + } \ } while (0) #else // NDEBUG