setMultibandCompressor method

void setMultibandCompressor({
  1. required bool enable,
  2. required List<double> crossoverFreqs,
  3. required List<ViperMultibandCompressorBand> bands,
})

Multiband Compressor (up to 5 bands).

Implementation

void setMultibandCompressor({
  required bool enable,
  required List<double> crossoverFreqs,
  required List<ViperMultibandCompressorBand> bands,
}) {
  if (_enginePtr == ffi.nullptr) return;

  int count = bands.length;
  if (count > 5) count = 5;

  final crossPtr = _malloc(4 * ffi.sizeOf<ffi.Float>()).cast<ffi.Float>();
  final paramsPtr = _malloc(count * 17 * ffi.sizeOf<ffi.Float>()).cast<ffi.Float>();

  try {
    final crossList = crossPtr.asTypedList(4);
    for (int i = 0; i < 4 && i < crossoverFreqs.length; i++) {
      crossList[i] = crossoverFreqs[i];
    }

    final paramsList = paramsPtr.asTypedList(count * 17);
    for (int i = 0; i < count; i++) {
      bands[i].writeToArray(paramsList, i * 17);
    }

    _multibandCompressor(_enginePtr, enable ? 1 : 0, count, crossPtr, paramsPtr);
  } finally {
    _freePtr(crossPtr.cast<ffi.Void>());
    _freePtr(paramsPtr.cast<ffi.Void>());
  }
}