1#ifndef MCC_TUNING_TUNING_H
2#define MCC_TUNING_TUNING_H
6#include <MCC/Pitch/Pitch.h>
24 constexpr Tuning() noexcept : _reference(), _frequency(0.0f) {}
32 : _reference(IsUsable(reference, frequency)
35 _frequency(IsUsable(reference, frequency) ? frequency : 0.0f) {}
46 constexpr bool IsValid() const noexcept {
return _reference.IsValid(); }
62 return a._reference == b._reference && a._frequency == b._frequency;
65 friend constexpr bool operator!=(
Tuning a,
Tuning b)
noexcept {
70 static constexpr bool IsUsable(
MCC::Pitch reference,
float frequency)
noexcept {
72 return reference.IsValid() && frequency > 0.0f && frequency <= FLT_MAX;
Written absolute pitch: a note name plus an octave.
Definition Pitch.h:35
static constexpr Pitch Invalid() noexcept
Returns the invalid pitch.
Definition Pitch.h:80
Tuning reference: a written pitch and its frequency in hertz.
Definition Tuning.h:18
static constexpr Tuning Invalid() noexcept
Returns the invalid tuning.
Definition Tuning.h:43
constexpr bool IsValid() const noexcept
Returns true unless this is the invalid tuning.
Definition Tuning.h:46
friend constexpr bool operator==(Tuning a, Tuning b) noexcept
Equality of reference pitch and frequency. All invalid tunings are equal (SPEC-ERR-6).
Definition Tuning.h:61
constexpr Tuning() noexcept
Creates the invalid tuning (SPEC-ERR-2).
Definition Tuning.h:24
constexpr Tuning(MCC::Pitch reference, float frequency) noexcept
Creates a tuning where reference sounds at frequency Hz. An invalid pitch, or a frequency that is zer...
Definition Tuning.h:31
constexpr MCC::Pitch Reference() const noexcept
Returns the reference pitch; invalid for the invalid tuning.
Definition Tuning.h:49
constexpr float ReferenceFrequency() const noexcept
Returns the reference frequency in hertz, or 0 for the invalid tuning (SPEC-ERR-7).
Definition Tuning.h:55
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