⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eq.cpp

📁 ac3的解码程序
💻 CPP
字号:
#include <math.h>
#include "eq.h"


Eq::Eq()
{
  on = false;
  for (int i = 0; i < 9; i++)
    func9[i] = 1.0;

  reset();
}

void Eq::reset()
{
  memset(levels9, 0, sizeof(levels9));
  count9 = 0;
}

void Eq::process(sample_buffer_t &samples, Speakers spk)
{
  int ch, i, bin;
  sample_t factor;

  sample_t func[9];
  memcpy(func, func9, sizeof(func));

  // equalizer
  if (on)
  {
    for (ch = 0; ch < spk.nfchans(); ch++) 
    {
      levels9[0] += fabs(samples[ch][0] *= func[0]);
      levels9[1] += fabs(samples[ch][1] *= func[1]);
      bin = 2;
      factor = func[1];
      for (i = 2; i < 9; i++)
      {
        sample_t sum = 0;
        sample_t delta = (func[i] - func[i-1]) / ((1<<i) - (1<<(i-1)));
        for (; bin < (1<<i); bin++)
        {
          factor += delta;
          sum += fabs(samples[ch][bin] *= factor);
        }
        levels9[i] += sum / ((1<<i) - (1<<(i-1)));
      }
    }
    count9++;

    if (spk.lfe())
    {
      ch = spk.nfchans();
      sample_t sum = 0;
      levels9[0] += fabs(samples[ch][0] *= func9[0]);
      levels9[1] += fabs(samples[ch][1] *= func9[1]);

      sum = 0;
      sum += fabs(samples[ch][2] *= func9[2]);
      sum += fabs(samples[ch][3] *= func9[2]);
      levels9[2] += sum/2;

      sum = 0;
      sum += fabs(samples[ch][4] *= func9[3]);
      sum += fabs(samples[ch][5] *= func9[3]);
      sum += fabs(samples[ch][6] *= func9[3]);
      levels9[3] += sum/3;
    }
  }
}

void Eq::get_levels9(sample_t *levels)
{
  if (!count9)
    memset(levels, 0, sizeof(levels9));
  else
    for (int i = 0; i < 9; i++)
      levels[i] = levels9[i] / count9;

  memset(levels9, 0, sizeof(levels9));
  count9 = 0;
}

void Eq::get_func9(sample_t *_func)
{
  memcpy(_func, func9, sizeof(func9));
}

void Eq::set_func9(sample_t *_func)
{
  memcpy(func9, _func, sizeof(func9));
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -