AME
ame_Conversion.hpp File Reference

Audio friendly conversion functions. More...

#include "ame_Math.hpp"
#include <algorithm>
#include <cmath>
#include <concepts>
Include dependency graph for ame_Conversion.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Enumerations

enum class  ame::NoteValue {
  N1_DOT = 2880 , N1 = 1920 , N1_TRIPLET = 1280 , N2_DOT = 1440 ,
  N2 = 960 , N2_TRIPLET = 640 , N4_DOT = 720 , N4 = 480 ,
  N4_TRIPLET = 320 , N8_DOT = 360 , N8 = 240 , N8_TRIPLET = 160 ,
  N16_DOT = 180 , N16 = 120 , N16_TRIPLET = 80 , N32_DOT = 90 ,
  N32 = 60 , N32_TRIPLET = 40 , N64_DOT = 45 , N64 = 30 ,
  N64_TRIPLET = 20 , N128 = 15 , N128_TRIPLET = 10
}
 Enum that associates note values with MIDI ticks. More...
 

Functions

constexpr void ame::floatToQ23 (const float src[], int32_t dest[], const uint32_t blockSize)
 
constexpr void ame::q23ToFloat (const int32_t src[], float dest[], const uint32_t blockSize)
 
constexpr void ame::interleaveSamples (const float **source, float *dest, const uint_fast32_t numSamples, const uint_fast32_t numChannels)
 Split channel→Interleave conversion. More...
 
void ame::deinterleaveSamples (const float *source, float **dest, const uint_fast32_t numSamples, const uint_fast32_t numChannels)
 Interleave→Split channel conversion. More...
 
float ame::semitoneToRatio (const float semitone)
 Convert semitones to frequency ratio. More...
 
constexpr float ame::freqToPeriod (const float freq) noexcept
 Convert frequency to period. More...
 
constexpr float ame::periodToFreq (const float period) noexcept
 Convert period to frequency. More...
 
float ame::freqToMidi (const float freq, const float A3Freq=440.0f)
 Convert frequency to MIDI note number. More...
 
float ame::midiToFreq (const float midiNote, const float A3Freq=440.0f)
 Convert MIDI note number to frequency. More...
 
std::pair< float, float > ame::cartopol (const float real, const float imag)
 直交座標→極座標変換. More...
 
std::pair< float, float > ame::poltocar (const float amplitude, const float angle)
 極座表→直交座長変換. More...
 
constexpr float ame::bpmToMs (float bpm)
 Convert BPM to ms. More...
 
constexpr float ame::msToBpm (float ms)
 Convert ms to BPM. More...
 
constexpr float ame::decibelsToGain (const float dB) noexcept
 Convert a dBFS value to to its equivalent gain level. More...
 
constexpr float ame::gainToDecibels (const float gain) noexcept
 Convert a gain level into a dBFS value. More...
 
template<std::floating_point FloatType>
constexpr FloatType ame::deg2rad (FloatType degree) noexcept
 Degree to Radians. More...
 
template<std::floating_point FloatType>
constexpr FloatType ame::rad2deg (FloatType radian) noexcept
 Radian to Degree. More...
 

Variables

constexpr int32_t ame::Q23_MAX = 8388607
 
constexpr int32_t ame::Q23_MIN = -8388608
 
constexpr float ame::Q23_ABSMAX = 8388608.0f
 

Detailed Description

Audio friendly conversion functions.

Author
Akiyuki Okayasu (akiyu.nosp@m.ki.o.nosp@m.kayas.nosp@m.u@gm.nosp@m.ail.c.nosp@m.om)

AME is released under the MIT license.

Enumeration Type Documentation

◆ NoteValue

enum class ame::NoteValue
strong

Enum that associates note values with MIDI ticks.

Note
4n = 480 tick
Enumerator
N4 

4n = 480 tick

Function Documentation

◆ bpmToMs()

constexpr float ame::bpmToMs ( float  bpm)
constexpr

Convert BPM to ms.


Parameters
bpm
Returns
ms
bpmToMs(120.0f); // 500ms
constexpr float bpmToMs(float bpm)
Convert BPM to ms.
Definition: ame_Conversion.hpp:207

◆ cartopol()

std::pair< float, float > ame::cartopol ( const float  real,
const float  imag 
)
inline

直交座標→極座標変換.


Parameters
real実部
imag虚部
Returns
amplitude, angle
Note
Max/MSPのcartopolと同じ
See also
poltocar()

◆ decibelsToGain()

constexpr float ame::decibelsToGain ( const float  dB)
constexprnoexcept

Convert a dBFS value to to its equivalent gain level.

Parameters
dBdecibels value
Returns
amplitude [0, 1]
Note
Outputs 0 if the input is less than -100dB.
decibelsToGain (0.0f); // 1.0f
decibelsToGain (-20.0f); // 0.1f
constexpr float decibelsToGain(const float dB) noexcept
Convert a dBFS value to to its equivalent gain level.
Definition: ame_Conversion.hpp:229

◆ deg2rad()

template<std::floating_point FloatType>
constexpr FloatType ame::deg2rad ( FloatType  degree)
constexprnoexcept

Degree to Radians.

Template Parameters
FloatTypefloat or double
Parameters
degree
Returns
constexpr FloatType Radian

◆ deinterleaveSamples()

void ame::deinterleaveSamples ( const float *  source,
float **  dest,
const uint_fast32_t  numSamples,
const uint_fast32_t  numChannels 
)
inline

Interleave→Split channel conversion.

Parameters
sourceInterleave samples
destSplit channel array
numSamples
numChannels

◆ freqToMidi()

float ame::freqToMidi ( const float  freq,
const float  A3Freq = 440.0f 
)
inline

Convert frequency to MIDI note number.

Parameters
frequency
A3FreqFrequency for A3 (MIDI note 69). 440Hz is default.
Returns
MIDI note

◆ freqToPeriod()

constexpr float ame::freqToPeriod ( const float  freq)
constexprnoexcept

Convert frequency to period.

Parameters
freqfrequency in Hz
Returns
period

◆ gainToDecibels()

constexpr float ame::gainToDecibels ( const float  gain)
constexprnoexcept

Convert a gain level into a dBFS value.

Parameters
gain
Returns
dB decibels value
Note
Outputs Outputs -100dB if the input is less than 0.00001.
gainToDecibels (1.0f); // 0dB
gainToDecibels (0.1f); // -20.0dB
constexpr float gainToDecibels(const float gain) noexcept
Convert a gain level into a dBFS value.
Definition: ame_Conversion.hpp:245

◆ interleaveSamples()

constexpr void ame::interleaveSamples ( const float **  source,
float *  dest,
const uint_fast32_t  numSamples,
const uint_fast32_t  numChannels 
)
constexpr

Split channel→Interleave conversion.

Parameters
sourceSplit channel samples
destInterleave array
numSamples
numChannels

◆ midiToFreq()

float ame::midiToFreq ( const float  midiNote,
const float  A3Freq = 440.0f 
)
inline

Convert MIDI note number to frequency.

Parameters
midiNote
A3FreqFrequency for A3 (MIDI note 69). 440Hz is default.
Returns
frequency in Hz

◆ msToBpm()

constexpr float ame::msToBpm ( float  ms)
constexpr

Convert ms to BPM.

Parameters
ms
Returns
BPM
msToBpm(500.0f); // BPM 120
constexpr float msToBpm(float ms)
Convert ms to BPM.
Definition: ame_Conversion.hpp:216

◆ periodToFreq()

constexpr float ame::periodToFreq ( const float  period)
constexprnoexcept

Convert period to frequency.

Parameters
periodperiod
Returns
frequency

◆ poltocar()

std::pair< float, float > ame::poltocar ( const float  amplitude,
const float  angle 
)
inline

極座表→直交座長変換.

Parameters
amplitude
angle
Returns
constexpr std::pair<float, float>
Note
Max/MSPのpoltocarと同じ
See also
cartopol()

◆ rad2deg()

template<std::floating_point FloatType>
constexpr FloatType ame::rad2deg ( FloatType  radian)
constexprnoexcept

Radian to Degree.

Template Parameters
FloatTypefloat or double
Parameters
radian
Returns
constexpr FloatType degree

◆ semitoneToRatio()

float ame::semitoneToRatio ( const float  semitone)
inline

Convert semitones to frequency ratio.


Parameters
semitone
Returns
frequency ratio
semitoneToRatio(12.0f); // 2.0f
semitoneToRatio(-12.0f);// 0.5f
float semitoneToRatio(const float semitone)
Convert semitones to frequency ratio.
Definition: ame_Conversion.hpp:132