void EQ3band(float inL[], float inR[], float outL[], float outR[], int wavelength)
{
// inL[]、inR[]、outL[]、outR[]はそれぞれ入力信号と出力信号のバッファ(左右)
// wavelenghtはバッファのサイズ、サンプリング周波数は44100Hzとする
// エフェクターのパラメーター
float lowfreq = 400.0f; // 低音域の周波数。50Hz~1kHz程度
float lowgain = 2.0f; // 低音域のゲイン(増幅値)。-15~15dB程度
float midfreq = 1000.0f; // 中音域の周波数。500Hz~4kHz程度
float midgain = -4.0f; // 中音域のゲイン(増幅値)。-15~15dB程度
float highfreq = 4000.0f; // 高音域の周波数。1kHz~12kHz程度
float highgain = 4.0f; // 高音域のゲイン(増幅値)。-15~15dB程度
// 内部変数
CMyFilter lowL, lowR;
CMyFilter midL, midR;
CMyFilter highL, highR; // フィルタークラス(https://www.utsbox.com/?page_id=728 より)
// 低音域を持ち上げる(ローシェルフ)フィルタ設定(左右分)
lowL.LowShelf(lowfreq, 1.0f/sqrt(2.0f),lowgain);
lowR.LowShelf(lowfreq, 1.0f / sqrt(2.0f), lowgain);
// 中音域を持ち上げる(ピーキング)フィルタ設定(左右分)
midL.Peaking(midfreq, 1.0f / sqrt(2.0f), midgain);
midL.Peaking(midfreq, 1.0f / sqrt(2.0f), midgain);
// 高音域を持ち上げる(ローシェルフ)フィルタ設定(左右分)
highL.HighShelf(highfreq, 1.0f / sqrt(2.0f), highgain);
highR.HighShelf(highfreq, 1.0f / sqrt(2.0f), highgain);
// 入力信号にエフェクトをかける
for (int i = 0; i < wavelength; i++)
{
// 入力信号にフィルタをかける
outL[i] = highL.Process(midL.Process(lowL.Process(inL[i])));
outR[i] = highR.Process(midR.Process(lowR.Process(inR[i])));
}
}