1#ifndef MCC_TUNING_EQUAL_TEMPERAMENT_H
2#define MCC_TUNING_EQUAL_TEMPERAMENT_H
4#include <MCC_BuildSettings.h>
9#include <Foundation/Math/Arithmetic.h>
11#include <MCC/Pitch/PitchClass.h>
12#include <MCC/Pitch/Pitch.h>
13#include <MCC/Tuning/Tuning.h>
45 constexpr bool IsValid() const noexcept {
return _tuning.IsValid(); }
59 if (!
IsValid() || !pitch.IsValid()) {
78 const int32_t distance =
79 static_cast<int32_t
>(pitch.ChromaticIndex().Value()) -
80 _tuning.Reference().ChromaticIndex().Value();
81 int32_t octaves = Foundation::Math::FloorDiv(
83 const int32_t semitones = Foundation::Math::FloorMod(
86 float frequency = _tuning.ReferenceFrequency() * ratios[semitones];
87 for (; octaves > 0; --octaves) {
88 if (frequency > FLT_MAX / 2.0f) {
93 for (; octaves < 0; ++octaves) {
101 return a._tuning == b._tuning;
Twelve-tone equal temperament relative to a Tuning.
Definition EqualTemperament.h:28
constexpr bool IsValid() const noexcept
Returns true when the tuning is valid.
Definition EqualTemperament.h:45
constexpr EqualTemperament(MCC::Tuning tuning) noexcept
Creates the temperament for tuning.
Definition EqualTemperament.h:36
static constexpr EqualTemperament Standard() noexcept
Returns equal temperament with A4 = 440 Hz (SPEC-OCT-2).
Definition EqualTemperament.h:40
constexpr EqualTemperament() noexcept
Creates the invalid temperament (SPEC-ERR-2).
Definition EqualTemperament.h:33
MCC_CONSTEXPR14 float Frequency(MCC::Pitch pitch) const noexcept
Returns the frequency of pitch in hertz.
Definition EqualTemperament.h:58
friend constexpr bool operator==(EqualTemperament a, EqualTemperament b) noexcept
Equality of tunings.
Definition EqualTemperament.h:100
constexpr MCC::Tuning Tuning() const noexcept
Returns the tuning reference.
Definition EqualTemperament.h:48
static constexpr uint8_t Count
Number of pitch classes in an octave.
Definition PitchClass.h:24
Written absolute pitch: a note name plus an octave.
Definition Pitch.h:35
Tuning reference: a written pitch and its frequency in hertz.
Definition Tuning.h:18
static constexpr Tuning Standard() noexcept
Returns the standard tuning, A4 = 440 Hz (SPEC-OCT-2).
Definition Tuning.h:38
Music Composition Core public namespace.
Definition Version.h:4