processAudioData method
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;
}
}