65 lines
1.3 KiB
C++
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;
|
|
}
|
|
}; |