Files
Leviathan/Library/Internal/include/sound/GlobalCutOffFreqTable.h
T
2026-06-01 12:46:52 +02:00

65 lines
1.3 KiB
C++

#pragma once
//해주기 - 나중에 로우필터 각 소리마다 set하게 되면 이 파일 빼주기.
#define MIN_DIST_CUTOFF_FREQ 22000.0f
#define MIN_FREQ 40.0f
class GCutOffFreqTable
{
private:
float m_fDistMin;
float m_fDistMinData;
float m_fSlope; ///< 직선의 방정식 y=ax+b 에서 a값. 즉,기울기를뜻함.
float m_fConst; ///< 직선의 방정식에서 b값. 즉, 뒤에 상수뜻함
public:
~GCutOffFreqTable(){;}
static GCutOffFreqTable* GetCutOffFreqTable()
{
static GCutOffFreqTable CutOff;
return &CutOff;
}
void SetCutOffFreqRate( float fDMin, float fDist, float fDistLowData)
{
m_fDistMin = fDMin;
m_fSlope = (fDistLowData - m_fDistMinData) / (fDist - fDMin); //기울기 구하기
m_fConst = fDistLowData - ( m_fSlope*fDist); //상수 구하기 b = y - ax
}
int GetCutOffFreq( float fDist)
{
if( (fDist < 0.0f) || (fDist < m_fDistMin))
{
return (int)m_fDistMinData;
}
int freq = int( (m_fSlope*fDist) + m_fConst);
if( freq < (int)MIN_FREQ)
freq = (int)MIN_FREQ;
return freq;
}
private:
GCutOffFreqTable()
{
m_fDistMin = 10.0f;
m_fDistMinData = MIN_DIST_CUTOFF_FREQ;
m_fSlope = 0.0f;
m_fConst = MIN_DIST_CUTOFF_FREQ;
}
};