public AudioSampleBuffer Update(Spread <AudioSampleBuffer> inputs, Spread <int> outputMap) { var arrayInputs = inputs?.ToList(); var arrayMap = outputMap?.ToArray(); HasChanges = !AudioEngine.SequenceEquals(Inputs, arrayInputs) || !AudioEngine.ArrayEquals(OutputMap, arrayMap); Inputs = arrayInputs; OutputMap = arrayMap; if (HasChanges || HotSwapped) { AudioEngine.Log($"AudioMixer: configuration changed"); if (IsValid()) { processor = new AudioMixerProcessor(Inputs, OutputMap); output = processor.Build(); } else { output?.Dispose(); output = null; } HotSwapped = false; } return(output); }
public Spread <AudioSampleBuffer> Update(AudioSampleBuffer input, Spread <int> channelMap) { var arrayMap = channelMap?.ToArray(); hasChanges = input != this.input || !AudioEngine.ArrayEquals(this.channelMap, arrayMap); this.input = input; this.channelMap = arrayMap; if (hasChanges) { AudioEngine.Log($"AudioSplitter configuration changed!"); if (IsValid()) { var outputsBefore = outputs?.Length ?? 0; Build(); // Send nulls to update connected pins var fillOutputs = outputsBefore - (outputs?.Length ?? 0); if (fillOutputs > 0) { var builder = output.ToBuilder(); for (int i = 0; i < fillOutputs; i++) { builder.Add(null); } output = builder.ToSpread(); } } else { foreach (var buffer in outputs) { buffer.Dispose(); } // Send nulls to update connected pins var results = outputs.Select(o => (AudioSampleBuffer)null); return(results.ToSpread()); } } return(output); }