void initLayer3Tables()

in pedalboard/juce_overrides/juce_PatchedMP3AudioFormat.cpp [985:1169]


  void initLayer3Tables() {
    int i, j;
    for (i = -256; i < 118 + 4; ++i)
      powToGains[i + 256] = (float)std::pow(2.0, -0.25 * (i + 210));

    for (i = 0; i < 8207; ++i)
      nToThe4Over3[i] = (float)std::pow((double)i, 4.0 / 3.0);

    for (i = 0; i < 8; ++i) {
      static constexpr double Ci[] = {-0.6,   -0.535, -0.33,   -0.185,
                                      -0.095, -0.041, -0.0142, -0.0037};
      const double sq = sqrt(1.0 + Ci[i] * Ci[i]);
      antiAliasingCs[i] = (float)(1.0 / sq);
      antiAliasingCa[i] = (float)(Ci[i] / sq);
    }

    for (i = 0; i < 18; ++i) {
      win[0][i] = win[1][i] =
          (float)(0.5 *
                  std::sin(MathConstants<double>::pi / 72.0 * (2 * i + 1)) /
                  std::cos(MathConstants<double>::pi * (2 * i + 19) / 72.0));
      win[0][i + 18] = win[3][i + 18] =
          (float)(0.5 *
                  std::sin(MathConstants<double>::pi / 72.0 *
                           (2 * (i + 18) + 1)) /
                  std::cos(MathConstants<double>::pi * (2 * (i + 18) + 19) /
                           72.0));
    }

    const double piOver72 = MathConstants<double>::pi / 72.0;

    for (i = 0; i < 6; ++i) {
      win[1][i + 18] = (float)(0.5 / std::cos(piOver72 * (2 * (i + 18) + 19)));
      win[3][i + 12] = (float)(0.5 / std::cos(piOver72 * (2 * (i + 12) + 19)));
      win[1][i + 24] =
          (float)(0.5 *
                  std::sin(MathConstants<double>::pi / 24.0 * (2 * i + 13)) /
                  std::cos(piOver72 * (2 * (i + 24) + 19)));
      win[1][i + 30] = win[3][i] = 0;
      win[3][i + 6] =
          (float)(0.5 *
                  std::sin(MathConstants<double>::pi / 24.0 * (2 * i + 1)) /
                  std::cos(piOver72 * (2 * (i + 6) + 19)));
    }

    for (i = 0; i < 12; ++i)
      win[2][i] =
          (float)(0.5 *
                  std::sin(MathConstants<double>::pi / 24.0 * (2 * i + 1)) /
                  std::cos(MathConstants<double>::pi * (2 * i + 7) / 24.0));

    for (j = 0; j < 4; ++j) {
      static constexpr int len[4] = {36, 36, 12, 36};
      for (i = 0; i < len[j]; i += 2)
        win1[j][i] = win[j][i];
      for (i = 1; i < len[j]; i += 2)
        win1[j][i] = -win[j][i];
    }

    const double sqrt2 = 1.41421356237309504880168872420969808;

    for (i = 0; i < 16; ++i) {
      const double t = std::tan(i * MathConstants<double>::pi / 12.0);
      tan1_1[i] = (float)(t / (1.0 + t));
      tan2_1[i] = (float)(1.0 / (1.0 + t));
      tan1_2[i] = (float)(sqrt2 * t / (1.0 + t));
      tan2_2[i] = (float)(sqrt2 / (1.0 + t));

      for (j = 0; j < 2; ++j) {
        double p1 = 1.0, p2 = 1.0;

        if (i > 0) {
          const double base = std::pow(2.0, -0.25 * (j + 1));

          if (i & 1)
            p1 = std::pow(base, (i + 1) * 0.5);
          else
            p2 = std::pow(base, i * 0.5);
        }

        pow1_1[j][i] = (float)p1;
        pow2_1[j][i] = (float)p2;
        pow1_2[j][i] = (float)(sqrt2 * p1);
        pow2_2[j][i] = (float)(sqrt2 * p2);
      }
    }

    for (j = 0; j < 9; ++j) {
      const BandInfoStruct &bi = bandInfo[j];
      int cb;
      int *mp = map[j][0] = mapbuf0[j];
      const int16 *bdf = bi.longDiff;

      for (i = 0, cb = 0; cb < 8; ++cb, i += *bdf++) {
        *mp++ = (*bdf) >> 1;
        *mp++ = i;
        *mp++ = 3;
        *mp++ = cb;
      }
      bdf = bi.shortDiff + 3;

      for (cb = 3; cb < 13; ++cb) {
        const int l = (*bdf++) >> 1;

        for (int lwin = 0; lwin < 3; ++lwin) {
          *mp++ = l;
          *mp++ = i + lwin;
          *mp++ = lwin;
          *mp++ = cb;
        }
        i += 6 * l;
      }

      mapEnd[j][0] = mp;
      mp = map[j][1] = mapbuf1[j];
      bdf = bi.shortDiff;

      for (i = 0, cb = 0; cb < 13; ++cb) {
        const int l = (*bdf++) >> 1;
        for (int lwin = 0; lwin < 3; ++lwin) {
          *mp++ = l;
          *mp++ = i + lwin;
          *mp++ = lwin;
          *mp++ = cb;
        }
        i += 6 * l;
      }
      mapEnd[j][1] = mp;

      mp = map[j][2] = mapbuf2[j];
      bdf = bi.longDiff;
      for (cb = 0; cb < 22; ++cb) {
        *mp++ = (*bdf++) >> 1;
        *mp++ = cb;
      }
      mapEnd[j][2] = mp;
    }

    for (j = 0; j < 9; ++j) {
      for (i = 0; i < 23; ++i)
        longLimit[j][i] = jmin(32, (bandInfo[j].longIndex[i] - 1 + 8) / 18 + 1);
      for (i = 0; i < 14; ++i)
        shortLimit[j][i] = jmin(32, (bandInfo[j].shortIndex[i] - 1) / 18 + 1);
    }

    for (i = 0; i < 5; ++i)
      for (j = 0; j < 6; ++j)
        for (int k = 0; k < 6; ++k) {
          const int n = k + j * 6 + i * 36;
          iLength2[n] = (unsigned int)(i | (j << 3) | (k << 6) | (3 << 12));
        }

    for (i = 0; i < 4; ++i)
      for (j = 0; j < 4; ++j)
        for (int k = 0; k < 4; ++k) {
          const int n = k + j * 4 + i * 16;
          iLength2[n + 180] =
              (unsigned int)(i | (j << 3) | (k << 6) | (4 << 12));
        }

    for (i = 0; i < 4; ++i)
      for (j = 0; j < 3; ++j) {
        const int n = j + i * 3;
        iLength2[n + 244] = (unsigned int)(i | (j << 3) | (5 << 12));
        nLength2[n + 500] =
            (unsigned int)(i | (j << 3) | (2 << 12) | (1 << 15));
      }

    for (i = 0; i < 5; ++i)
      for (j = 0; j < 5; ++j)
        for (int k = 0; k < 4; ++k)
          for (int l = 0; l < 4; ++l) {
            const int n = l + k * 4 + j * 16 + i * 80;
            nLength2[n] =
                (unsigned int)(i | (j << 3) | (k << 6) | (l << 9) | (0 << 12));
          }

    for (i = 0; i < 5; ++i)
      for (j = 0; j < 5; ++j)
        for (int k = 0; k < 4; ++k) {
          const int n = k + j * 4 + i * 20;
          nLength2[n + 400] =
              (unsigned int)(i | (j << 3) | (k << 6) | (1 << 12));
        }
  }