commit
60436277eb
6 changed files with 95 additions and 79 deletions
|
|
@ -33,23 +33,41 @@
|
||||||
debugBreak(); \
|
debugBreak(); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define ASSERT(expression) \
|
#define ASSERT(expression) \
|
||||||
do { \
|
do { \
|
||||||
if (!(expression)) \
|
if (!(expression)) { \
|
||||||
ASSERTFALSE; \
|
std::cerr << "Assert failed: " << #expression << '\n'; \
|
||||||
|
ASSERTFALSE; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define CHECKFALSE \
|
||||||
|
do { \
|
||||||
|
std::cerr << "Check failed at " << __FILE__ << ":" << __LINE__ << '\n'; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define CHECK(expression) \
|
||||||
|
do { \
|
||||||
|
if (!(expression)) { \
|
||||||
|
std::cerr << "Check failed: " << #expression << '\n'; \
|
||||||
|
CHECKFALSE; \
|
||||||
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#else // NDEBUG
|
#else // NDEBUG
|
||||||
|
|
||||||
#define ASSERTFALSE do {} while (0)
|
#define ASSERTFALSE do {} while (0)
|
||||||
#define ASSERT(expression) do {} while (0)
|
#define ASSERT(expression) do {} while (0)
|
||||||
|
#define CHECKFALSE do {} while (0)
|
||||||
|
#define CHECK(expression) do {} while (0)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Debug message
|
// Debug message
|
||||||
#if !defined(NDEBUG) || defined(SFIZZ_ENABLE_RELEASE_DBG)
|
#if !defined(NDEBUG) || defined(SFIZZ_ENABLE_RELEASE_DBG)
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#define DBG(ostream) do { std::cerr << ostream << '\n'; } while (0)
|
#include <iomanip>
|
||||||
|
#define DBG(ostream) do { std::cerr << std::fixed << std::setprecision(2) << ostream << '\n'; } while (0)
|
||||||
#else
|
#else
|
||||||
#define DBG(ostream) do {} while (0)
|
#define DBG(ostream) do {} while (0)
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -331,10 +331,10 @@ bool hasNanInf(absl::Span<Type> span)
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class Type>
|
template <class Type>
|
||||||
bool isValidAudio(absl::Span<Type> span)
|
bool isReasonableAudio(absl::Span<Type> span)
|
||||||
{
|
{
|
||||||
for (const auto& x : span)
|
for (const auto& x : span)
|
||||||
if (x < -1.0f || x > 1.0f)
|
if (x < -10.0f || x > 10.0f)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -397,7 +397,7 @@ constexpr bool checkSpanSizes(const absl::Span<T>& span1, Others... others)
|
||||||
return _checkSpanSizes(span1.size(), others...);
|
return _checkSpanSizes(span1.size(), others...);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define CHECK_SPAN_SIZES(...) ASSERT(checkSpanSizes(__VA_ARGS__))
|
#define CHECK_SPAN_SIZES(...) CHECK(checkSpanSizes(__VA_ARGS__))
|
||||||
|
|
||||||
|
|
||||||
class ScopedRoundingMode {
|
class ScopedRoundingMode {
|
||||||
|
|
|
||||||
|
|
@ -65,8 +65,8 @@ template <class T, bool SIMD = SIMDConfig::readInterleaved>
|
||||||
void readInterleaved(absl::Span<const T> input, absl::Span<T> outputLeft, absl::Span<T> outputRight) noexcept
|
void readInterleaved(absl::Span<const T> input, absl::Span<T> outputLeft, absl::Span<T> outputRight) noexcept
|
||||||
{
|
{
|
||||||
// The size of the output is not big enough for the input...
|
// The size of the output is not big enough for the input...
|
||||||
ASSERT(outputLeft.size() >= input.size() / 2);
|
CHECK(outputLeft.size() >= input.size() / 2);
|
||||||
ASSERT(outputRight.size() >= input.size() / 2);
|
CHECK(outputRight.size() >= input.size() / 2);
|
||||||
|
|
||||||
auto* in = input.begin();
|
auto* in = input.begin();
|
||||||
auto* lOut = outputLeft.begin();
|
auto* lOut = outputLeft.begin();
|
||||||
|
|
@ -98,8 +98,8 @@ namespace _internals {
|
||||||
template <class T, bool SIMD = SIMDConfig::writeInterleaved>
|
template <class T, bool SIMD = SIMDConfig::writeInterleaved>
|
||||||
void writeInterleaved(absl::Span<const T> inputLeft, absl::Span<const T> inputRight, absl::Span<T> output) noexcept
|
void writeInterleaved(absl::Span<const T> inputLeft, absl::Span<const T> inputRight, absl::Span<T> output) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(inputLeft.size() <= output.size() / 2);
|
CHECK(inputLeft.size() <= output.size() / 2);
|
||||||
ASSERT(inputRight.size() <= output.size() / 2);
|
CHECK(inputRight.size() <= output.size() / 2);
|
||||||
|
|
||||||
auto* lIn = inputLeft.begin();
|
auto* lIn = inputLeft.begin();
|
||||||
auto* rIn = inputRight.begin();
|
auto* rIn = inputRight.begin();
|
||||||
|
|
@ -142,7 +142,7 @@ void fill<float, true>(absl::Span<float> output, float value) noexcept;
|
||||||
template <class Type, bool SIMD = SIMDConfig::mathfuns>
|
template <class Type, bool SIMD = SIMDConfig::mathfuns>
|
||||||
void exp(absl::Span<const Type> input, absl::Span<Type> output) noexcept
|
void exp(absl::Span<const Type> input, absl::Span<Type> output) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(output.size() >= input.size());
|
CHECK(output.size() >= input.size());
|
||||||
auto sentinel = std::min(input.size(), output.size());
|
auto sentinel = std::min(input.size(), output.size());
|
||||||
for (decltype(sentinel) i = 0; i < sentinel; ++i)
|
for (decltype(sentinel) i = 0; i < sentinel; ++i)
|
||||||
output[i] = std::exp(input[i]);
|
output[i] = std::exp(input[i]);
|
||||||
|
|
@ -164,7 +164,7 @@ void exp<float, true>(absl::Span<const float> input, absl::Span<float> output) n
|
||||||
template <class Type, bool SIMD = SIMDConfig::mathfuns>
|
template <class Type, bool SIMD = SIMDConfig::mathfuns>
|
||||||
void log(absl::Span<const Type> input, absl::Span<Type> output) noexcept
|
void log(absl::Span<const Type> input, absl::Span<Type> output) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(output.size() >= input.size());
|
CHECK(output.size() >= input.size());
|
||||||
auto sentinel = std::min(input.size(), output.size());
|
auto sentinel = std::min(input.size(), output.size());
|
||||||
for (decltype(sentinel) i = 0; i < sentinel; ++i)
|
for (decltype(sentinel) i = 0; i < sentinel; ++i)
|
||||||
output[i] = std::log(input[i]);
|
output[i] = std::log(input[i]);
|
||||||
|
|
@ -186,7 +186,7 @@ void log<float, true>(absl::Span<const float> input, absl::Span<float> output) n
|
||||||
template <class Type, bool SIMD = SIMDConfig::mathfuns>
|
template <class Type, bool SIMD = SIMDConfig::mathfuns>
|
||||||
void sin(absl::Span<const Type> input, absl::Span<Type> output) noexcept
|
void sin(absl::Span<const Type> input, absl::Span<Type> output) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(output.size() >= input.size());
|
CHECK(output.size() >= input.size());
|
||||||
auto sentinel = std::min(input.size(), output.size());
|
auto sentinel = std::min(input.size(), output.size());
|
||||||
for (decltype(sentinel) i = 0; i < sentinel; ++i)
|
for (decltype(sentinel) i = 0; i < sentinel; ++i)
|
||||||
output[i] = std::sin(input[i]);
|
output[i] = std::sin(input[i]);
|
||||||
|
|
@ -208,7 +208,7 @@ void sin<float, true>(absl::Span<const float> input, absl::Span<float> output) n
|
||||||
template <class Type, bool SIMD = SIMDConfig::mathfuns>
|
template <class Type, bool SIMD = SIMDConfig::mathfuns>
|
||||||
void cos(absl::Span<const Type> input, absl::Span<Type> output) noexcept
|
void cos(absl::Span<const Type> input, absl::Span<Type> output) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(output.size() >= input.size());
|
CHECK(output.size() >= input.size());
|
||||||
auto sentinel = std::min(input.size(), output.size());
|
auto sentinel = std::min(input.size(), output.size());
|
||||||
for (decltype(sentinel) i = 0; i < sentinel; ++i)
|
for (decltype(sentinel) i = 0; i < sentinel; ++i)
|
||||||
output[i] = std::cos(input[i]);
|
output[i] = std::cos(input[i]);
|
||||||
|
|
@ -259,9 +259,9 @@ namespace _internals {
|
||||||
template <class T, bool SIMD = SIMDConfig::saturatingSFZIndex>
|
template <class T, bool SIMD = SIMDConfig::saturatingSFZIndex>
|
||||||
float saturatingSFZIndex(absl::Span<const T> jumps, absl::Span<T> leftCoeffs, absl::Span<T> rightCoeffs, absl::Span<int> indices, T floatIndex, T loopEnd) noexcept
|
float saturatingSFZIndex(absl::Span<const T> jumps, absl::Span<T> leftCoeffs, absl::Span<T> rightCoeffs, absl::Span<int> indices, T floatIndex, T loopEnd) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(indices.size() >= jumps.size());
|
CHECK(indices.size() >= jumps.size());
|
||||||
ASSERT(indices.size() == leftCoeffs.size());
|
CHECK(indices.size() == leftCoeffs.size());
|
||||||
ASSERT(indices.size() == rightCoeffs.size());
|
CHECK(indices.size() == rightCoeffs.size());
|
||||||
|
|
||||||
auto* index = indices.begin();
|
auto* index = indices.begin();
|
||||||
auto* leftCoeff = leftCoeffs.begin();
|
auto* leftCoeff = leftCoeffs.begin();
|
||||||
|
|
@ -312,9 +312,9 @@ namespace _internals {
|
||||||
template <class T, bool SIMD = SIMDConfig::loopingSFZIndex>
|
template <class T, bool SIMD = SIMDConfig::loopingSFZIndex>
|
||||||
float loopingSFZIndex(absl::Span<const T> jumps, absl::Span<T> leftCoeffs, absl::Span<T> rightCoeffs, absl::Span<int> indices, T floatIndex, T loopEnd, T loopStart) noexcept
|
float loopingSFZIndex(absl::Span<const T> jumps, absl::Span<T> leftCoeffs, absl::Span<T> rightCoeffs, absl::Span<int> indices, T floatIndex, T loopEnd, T loopStart) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(indices.size() >= jumps.size());
|
CHECK(indices.size() >= jumps.size());
|
||||||
ASSERT(indices.size() == leftCoeffs.size());
|
CHECK(indices.size() == leftCoeffs.size());
|
||||||
ASSERT(indices.size() == rightCoeffs.size());
|
CHECK(indices.size() == rightCoeffs.size());
|
||||||
|
|
||||||
auto* index = indices.begin();
|
auto* index = indices.begin();
|
||||||
auto* leftCoeff = leftCoeffs.begin();
|
auto* leftCoeff = leftCoeffs.begin();
|
||||||
|
|
@ -353,7 +353,7 @@ namespace _internals {
|
||||||
template <class T, bool SIMD = SIMDConfig::gain>
|
template <class T, bool SIMD = SIMDConfig::gain>
|
||||||
void applyGain(T gain, absl::Span<const T> input, absl::Span<T> output) noexcept
|
void applyGain(T gain, absl::Span<const T> input, absl::Span<T> output) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(input.size() <= output.size());
|
CHECK(input.size() <= output.size());
|
||||||
auto* in = input.begin();
|
auto* in = input.begin();
|
||||||
auto* out = output.begin();
|
auto* out = output.begin();
|
||||||
auto* sentinel = out + std::min(output.size(), input.size());
|
auto* sentinel = out + std::min(output.size(), input.size());
|
||||||
|
|
@ -383,8 +383,8 @@ namespace _internals {
|
||||||
template <class T, bool SIMD = SIMDConfig::gain>
|
template <class T, bool SIMD = SIMDConfig::gain>
|
||||||
void applyGain(absl::Span<const T> gain, absl::Span<const T> input, absl::Span<T> output) noexcept
|
void applyGain(absl::Span<const T> gain, absl::Span<const T> input, absl::Span<T> output) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(gain.size() == input.size());
|
CHECK(gain.size() == input.size());
|
||||||
ASSERT(input.size() <= output.size());
|
CHECK(input.size() <= output.size());
|
||||||
auto* in = input.begin();
|
auto* in = input.begin();
|
||||||
auto* g = gain.begin();
|
auto* g = gain.begin();
|
||||||
auto* out = output.begin();
|
auto* out = output.begin();
|
||||||
|
|
@ -451,8 +451,8 @@ namespace _internals {
|
||||||
template <class T, bool SIMD = SIMDConfig::divide>
|
template <class T, bool SIMD = SIMDConfig::divide>
|
||||||
void divide(absl::Span<const T> input, absl::Span<const T> divisor, absl::Span<T> output) noexcept
|
void divide(absl::Span<const T> input, absl::Span<const T> divisor, absl::Span<T> output) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(divisor.size() == input.size());
|
CHECK(divisor.size() == input.size());
|
||||||
ASSERT(input.size() <= output.size());
|
CHECK(input.size() <= output.size());
|
||||||
auto* in = input.begin();
|
auto* in = input.begin();
|
||||||
auto* d = divisor.begin();
|
auto* d = divisor.begin();
|
||||||
auto* out = output.begin();
|
auto* out = output.begin();
|
||||||
|
|
@ -507,8 +507,8 @@ namespace _internals {
|
||||||
template <class T, bool SIMD = SIMDConfig::multiplyAdd>
|
template <class T, bool SIMD = SIMDConfig::multiplyAdd>
|
||||||
void multiplyAdd(absl::Span<const T> gain, absl::Span<const T> input, absl::Span<T> output) noexcept
|
void multiplyAdd(absl::Span<const T> gain, absl::Span<const T> input, absl::Span<T> output) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(gain.size() == input.size());
|
CHECK(gain.size() == input.size());
|
||||||
ASSERT(input.size() <= output.size());
|
CHECK(input.size() <= output.size());
|
||||||
auto* in = input.begin();
|
auto* in = input.begin();
|
||||||
auto* g = gain.begin();
|
auto* g = gain.begin();
|
||||||
auto* out = output.begin();
|
auto* out = output.begin();
|
||||||
|
|
@ -523,7 +523,7 @@ void multiplyAdd<float, true>(absl::Span<const float> gain, absl::Span<const flo
|
||||||
template <class T, bool SIMD = SIMDConfig::multiplyAdd>
|
template <class T, bool SIMD = SIMDConfig::multiplyAdd>
|
||||||
void multiplyAdd(const T gain, absl::Span<const T> input, absl::Span<T> output) noexcept
|
void multiplyAdd(const T gain, absl::Span<const T> input, absl::Span<T> output) noexcept
|
||||||
{
|
{
|
||||||
// ASSERT(input.size() <= output.size());
|
// CHECK(input.size() <= output.size());
|
||||||
auto* in = input.begin();
|
auto* in = input.begin();
|
||||||
auto* out = output.begin();
|
auto* out = output.begin();
|
||||||
auto* sentinel = out + std::min(output.size(), input.size());
|
auto* sentinel = out + std::min(output.size(), input.size());
|
||||||
|
|
@ -622,7 +622,7 @@ namespace _internals {
|
||||||
template <class T, bool SIMD = SIMDConfig::add>
|
template <class T, bool SIMD = SIMDConfig::add>
|
||||||
void add(absl::Span<const T> input, absl::Span<T> output) noexcept
|
void add(absl::Span<const T> input, absl::Span<T> output) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(output.size() >= input.size());
|
CHECK(output.size() >= input.size());
|
||||||
auto* in = input.begin();
|
auto* in = input.begin();
|
||||||
auto* out = output.begin();
|
auto* out = output.begin();
|
||||||
auto* sentinel = out + min(input.size(), output.size());
|
auto* sentinel = out + min(input.size(), output.size());
|
||||||
|
|
@ -689,7 +689,7 @@ void subtract(const T value, absl::Span<T> output) noexcept
|
||||||
template <class T, bool SIMD = SIMDConfig::subtract>
|
template <class T, bool SIMD = SIMDConfig::subtract>
|
||||||
void subtract(absl::Span<const T> input, absl::Span<T> output) noexcept
|
void subtract(absl::Span<const T> input, absl::Span<T> output) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(output.size() >= input.size());
|
CHECK(output.size() >= input.size());
|
||||||
auto* in = input.begin();
|
auto* in = input.begin();
|
||||||
auto* out = output.begin();
|
auto* out = output.begin();
|
||||||
auto* sentinel = out + min(input.size(), output.size());
|
auto* sentinel = out + min(input.size(), output.size());
|
||||||
|
|
@ -724,7 +724,7 @@ namespace _internals {
|
||||||
template <class T, bool SIMD = SIMDConfig::copy>
|
template <class T, bool SIMD = SIMDConfig::copy>
|
||||||
void copy(absl::Span<const T> input, absl::Span<T> output) noexcept
|
void copy(absl::Span<const T> input, absl::Span<T> output) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(output.size() >= input.size());
|
CHECK(output.size() >= input.size());
|
||||||
if (output.data() == input.data() && output.size() == input.size())
|
if (output.data() == input.data() && output.size() == input.size())
|
||||||
return;
|
return;
|
||||||
auto* in = input.begin();
|
auto* in = input.begin();
|
||||||
|
|
@ -801,8 +801,8 @@ namespace _internals {
|
||||||
template <class T, bool SIMD = SIMDConfig::pan>
|
template <class T, bool SIMD = SIMDConfig::pan>
|
||||||
void pan(absl::Span<const T> panEnvelope, absl::Span<T> leftBuffer, absl::Span<T> rightBuffer) noexcept
|
void pan(absl::Span<const T> panEnvelope, absl::Span<T> leftBuffer, absl::Span<T> rightBuffer) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(leftBuffer.size() >= panEnvelope.size());
|
CHECK(leftBuffer.size() >= panEnvelope.size());
|
||||||
ASSERT(rightBuffer.size() >= panEnvelope.size());
|
CHECK(rightBuffer.size() >= panEnvelope.size());
|
||||||
auto* pan = panEnvelope.begin();
|
auto* pan = panEnvelope.begin();
|
||||||
auto* left = leftBuffer.begin();
|
auto* left = leftBuffer.begin();
|
||||||
auto* right = rightBuffer.begin();
|
auto* right = rightBuffer.begin();
|
||||||
|
|
@ -831,8 +831,8 @@ void pan<float, true>(absl::Span<const float> panEnvelope, absl::Span<float> lef
|
||||||
template <class T, bool SIMD = SIMDConfig::pan>
|
template <class T, bool SIMD = SIMDConfig::pan>
|
||||||
void width(absl::Span<const T> widthEnvelope, absl::Span<T> leftBuffer, absl::Span<T> rightBuffer) noexcept
|
void width(absl::Span<const T> widthEnvelope, absl::Span<T> leftBuffer, absl::Span<T> rightBuffer) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(leftBuffer.size() >= widthEnvelope.size());
|
CHECK(leftBuffer.size() >= widthEnvelope.size());
|
||||||
ASSERT(rightBuffer.size() >= widthEnvelope.size());
|
CHECK(rightBuffer.size() >= widthEnvelope.size());
|
||||||
auto* width = widthEnvelope.begin();
|
auto* width = widthEnvelope.begin();
|
||||||
auto* left = leftBuffer.begin();
|
auto* left = leftBuffer.begin();
|
||||||
auto* right = rightBuffer.begin();
|
auto* right = rightBuffer.begin();
|
||||||
|
|
@ -921,7 +921,7 @@ namespace _internals {
|
||||||
template <class T, bool SIMD = SIMDConfig::cumsum>
|
template <class T, bool SIMD = SIMDConfig::cumsum>
|
||||||
void cumsum(absl::Span<const T> input, absl::Span<T> output) noexcept
|
void cumsum(absl::Span<const T> input, absl::Span<T> output) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(output.size() >= input.size());
|
CHECK(output.size() >= input.size());
|
||||||
if (input.size() == 0)
|
if (input.size() == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
@ -962,9 +962,9 @@ namespace _internals {
|
||||||
template <class T, bool SIMD = SIMDConfig::sfzInterpolationCast>
|
template <class T, bool SIMD = SIMDConfig::sfzInterpolationCast>
|
||||||
void sfzInterpolationCast(absl::Span<const T> floatJumps, absl::Span<int> jumps, absl::Span<T> leftCoeffs, absl::Span<T> rightCoeffs) noexcept
|
void sfzInterpolationCast(absl::Span<const T> floatJumps, absl::Span<int> jumps, absl::Span<T> leftCoeffs, absl::Span<T> rightCoeffs) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(jumps.size() >= floatJumps.size());
|
CHECK(jumps.size() >= floatJumps.size());
|
||||||
ASSERT(jumps.size() == leftCoeffs.size());
|
CHECK(jumps.size() == leftCoeffs.size());
|
||||||
ASSERT(jumps.size() == rightCoeffs.size());
|
CHECK(jumps.size() == rightCoeffs.size());
|
||||||
|
|
||||||
auto floatJump = floatJumps.data();
|
auto floatJump = floatJumps.data();
|
||||||
auto jump = jumps.data();
|
auto jump = jumps.data();
|
||||||
|
|
@ -1003,7 +1003,7 @@ namespace _internals {
|
||||||
template <class T, bool SIMD = SIMDConfig::diff>
|
template <class T, bool SIMD = SIMDConfig::diff>
|
||||||
void diff(absl::Span<const T> input, absl::Span<T> output) noexcept
|
void diff(absl::Span<const T> input, absl::Span<T> output) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(output.size() >= input.size());
|
CHECK(output.size() >= input.size());
|
||||||
if (input.size() == 0)
|
if (input.size() == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -50,10 +50,10 @@ template <>
|
||||||
void sfz::readInterleaved<float, true>(absl::Span<const float> input, absl::Span<float> outputLeft, absl::Span<float> outputRight) noexcept
|
void sfz::readInterleaved<float, true>(absl::Span<const float> input, absl::Span<float> outputLeft, absl::Span<float> outputRight) noexcept
|
||||||
{
|
{
|
||||||
// The size of the outputs is not big enough for the input...
|
// The size of the outputs is not big enough for the input...
|
||||||
ASSERT(outputLeft.size() >= input.size() / 2);
|
CHECK(outputLeft.size() >= input.size() / 2);
|
||||||
ASSERT(outputRight.size() >= input.size() / 2);
|
CHECK(outputRight.size() >= input.size() / 2);
|
||||||
// Input is too small
|
// Input is too small
|
||||||
ASSERT(input.size() > 1);
|
CHECK(input.size() > 1);
|
||||||
|
|
||||||
auto* in = input.begin();
|
auto* in = input.begin();
|
||||||
auto* lOut = outputLeft.begin();
|
auto* lOut = outputLeft.begin();
|
||||||
|
|
@ -90,8 +90,8 @@ template <>
|
||||||
void sfz::writeInterleaved<float, true>(absl::Span<const float> inputLeft, absl::Span<const float> inputRight, absl::Span<float> output) noexcept
|
void sfz::writeInterleaved<float, true>(absl::Span<const float> inputLeft, absl::Span<const float> inputRight, absl::Span<float> output) noexcept
|
||||||
{
|
{
|
||||||
// The size of the output is not big enough for the inputs...
|
// The size of the output is not big enough for the inputs...
|
||||||
ASSERT(inputLeft.size() <= output.size() / 2);
|
CHECK(inputLeft.size() <= output.size() / 2);
|
||||||
ASSERT(inputRight.size() <= output.size() / 2);
|
CHECK(inputRight.size() <= output.size() / 2);
|
||||||
|
|
||||||
auto* lIn = inputLeft.begin();
|
auto* lIn = inputLeft.begin();
|
||||||
auto* rIn = inputRight.begin();
|
auto* rIn = inputRight.begin();
|
||||||
|
|
@ -146,7 +146,7 @@ void sfz::fill<float, true>(absl::Span<float> output, float value) noexcept
|
||||||
template <>
|
template <>
|
||||||
void sfz::exp<float, true>(absl::Span<const float> input, absl::Span<float> output) noexcept
|
void sfz::exp<float, true>(absl::Span<const float> input, absl::Span<float> output) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(output.size() >= input.size());
|
CHECK(output.size() >= input.size());
|
||||||
auto* in = input.begin();
|
auto* in = input.begin();
|
||||||
auto* out = output.begin();
|
auto* out = output.begin();
|
||||||
auto* sentinel = in + std::min(input.size(), output.size());
|
auto* sentinel = in + std::min(input.size(), output.size());
|
||||||
|
|
@ -167,7 +167,7 @@ void sfz::exp<float, true>(absl::Span<const float> input, absl::Span<float> outp
|
||||||
template <>
|
template <>
|
||||||
void sfz::cos<float, true>(absl::Span<const float> input, absl::Span<float> output) noexcept
|
void sfz::cos<float, true>(absl::Span<const float> input, absl::Span<float> output) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(output.size() >= input.size());
|
CHECK(output.size() >= input.size());
|
||||||
auto* in = input.begin();
|
auto* in = input.begin();
|
||||||
auto* out = output.begin();
|
auto* out = output.begin();
|
||||||
auto* sentinel = in + std::min(input.size(), output.size());
|
auto* sentinel = in + std::min(input.size(), output.size());
|
||||||
|
|
@ -188,7 +188,7 @@ void sfz::cos<float, true>(absl::Span<const float> input, absl::Span<float> outp
|
||||||
template <>
|
template <>
|
||||||
void sfz::log<float, true>(absl::Span<const float> input, absl::Span<float> output) noexcept
|
void sfz::log<float, true>(absl::Span<const float> input, absl::Span<float> output) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(output.size() >= input.size());
|
CHECK(output.size() >= input.size());
|
||||||
auto* in = input.begin();
|
auto* in = input.begin();
|
||||||
auto* out = output.begin();
|
auto* out = output.begin();
|
||||||
auto* sentinel = in + std::min(input.size(), output.size());
|
auto* sentinel = in + std::min(input.size(), output.size());
|
||||||
|
|
@ -209,7 +209,7 @@ void sfz::log<float, true>(absl::Span<const float> input, absl::Span<float> outp
|
||||||
template <>
|
template <>
|
||||||
void sfz::sin<float, true>(absl::Span<const float> input, absl::Span<float> output) noexcept
|
void sfz::sin<float, true>(absl::Span<const float> input, absl::Span<float> output) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(output.size() >= input.size());
|
CHECK(output.size() >= input.size());
|
||||||
auto* in = input.begin();
|
auto* in = input.begin();
|
||||||
auto* out = output.begin();
|
auto* out = output.begin();
|
||||||
auto* sentinel = in + std::min(input.size(), output.size());
|
auto* sentinel = in + std::min(input.size(), output.size());
|
||||||
|
|
@ -347,9 +347,9 @@ float sfz::loopingSFZIndex<float, true>(absl::Span<const float> jumps,
|
||||||
float loopEnd,
|
float loopEnd,
|
||||||
float loopStart) noexcept
|
float loopStart) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(indices.size() >= jumps.size());
|
CHECK(indices.size() >= jumps.size());
|
||||||
ASSERT(indices.size() == leftCoeffs.size());
|
CHECK(indices.size() == leftCoeffs.size());
|
||||||
ASSERT(indices.size() == rightCoeffs.size());
|
CHECK(indices.size() == rightCoeffs.size());
|
||||||
|
|
||||||
auto index = indices.data();
|
auto index = indices.data();
|
||||||
auto leftCoeff = leftCoeffs.data();
|
auto leftCoeff = leftCoeffs.data();
|
||||||
|
|
@ -405,9 +405,9 @@ float sfz::saturatingSFZIndex<float, true>(absl::Span<const float> jumps,
|
||||||
float floatIndex,
|
float floatIndex,
|
||||||
float loopEnd) noexcept
|
float loopEnd) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(indices.size() >= jumps.size());
|
CHECK(indices.size() >= jumps.size());
|
||||||
ASSERT(indices.size() == leftCoeffs.size());
|
CHECK(indices.size() == leftCoeffs.size());
|
||||||
ASSERT(indices.size() == rightCoeffs.size());
|
CHECK(indices.size() == rightCoeffs.size());
|
||||||
|
|
||||||
auto index = indices.data();
|
auto index = indices.data();
|
||||||
auto leftCoeff = leftCoeffs.data();
|
auto leftCoeff = leftCoeffs.data();
|
||||||
|
|
@ -506,7 +506,7 @@ float sfz::multiplicativeRamp<float, true>(absl::Span<float> output, float value
|
||||||
template <>
|
template <>
|
||||||
void sfz::add<float, true>(absl::Span<const float> input, absl::Span<float> output) noexcept
|
void sfz::add<float, true>(absl::Span<const float> input, absl::Span<float> output) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(output.size() >= input.size());
|
CHECK(output.size() >= input.size());
|
||||||
auto* in = input.begin();
|
auto* in = input.begin();
|
||||||
auto* out = output.begin();
|
auto* out = output.begin();
|
||||||
auto* sentinel = out + min(input.size(), output.size());
|
auto* sentinel = out + min(input.size(), output.size());
|
||||||
|
|
@ -547,7 +547,7 @@ void sfz::add<float, true>(float value, absl::Span<float> output) noexcept
|
||||||
template <>
|
template <>
|
||||||
void sfz::subtract<float, true>(absl::Span<const float> input, absl::Span<float> output) noexcept
|
void sfz::subtract<float, true>(absl::Span<const float> input, absl::Span<float> output) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(output.size() >= input.size());
|
CHECK(output.size() >= input.size());
|
||||||
auto* in = input.begin();
|
auto* in = input.begin();
|
||||||
auto* out = output.begin();
|
auto* out = output.begin();
|
||||||
auto* sentinel = out + min(input.size(), output.size());
|
auto* sentinel = out + min(input.size(), output.size());
|
||||||
|
|
@ -588,7 +588,7 @@ void sfz::subtract<float, true>(const float value, absl::Span<float> output) noe
|
||||||
template <>
|
template <>
|
||||||
void sfz::copy<float, true>(absl::Span<const float> input, absl::Span<float> output) noexcept
|
void sfz::copy<float, true>(absl::Span<const float> input, absl::Span<float> output) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(output.size() >= input.size());
|
CHECK(output.size() >= input.size());
|
||||||
auto* in = input.begin();
|
auto* in = input.begin();
|
||||||
auto* out = output.begin();
|
auto* out = output.begin();
|
||||||
auto* sentinel = out + min(input.size(), output.size());
|
auto* sentinel = out + min(input.size(), output.size());
|
||||||
|
|
@ -609,8 +609,8 @@ void sfz::copy<float, true>(absl::Span<const float> input, absl::Span<float> out
|
||||||
template <>
|
template <>
|
||||||
void sfz::pan<float, true>(absl::Span<const float> panEnvelope, absl::Span<float> leftBuffer, absl::Span<float> rightBuffer) noexcept
|
void sfz::pan<float, true>(absl::Span<const float> panEnvelope, absl::Span<float> leftBuffer, absl::Span<float> rightBuffer) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(leftBuffer.size() >= panEnvelope.size());
|
CHECK(leftBuffer.size() >= panEnvelope.size());
|
||||||
ASSERT(rightBuffer.size() >= panEnvelope.size());
|
CHECK(rightBuffer.size() >= panEnvelope.size());
|
||||||
auto* pan = panEnvelope.begin();
|
auto* pan = panEnvelope.begin();
|
||||||
auto* left = leftBuffer.begin();
|
auto* left = leftBuffer.begin();
|
||||||
auto* right = rightBuffer.begin();
|
auto* right = rightBuffer.begin();
|
||||||
|
|
@ -647,8 +647,8 @@ void sfz::pan<float, true>(absl::Span<const float> panEnvelope, absl::Span<float
|
||||||
template <>
|
template <>
|
||||||
void sfz::width<float, true>(absl::Span<const float> widthEnvelope, absl::Span<float> leftBuffer, absl::Span<float> rightBuffer) noexcept
|
void sfz::width<float, true>(absl::Span<const float> widthEnvelope, absl::Span<float> leftBuffer, absl::Span<float> rightBuffer) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(leftBuffer.size() >= widthEnvelope.size());
|
CHECK(leftBuffer.size() >= widthEnvelope.size());
|
||||||
ASSERT(rightBuffer.size() >= widthEnvelope.size());
|
CHECK(rightBuffer.size() >= widthEnvelope.size());
|
||||||
auto* width = widthEnvelope.begin();
|
auto* width = widthEnvelope.begin();
|
||||||
auto* left = leftBuffer.begin();
|
auto* left = leftBuffer.begin();
|
||||||
auto* right = rightBuffer.begin();
|
auto* right = rightBuffer.begin();
|
||||||
|
|
@ -757,7 +757,7 @@ float sfz::meanSquared<float, true>(absl::Span<const float> vector) noexcept
|
||||||
template <>
|
template <>
|
||||||
void sfz::cumsum<float, true>(absl::Span<const float> input, absl::Span<float> output) noexcept
|
void sfz::cumsum<float, true>(absl::Span<const float> input, absl::Span<float> output) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(output.size() >= input.size());
|
CHECK(output.size() >= input.size());
|
||||||
if (input.size() == 0)
|
if (input.size() == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
@ -789,9 +789,9 @@ template <>
|
||||||
void sfz::sfzInterpolationCast<float, true>(absl::Span<const float> floatJumps, absl::Span<int> jumps, absl::Span<float> leftCoeffs, absl::Span<float> rightCoeffs) noexcept
|
void sfz::sfzInterpolationCast<float, true>(absl::Span<const float> floatJumps, absl::Span<int> jumps, absl::Span<float> leftCoeffs, absl::Span<float> rightCoeffs) noexcept
|
||||||
{
|
{
|
||||||
sfz::sfzInterpolationCast<float, false>(floatJumps, jumps, leftCoeffs, rightCoeffs);
|
sfz::sfzInterpolationCast<float, false>(floatJumps, jumps, leftCoeffs, rightCoeffs);
|
||||||
// ASSERT(jumps.size() >= floatJumps.size());
|
// CHECK(jumps.size() >= floatJumps.size());
|
||||||
// ASSERT(jumps.size() == leftCoeffs.size());
|
// CHECK(jumps.size() == leftCoeffs.size());
|
||||||
// ASSERT(jumps.size() == rightCoeffs.size());
|
// CHECK(jumps.size() == rightCoeffs.size());
|
||||||
|
|
||||||
// auto floatJump = floatJumps.data();
|
// auto floatJump = floatJumps.data();
|
||||||
// auto jump = jumps.data();
|
// auto jump = jumps.data();
|
||||||
|
|
@ -822,7 +822,7 @@ void sfz::sfzInterpolationCast<float, true>(absl::Span<const float> floatJumps,
|
||||||
template <>
|
template <>
|
||||||
void sfz::diff<float, true>(absl::Span<const float> input, absl::Span<float> output) noexcept
|
void sfz::diff<float, true>(absl::Span<const float> input, absl::Span<float> output) noexcept
|
||||||
{
|
{
|
||||||
ASSERT(output.size() >= input.size());
|
CHECK(output.size() >= input.size());
|
||||||
if (input.size() == 0)
|
if (input.size() == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -724,12 +724,10 @@ void sfz::Synth::renderBlock(AudioSpan<float> buffer) noexcept
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
ASSERT(!hasNanInf(buffer.getConstSpan(0)));
|
ASSERT(!hasNanInf(buffer.getConstSpan(0)));
|
||||||
ASSERT(!hasNanInf(buffer.getConstSpan(1)));
|
ASSERT(!hasNanInf(buffer.getConstSpan(1)));
|
||||||
ASSERT(isValidAudio(buffer.getConstSpan(0)));
|
CHECK(isReasonableAudio(buffer.getConstSpan(0)));
|
||||||
ASSERT(isValidAudio(buffer.getConstSpan(1)));
|
CHECK(isReasonableAudio(buffer.getConstSpan(1)));
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void sfz::Synth::noteOn(int delay, int noteNumber, uint8_t velocity) noexcept
|
void sfz::Synth::noteOn(int delay, int noteNumber, uint8_t velocity) noexcept
|
||||||
|
|
|
||||||
|
|
@ -250,8 +250,8 @@ void sfz::Voice::renderBlock(AudioSpan<float> buffer) noexcept
|
||||||
#if 0
|
#if 0
|
||||||
ASSERT(!hasNanInf(buffer.getConstSpan(0)));
|
ASSERT(!hasNanInf(buffer.getConstSpan(0)));
|
||||||
ASSERT(!hasNanInf(buffer.getConstSpan(1)));
|
ASSERT(!hasNanInf(buffer.getConstSpan(1)));
|
||||||
ASSERT(isValidAudio(buffer.getConstSpan(0)));
|
CHECK(isReasonableAudio(buffer.getConstSpan(0)));
|
||||||
ASSERT(isValidAudio(buffer.getConstSpan(1)));
|
CHECK(isReasonableAudio(buffer.getConstSpan(1)));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -529,8 +529,8 @@ void sfz::Voice::fillWithData(AudioSpan<float> buffer) noexcept
|
||||||
#if 0
|
#if 0
|
||||||
ASSERT(!hasNanInf(buffer.getConstSpan(0)));
|
ASSERT(!hasNanInf(buffer.getConstSpan(0)));
|
||||||
ASSERT(!hasNanInf(buffer.getConstSpan(1)));
|
ASSERT(!hasNanInf(buffer.getConstSpan(1)));
|
||||||
ASSERT(isValidAudio(buffer.getConstSpan(0)));
|
CHECK(isReasonableAudio(buffer.getConstSpan(0)));
|
||||||
ASSERT(isValidAudio(buffer.getConstSpan(1)));
|
CHECK(isReasonableAudio(buffer.getConstSpan(1)));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -595,8 +595,8 @@ void sfz::Voice::fillWithGenerator(AudioSpan<float> buffer) noexcept
|
||||||
#if 0
|
#if 0
|
||||||
ASSERT(!hasNanInf(buffer.getConstSpan(0)));
|
ASSERT(!hasNanInf(buffer.getConstSpan(0)));
|
||||||
ASSERT(!hasNanInf(buffer.getConstSpan(1)));
|
ASSERT(!hasNanInf(buffer.getConstSpan(1)));
|
||||||
ASSERT(isValidAudio(buffer.getConstSpan(0)));
|
CHECK(isReasonableAudio(buffer.getConstSpan(0)));
|
||||||
ASSERT(isValidAudio(buffer.getConstSpan(1)));
|
CHECK(isReasonableAudio(buffer.getConstSpan(1)));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue