110 lines
3.5 KiB
C++
110 lines
3.5 KiB
C++
// ToolHelp.cpp : Global functions.
|
|
//
|
|
// Copyright (C) 1999 Microsoft Corporation. All Rights Reserved
|
|
//
|
|
|
|
#include "toolhelp.h"
|
|
|
|
long CToolHelper::m_slMIDIToDB[128] = { // Global array used to convert MIDI to dB.
|
|
-9600, -8415, -7211, -6506, -6006, -5619, -5302, -5034,
|
|
-4802, -4598, -4415, -4249, -4098, -3959, -3830, -3710,
|
|
-3598, -3493, -3394, -3300, -3211, -3126, -3045, -2968,
|
|
-2894, -2823, -2755, -2689, -2626, -2565, -2506, -2449,
|
|
-2394, -2341, -2289, -2238, -2190, -2142, -2096, -2050,
|
|
-2006, -1964, -1922, -1881, -1841, -1802, -1764, -1726,
|
|
-1690, -1654, -1619, -1584, -1551, -1518, -1485, -1453,
|
|
-1422, -1391, -1361, -1331, -1302, -1273, -1245, -1217,
|
|
-1190, -1163, -1137, -1110, -1085, -1059, -1034, -1010,
|
|
-985, -961, -938, -914, -891, -869, -846, -824,
|
|
-802, -781, -759, -738, -718, -697, -677, -657,
|
|
-637, -617, -598, -579, -560, -541, -522, -504,
|
|
-486, -468, -450, -432, -415, -397, -380, -363,
|
|
-347, -330, -313, -297, -281, -265, -249, -233,
|
|
-218, -202, -187, -172, -157, -142, -127, -113,
|
|
-98, -84, -69, -55, -41, -27, -13, 0
|
|
};
|
|
|
|
|
|
long CToolHelper::m_slDBToMIDI[97] = { // Global array used to convert db to MIDI.
|
|
127, 119, 113, 106, 100, 95, 89, 84, 80, 75,
|
|
71, 67, 63, 60, 56, 53, 50, 47, 45, 42,
|
|
40, 37, 35, 33, 31, 30, 28, 26, 25, 23,
|
|
22, 21, 20, 19, 17, 16, 15, 15, 14, 13,
|
|
12, 11, 11, 10, 10, 9, 8, 8, 8, 7,
|
|
7, 6, 6, 6, 5, 5, 5, 4, 4, 4,
|
|
4, 3, 3, 3, 3, 3, 2, 2, 2, 2,
|
|
2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0
|
|
};
|
|
|
|
long CToolHelper::m_slResTypes[DMUS_TIME_UNIT_COUNT] =
|
|
{ 1, // DMUS_TIME_UNIT_MS
|
|
1, // DMUS_TIME_UNIT_MTIME
|
|
384, // DMUS_TIME_UNIT_GRID
|
|
768, // DMUS_TIME_UNIT_BEAT
|
|
3072, // DMUS_TIME_UNIT_BAR
|
|
32, // DMUS_TIME_UNIT_64T
|
|
48, // DMUS_TIME_UNIT_64
|
|
64, // DMUS_TIME_UNIT_32T
|
|
96, // DMUS_TIME_UNIT_32
|
|
128, // DMUS_TIME_UNIT_16T
|
|
192, // DMUS_TIME_UNIT_16
|
|
256, // DMUS_TIME_UNIT_8T
|
|
384, // DMUS_TIME_UNIT_8
|
|
512, // DMUS_TIME_UNIT_4T
|
|
768, // DMUS_TIME_UNIT_4
|
|
1024, // DMUS_TIME_UNIT_2T
|
|
1536, // DMUS_TIME_UNIT_2
|
|
2048, // DMUS_TIME_UNIT_1T
|
|
3072 // DMUS_TIME_UNIT_1
|
|
};
|
|
|
|
|
|
BYTE CToolHelper::VolumeToMidi(long lVolume)
|
|
|
|
{
|
|
if (lVolume < -9600) lVolume = -9600;
|
|
if (lVolume > 0) lVolume = 0;
|
|
lVolume = -lVolume;
|
|
long lFraction = lVolume % 100;
|
|
lVolume = lVolume / 100;
|
|
long lResult = m_slDBToMIDI[lVolume];
|
|
lResult += ((m_slDBToMIDI[lVolume + 1] - lResult) * lFraction) / 100;
|
|
return (BYTE) lResult;
|
|
}
|
|
|
|
long CToolHelper::MidiToVolume(BYTE bMidi)
|
|
|
|
{
|
|
if (bMidi > 127) bMidi = 127;
|
|
return m_slMIDIToDB[bMidi];
|
|
}
|
|
|
|
long CToolHelper::TimeUnitToTicks(long lTimeUnit,DMUS_TIMESIGNATURE *pTimeSig)
|
|
{
|
|
long lTicks;
|
|
if (lTimeUnit > DMUS_TIME_UNIT_BAR)
|
|
{
|
|
lTicks = m_slResTypes[lTimeUnit];
|
|
}
|
|
else if ((lTimeUnit >= DMUS_TIME_UNIT_GRID) && pTimeSig)
|
|
{
|
|
DWORD dwBeat = (4 * 768) / pTimeSig->bBeat;
|
|
if (lTimeUnit == DMUS_TIME_UNIT_BEAT)
|
|
{
|
|
lTicks = dwBeat;
|
|
}
|
|
else if (lTimeUnit == DMUS_TIME_UNIT_GRID)
|
|
{
|
|
lTicks = (dwBeat / pTimeSig->wGridsPerBeat);
|
|
}
|
|
else
|
|
{
|
|
lTicks = (dwBeat * pTimeSig->bBeatsPerMeasure);
|
|
}
|
|
}
|
|
else lTicks = 0;
|
|
return lTicks;
|
|
}
|