code: private static AudioFrame createHeader(HeaderBitField bits) {
          if (bits.get(21, 23) != 7) {
              return null;
          }
          int mpegVer = bits.get(19, 20);
          int layer = bits.get(17, 18);
          int bitRateCode = bits.get(12, 15);
          int sampleRateCode = bits.get(10, 11);
          int padding = bits.get(9);
          if (mpegVer == 1 || layer == 0 || bitRateCode == 0 || bitRateCode == 15 || sampleRateCode == 3) {
              // invalid header values
              return null;
          }
          int bitRate = calculateBitRate(mpegVer, layer, bitRateCode);
          int sampleRate = calculateSampleRate(mpegVer, sampleRateCode);
          int length = calculateFrameLength(layer, bitRate, sampleRate, padding);
          float duration = calculateDuration(layer, sampleRate);
          int channels = calculateChannels(bits.get(6, 7));
          return new AudioFrame(mpegVer, layer, bitRate, sampleRate, channels, length, duration);
      }
docs: Creates an {@code AudioFrame} object based on the given header field. If the header field contains invalid values, result is <b>null</b>.
  
  @param bits
  the header bit field
  @return the {@code AudioFrame}