コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }