setMultibandFxBands method

void setMultibandFxBands(
  1. List<EqBandConfig> bands
)

Implementation

void setMultibandFxBands(List<EqBandConfig> bands) {
  if (_engine == ffi.nullptr) return;
  if (bands.isEmpty) {
    clearMultibandFx();
    return;
  }

  final count = bands.length;
  final typesPtr = _malloc(count * ffi.sizeOf<ffi.Int32>()).cast<ffi.Int32>();
  final frequencyPtr =
      _malloc(count * ffi.sizeOf<ffi.Float>()).cast<ffi.Float>();
  final qPtr = _malloc(count * ffi.sizeOf<ffi.Float>()).cast<ffi.Float>();
  final gainPtr = _malloc(count * ffi.sizeOf<ffi.Float>()).cast<ffi.Float>();
  final slopePtr = _malloc(count * ffi.sizeOf<ffi.Float>()).cast<ffi.Float>();
  final enabledPtr =
      _malloc(count * ffi.sizeOf<ffi.Int32>()).cast<ffi.Int32>();

  try {
    final types = typesPtr.asTypedList(count);
    final freqs = frequencyPtr.asTypedList(count);
    final qs = qPtr.asTypedList(count);
    final gains = gainPtr.asTypedList(count);
    final slopes = slopePtr.asTypedList(count);
    final enabledFlags = enabledPtr.asTypedList(count);

    for (var i = 0; i < count; i++) {
      final band = bands[i];
      types[i] = band.type.index;
      freqs[i] = band.frequencyHz;
      qs[i] = band.q;
      gains[i] = band.gainDb;
      slopes[i] = band.slope;
      enabledFlags[i] = band.enabled ? 1 : 0;
    }

    _setMultibandFxBands(
      _engine,
      count,
      typesPtr,
      frequencyPtr,
      qPtr,
      gainPtr,
      slopePtr,
      enabledPtr,
    );
  } finally {
    _freePtr(typesPtr.cast<ffi.Void>());
    _freePtr(frequencyPtr.cast<ffi.Void>());
    _freePtr(qPtr.cast<ffi.Void>());
    _freePtr(gainPtr.cast<ffi.Void>());
    _freePtr(slopePtr.cast<ffi.Void>());
    _freePtr(enabledPtr.cast<ffi.Void>());
  }
}