81 lines
1.5 KiB
C
81 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);
|
||
|
}
|
||
|
|
||
|
};
|