53inline constexpr int32_t Q23_MAX = 8388607;
54inline constexpr int32_t Q23_MIN = -8388608;
55inline constexpr float Q23_ABSMAX = 8388608.0f;
58constexpr void floatToQ23 (
const float src[], int32_t dest[],
const uint32_t blockSize)
60#if defined(__GNUC__) && (__GNUC__ >= 8)
63 for (uint32_t i = 0; i < blockSize; ++i)
65 dest[i] = std::clamp (
static_cast<int32_t
> (src[i] * Q23_MAX), Q23_MIN, Q23_MAX);
69constexpr void q23ToFloat (
const int32_t src[],
float dest[],
const uint32_t blockSize)
71#if defined(__GNUC__) && (__GNUC__ >= 8)
74 for (uint32_t i = 0; i < blockSize; ++i)
76 dest[i] =
static_cast<float> (src[i]) / Q23_ABSMAX;
86constexpr void interleaveSamples (
const float** source,
float* dest,
const uint_fast32_t numSamples,
const uint_fast32_t numChannels)
88 for (uint_fast32_t chan = 0; chan < numChannels; ++chan)
91 const auto* src = source[chan];
93 for (uint_fast32_t j = 0; j < numSamples; ++j)
107inline void deinterleaveSamples (
const float* source,
float** dest,
const uint_fast32_t numSamples,
const uint_fast32_t numChannels)
109 for (uint_fast32_t chan = 0; chan < numChannels; ++chan)
111 uint_fast32_t i = chan;
113 for (uint_fast32_t k = 0; k < numSamples; ++k)
115 dest[chan][k] = source[i];
134 return std::pow (2.0f, semitone / 12.0f);
141constexpr float freqToPeriod (
const float freq)
noexcept {
return 1.0f / freq; }
147constexpr float periodToFreq (
const float period)
noexcept {
return 1.0f / period; }
154inline float freqToMidi (
const float freq,
const float A3Freq = 440.0f)
156 return 12.0f * std::log2f (freq / A3Freq) + 69.0f;
164inline float midiToFreq (
const float midiNote,
const float A3Freq = 440.0f)
166 return A3Freq * std::pow (2.0f, (midiNote - 69.0f) / 12.0f);
176inline std::pair<float, float>
cartopol (
const float real,
const float imag)
178 const float amplitude = std::sqrt (real * real + imag * imag);
179 const float angle = std::atan2 (imag, real);
180 return { amplitude, angle };
190inline std::pair<float, float>
poltocar (
const float amplitude,
const float angle)
192 const float real = amplitude * cosf (angle);
193 const float imag = amplitude * sinf (angle);
194 return { real, imag };
207constexpr float bpmToMs (
float bpm) {
return 60000.0f / bpm; }
216constexpr float msToBpm (
float ms) {
return 60000.0f / ms; }
232 ? std::pow (10.0f, dB * 0.05f)
247 return gain > 0.00001f
248 ? std::log10 (gain) * 20.0f
258template <std::
floating_po
int FloatType>
259constexpr FloatType
deg2rad (FloatType degree)
noexcept
261 return degree * (ame::pi<FloatType> /
static_cast<FloatType
> (180.0));
269template <std::
floating_po
int FloatType>
270constexpr FloatType
rad2deg (FloatType radian)
noexcept
272 return radian * (
static_cast<FloatType
> (180.0) / ame::pi<FloatType>);
std::pair< float, float > poltocar(const float amplitude, const float angle)
極座表→直交座長変換.
Definition: ame_Conversion.hpp:190
constexpr float bpmToMs(float bpm)
Convert BPM to ms.
Definition: ame_Conversion.hpp:207
constexpr float msToBpm(float ms)
Convert ms to BPM.
Definition: ame_Conversion.hpp:216
constexpr void interleaveSamples(const float **source, float *dest, const uint_fast32_t numSamples, const uint_fast32_t numChannels)
Split channel→Interleave conversion.
Definition: ame_Conversion.hpp:86
constexpr FloatType rad2deg(FloatType radian) noexcept
Radian to Degree.
Definition: ame_Conversion.hpp:270
void deinterleaveSamples(const float *source, float **dest, const uint_fast32_t numSamples, const uint_fast32_t numChannels)
Interleave→Split channel conversion.
Definition: ame_Conversion.hpp:107
constexpr float gainToDecibels(const float gain) noexcept
Convert a gain level into a dBFS value.
Definition: ame_Conversion.hpp:245
float midiToFreq(const float midiNote, const float A3Freq=440.0f)
Convert MIDI note number to frequency.
Definition: ame_Conversion.hpp:164
NoteValue
Enum that associates note values with MIDI ticks.
Definition: ame_Conversion.hpp:24
float freqToMidi(const float freq, const float A3Freq=440.0f)
Convert frequency to MIDI note number.
Definition: ame_Conversion.hpp:154
float semitoneToRatio(const float semitone)
Convert semitones to frequency ratio.
Definition: ame_Conversion.hpp:132
constexpr float freqToPeriod(const float freq) noexcept
Convert frequency to period.
Definition: ame_Conversion.hpp:141
std::pair< float, float > cartopol(const float real, const float imag)
直交座標→極座標変換.
Definition: ame_Conversion.hpp:176
constexpr float periodToFreq(const float period) noexcept
Convert period to frequency.
Definition: ame_Conversion.hpp:147
constexpr FloatType deg2rad(FloatType degree) noexcept
Degree to Radians.
Definition: ame_Conversion.hpp:259
constexpr float decibelsToGain(const float dB) noexcept
Convert a dBFS value to to its equivalent gain level.
Definition: ame_Conversion.hpp:229