apply method

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

Implementation

double apply({
  required double carrierFreq,
  required int sampleRate,
}) {
  if (!enabled || type == NeomModulationType.none) return carrierFreq;

  final double twoPi = 2 * pi;
  _phase += twoPi * modFrequency / sampleRate;
  if (_phase > twoPi) _phase -= twoPi;

  switch (type) {
    case NeomModulationType.am:
    // AM afecta amplitud (se maneja fuera)
      return carrierFreq;

    case NeomModulationType.fm:
    // FM altera la frecuencia portadora
      return carrierFreq + (sin(_phase) * carrierFreq * depth);

    case NeomModulationType.phase:
    // Phase se aplica directamente en el oscilador
      return carrierFreq;

    default:
      return carrierFreq;
  }
}