2
0
Fork 0
OB-Xd/Source/Engine/Tuning.h
2021-12-31 23:29:23 -06:00

80 lines
1.5 KiB
C++

//
// Tuning.h
// OB-Xd
//
// Created by Natalia Escalera on 12/28/21.
// Copyright © 2021 discoDSP. All rights reserved.
//
#include "../MTS/libMTSClient.h"
#pragma once
class Tuning
{
private:
MTSClient* mts_client{nullptr};
enum Mode {
MTS_ESP,
TWELVE_TET
} mode{TWELVE_TET};
public:
Tuning()
{
}
~Tuning()
{
if (mts_client != nullptr)
{
MTS_DeregisterClient(mts_client);
mts_client = nullptr;
}
}
void updateMTSESPStatus()
{
if (mts_client == nullptr)
{
mts_client = MTS_RegisterClient();
}
mode = hasMTSMaster() ? MTS_ESP : TWELVE_TET;
}
double midiNoteFromMTS(int midiIndex)
{
return midiIndex + MTS_RetuningInSemitones(mts_client, midiIndex, -1);
}
double tunedMidiNote(int midiIndex)
{
switch(mode)
{
case TWELVE_TET:
return midiIndex;
break;
case MTS_ESP:
return midiNoteFromMTS(midiIndex);
break;
}
return midiIndex;
}
/*
These methods can be later be used for implementing other steps in the MTS-ESP guide:
https://github.com/ODDSound/MTS-ESP/blob/main/Client/libMTSClient.h
*/
bool hasMTSMaster()
{
return MTS_HasMaster(mts_client);
}
const char *getMTSScale()
{
return MTS_GetScaleName(mts_client);
}
};