processAudioData method

  1. @override
Future<List<int>?> processAudioData(
  1. List<int> inputData
)
override

Process audio data in memory

Implementation

@override
Future<List<int>?> processAudioData(List<int> inputData) async {
  if (!settings.isEnabled || !settings.hasActiveProcessing) {
    return inputData;
  }

  _isProcessing.value = true;

  try {
    List<int> data = inputData;

    // Apply processing chain in order

    // 1. Noise reduction (first to clean up input)
    if (settings.noiseReduction.isEnabled) {
      data = _applyNoiseReduction(data);
    }

    // 2. Voice enhancement
    if (settings.voiceEnhancement.isEnabled) {
      data = _applyVoiceEnhancement(data);
    }

    // 3. De-esser
    if (settings.voiceEnhancement.deEsser) {
      data = _applyDeEsser(data);
    }

    // 4. De-breath
    if (settings.voiceEnhancement.deBreath) {
      data = _applyDeBreath(data);
    }

    // 5. Custom effects chain
    for (final effect in settings.effectChain) {
      if (effect.isEnabled) {
        data = _applyEffect(data, effect);
      }
    }

    // 6. Compressor
    if (settings.dynamics.compressorEnabled) {
      data = _applyCompressor(data);
    }

    // 7. Limiter (always last in dynamics)
    if (settings.dynamics.limiterEnabled) {
      data = _applyLimiter(data);
    }

    // 8. Output gain
    if (settings.outputGain != 0.0) {
      data = _applyGain(data, settings.outputGain);
    }

    return data;
  } catch (e) {
    return null;
  } finally {
    _isProcessing.value = false;
  }
}