Example #1
0
void BarkBands::setup(){
  LOUDIA_DEBUG("BARKBANDS: Setting up...");

  // In some cases the first boundary is set to 0
  MatrixXR startFreqs(25, 1);
  startFreqs << 20, 100, 200, 300, 400, 510, 630, 770, 920, 1080, 1270, 1480, 1720, 2000, 2320, 2700, 3150, 3700, 4400, 5300, 6400, 7700, 9500, 12000, 15500;

  MatrixXR centerFreqs(24, 1);
  centerFreqs << 60, 150, 250, 350, 450, 570, 700, 840, 1000, 1170, 1370, 1600, 1850, 2150, 2500, 2900, 3400, 4000, 4800, 5800, 7000, 8500, 10500, 13500;
  
  MatrixXI startBins = ((startFreqs.block(_lowBand, 0, _highBand - _lowBand + 2, 1) / _sampleRate) * _fftSize).cast<int>();
  
  std::vector<MatrixXR> weights;
  for (int i = 0; i < startBins.rows() - 1; i++) {
    MatrixXR bandWeights = MatrixXR::Ones(startBins(i+1) - startBins(i), 1);
    weights.push_back(bandWeights);
  }

  _bands.setStartsWeights(startBins.block(0, 0, _highBand - _lowBand + 1, 1), weights);

  LOUDIA_DEBUG("BARKBANDS: Finished set up...");
}