Moved the content of Curve.hpp into Curve.h
This commit is contained in:
parent
784d1a3971
commit
c572bebb18
3 changed files with 39 additions and 51 deletions
|
|
@ -6,6 +6,8 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "absl/types/span.h"
|
#include "absl/types/span.h"
|
||||||
|
#include "MathHelpers.h"
|
||||||
|
#include "SfzHelpers.h"
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
@ -22,17 +24,29 @@ public:
|
||||||
/**
|
/**
|
||||||
* @brief Compute the curve for integral x in domain [0:127]
|
* @brief Compute the curve for integral x in domain [0:127]
|
||||||
*/
|
*/
|
||||||
float evalCC7(int value7) const;
|
float evalCC7(int value7) const
|
||||||
|
{
|
||||||
|
return _points[clamp(value7, 0, 127)];
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* @brief Compute the curve for real x in domain [0:127]
|
* @brief Compute the curve for real x in domain [0:127]
|
||||||
*/
|
*/
|
||||||
float evalCC7(float value7) const;
|
float evalCC7(float value7) const
|
||||||
|
{
|
||||||
|
value7 = clamp(value7, 0.0f, 127.0f);
|
||||||
|
int i1 = static_cast<int>(value7);
|
||||||
|
int i2 = std::min(127, i1 + 1);
|
||||||
|
float mu = value7 - i1;
|
||||||
|
return _points[i1] + mu * (_points[i2] - _points[i1]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Compute the curve for real x in domain [0:1]
|
* @brief Compute the curve for real x in domain [0:1]
|
||||||
*/
|
*/
|
||||||
float evalNormalized(float value) const;
|
float evalNormalized(float value) const
|
||||||
|
{
|
||||||
|
return evalCC7(denormalize7Bits<int>(value));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Kind of curve interpolator
|
* @brief Kind of curve interpolator
|
||||||
|
|
@ -118,7 +132,10 @@ public:
|
||||||
/**
|
/**
|
||||||
* @brief Get the number of slots.
|
* @brief Get the number of slots.
|
||||||
*/
|
*/
|
||||||
unsigned getNumCurves() const;
|
unsigned getNumCurves() const
|
||||||
|
{
|
||||||
|
return static_cast<unsigned>(_curves.size());
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<std::unique_ptr<Curve>> _curves;
|
std::vector<std::unique_ptr<Curve>> _curves;
|
||||||
|
|
@ -126,5 +143,3 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace sfz
|
} // namespace sfz
|
||||||
|
|
||||||
#include "Curve.hpp"
|
|
||||||
|
|
|
||||||
|
|
@ -1,39 +0,0 @@
|
||||||
// SPDX-License-Identifier: BSD-2-Clause
|
|
||||||
|
|
||||||
// This code is part of the sfizz library and is licensed under a BSD 2-clause
|
|
||||||
// license. You should have receive a LICENSE.md file along with the code.
|
|
||||||
// If not, contact the sfizz maintainers at https://github.com/sfztools/sfizz
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
#include "Curve.h"
|
|
||||||
#include "MathHelpers.h"
|
|
||||||
|
|
||||||
namespace sfz
|
|
||||||
{
|
|
||||||
|
|
||||||
inline float Curve::evalCC7(int value7) const
|
|
||||||
{
|
|
||||||
return _points[clamp(value7, 0, 127)];
|
|
||||||
}
|
|
||||||
|
|
||||||
inline float Curve::evalCC7(float value7) const
|
|
||||||
{
|
|
||||||
value7 = clamp(value7, 0.0f, 127.0f);
|
|
||||||
int i1 = static_cast<int>(value7);
|
|
||||||
int i2 = std::min(127, i1 + 1);
|
|
||||||
float mu = value7 - i1;
|
|
||||||
return _points[i1] + mu * (_points[i2] - _points[i1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline float Curve::evalNormalized(float value) const
|
|
||||||
{
|
|
||||||
return evalCC7(127 * value);
|
|
||||||
}
|
|
||||||
|
|
||||||
///
|
|
||||||
inline unsigned CurveSet::getNumCurves() const
|
|
||||||
{
|
|
||||||
return static_cast<unsigned>(_curves.size());
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace sfz
|
|
||||||
|
|
@ -13,6 +13,7 @@
|
||||||
#include "Macros.h"
|
#include "Macros.h"
|
||||||
#include "Config.h"
|
#include "Config.h"
|
||||||
#include "MathHelpers.h"
|
#include "MathHelpers.h"
|
||||||
|
#include "absl/meta/type_traits.h"
|
||||||
|
|
||||||
namespace sfz
|
namespace sfz
|
||||||
{
|
{
|
||||||
|
|
@ -76,8 +77,20 @@ constexpr float centsFactor(T cents, T centsPerOctave = 1200)
|
||||||
return std::pow(2.0f, static_cast<float>(cents) / centsPerOctave);
|
return std::pow(2.0f, static_cast<float>(cents) / centsPerOctave);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<class T, absl::enable_if_t<std::is_integral<T>::value, int> = 0>
|
||||||
|
constexpr T denormalize7Bits(float value)
|
||||||
|
{
|
||||||
|
return static_cast<T>(value * 127.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
constexpr float normalize7Bits(T value)
|
||||||
|
{
|
||||||
|
return static_cast<float>(min(max(value, T{ 0 }), T{ 127 })) / 127.0f;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Normalize a CC value between (T)0.0 and (T)1.0
|
* @brief Normalize a CC value between 0.0 and 1.0
|
||||||
*
|
*
|
||||||
* @tparam T
|
* @tparam T
|
||||||
* @param ccValue
|
* @param ccValue
|
||||||
|
|
@ -86,12 +99,11 @@ constexpr float centsFactor(T cents, T centsPerOctave = 1200)
|
||||||
template<class T>
|
template<class T>
|
||||||
constexpr float normalizeCC(T ccValue)
|
constexpr float normalizeCC(T ccValue)
|
||||||
{
|
{
|
||||||
static_assert(std::is_integral<T>::value, "Requires an integral T");
|
return normalize7Bits(ccValue);
|
||||||
return static_cast<float>(min(max(ccValue, static_cast<T>(0)), static_cast<T>(127))) / 127.0f;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Normalize a velocity between (T)0.0 and (T)1.0
|
* @brief Normalize a velocity between 0.0 and 1.0
|
||||||
*
|
*
|
||||||
* @tparam T
|
* @tparam T
|
||||||
* @param ccValue
|
* @param ccValue
|
||||||
|
|
@ -100,7 +112,7 @@ constexpr float normalizeCC(T ccValue)
|
||||||
template<class T>
|
template<class T>
|
||||||
constexpr float normalizeVelocity(T velocity)
|
constexpr float normalizeVelocity(T velocity)
|
||||||
{
|
{
|
||||||
return normalizeCC(velocity);
|
return normalize7Bits(velocity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue