winamp/Src/external_dependencies/openmpt-trunk/soundlib/tuningbase.h

81 lines
2.0 KiB
C++

/*
* tuningbase.h
* ------------
* Purpose: Alternative sample tuning.
* Notes : (currently none)
* Authors: OpenMPT Devs
* The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
*/
#pragma once
#include "openmpt/all/BuildSettings.hpp"
#include <limits>
OPENMPT_NAMESPACE_BEGIN
namespace Tuning {
enum class SerializationResult : int {
Success = 1,
NoMagic = 0,
Failure = -1
};
using NOTEINDEXTYPE = int16; // Some signed integer-type.
using UNOTEINDEXTYPE = uint16; // Unsigned NOTEINDEXTYPE.
using RATIOTYPE = float32; // Some 'real figure' type able to present ratios. If changing RATIOTYPE, serialization methods may need modifications.
// Counter of steps between notes. If there is no 'finetune'(finestepcount == 0),
// then 'step difference' between notes is the
// same as differences in NOTEINDEXTYPE. In a way similar to ticks and rows in pattern -
// ticks <-> STEPINDEX, rows <-> NOTEINDEX
using STEPINDEXTYPE = int32;
using USTEPINDEXTYPE = uint32;
struct NoteRange
{
NOTEINDEXTYPE first;
NOTEINDEXTYPE last;
};
// Derived from old IsStepCountRangeSufficient(), this is actually a more
// sensible value than what was calculated in earlier versions.
inline constexpr STEPINDEXTYPE FINESTEPCOUNT_MAX = 0xffff;
inline constexpr auto NOTEINDEXTYPE_MIN = std::numeric_limits<NOTEINDEXTYPE>::min();
inline constexpr auto NOTEINDEXTYPE_MAX = std::numeric_limits<NOTEINDEXTYPE>::max();
inline constexpr auto UNOTEINDEXTYPE_MAX = std::numeric_limits<UNOTEINDEXTYPE>::max();
inline constexpr auto STEPINDEXTYPE_MIN = std::numeric_limits<STEPINDEXTYPE>::min();
inline constexpr auto STEPINDEXTYPE_MAX = std::numeric_limits<STEPINDEXTYPE>::max();
inline constexpr auto USTEPINDEXTYPE_MAX = std::numeric_limits<USTEPINDEXTYPE>::max();
enum class Type : uint16
{
GENERAL = 0,
GROUPGEOMETRIC = 1,
GEOMETRIC = 3,
};
class CTuning;
} // namespace Tuning
typedef Tuning::CTuning CTuning;
OPENMPT_NAMESPACE_END