pollAnalyzerFrame method

Float32List pollAnalyzerFrame({
  1. int? maxSamples,
})

Implementation

Float32List pollAnalyzerFrame({int? maxSamples}) {
  if (_engine == ffi.nullptr) {
    return Float32List(0);
  }

  final size = maxSamples ?? getAnalyzerFrameSize();
  if (size <= 0) {
    return Float32List(0);
  }

  if (_analyzerBufferPtr == null || _analyzerBufferCapacity < size) {
    if (_analyzerBufferPtr != null && _analyzerBufferPtr != ffi.nullptr) {
      _freePtr(_analyzerBufferPtr!.cast<ffi.Void>());
    }
    _analyzerBufferCapacity = size < 4096 ? 4096 : size;
    _analyzerBufferPtr =
        _malloc(_analyzerBufferCapacity * ffi.sizeOf<ffi.Float>())
            .cast<ffi.Float>();
  }

  final ptr = _analyzerBufferPtr!;
  final copied = _pollAnalyzerFrame(_engine, ptr, size);
  if (copied <= 0) {
    return Float32List(0);
  }
  final src = ptr.asTypedList(copied);
  return Float32List.fromList(src);
}