apply method

double apply({
  1. required double baseAmplitude,
  2. required int sampleRate,
})

Implementation

double apply({
  required double baseAmplitude,
  required int sampleRate,
}) {
  if (mode == NeomBreathMode.off) return baseAmplitude;

  final breathHz = breathsPerMinute / 60.0;
  _phase += 2 * pi * breathHz / sampleRate;

  if (_phase > 2 * pi) _phase -= 2 * pi;

  double envelope;

  switch (mode) {
    case NeomBreathMode.box:
      envelope = _boxEnvelope();
      break;
    case NeomBreathMode.fourSevenEight:
      envelope = _fourSevenEightEnvelope();
      break;
    case NeomBreathMode.free:
      envelope = (sin(_phase) + 1) / 2;
      break;
    default:
      envelope = 1.0;
  }

  final mod = 1.0 - depth + depth * envelope;
  return baseAmplitude * mod;
}