Beispiel #1
0
        private void Build()
        {
            var channelMap = BuildChannelMap(this.channelMap);

            var outputBuffers  = channelMap.Length;
            var outputChannels = channelMap.Sum();

            outputs = new AudioSampleBuffer[outputBuffers];
            var buffers       = new CircularSampleBuffer[outputBuffers];
            var buffersMapped = new CircularSampleBuffer[outputChannels];
            var tempBuffer    = new float[0];

            var inputChannels = input.WaveFormat.Channels;
            var index         = 0;

            for (var i = 0; i < outputBuffers; i++)
            {
                buffers[i] = new CircularSampleBuffer(4096);
                for (var j = 0; j < channelMap[i]; j++)
                {
                    buffersMapped[index] = buffers[i];
                    index++;
                }
            }

            for (var i = 0; i < outputBuffers; i++)
            {
                outputs[i] = new AudioSplitBufferProcessor(input, inputChannels, outputChannels, channelMap[i],
                                                           buffers[i],
                                                           buffersMapped, tempBuffer).Build();
            }

            output = outputs.ToSpread();
        }
Beispiel #2
0
 public void AddSamples(float[] buffer, int offset, int count)
 {
     if (circularBuffer == null)
     {
         circularBuffer = new CircularSampleBuffer(BufferLength);
     }
     if (circularBuffer.Write(buffer, offset, count) < count)
     {
         Overflows++;
     }
 }
Beispiel #3
0
 public AudioSplitBufferProcessor(AudioSampleBuffer input, int inputChannels, int outputChannels,
                                  int channels, CircularSampleBuffer buffer, CircularSampleBuffer[] buffersMapped, float[] tempBuffer)
 {
     this.input          = input;
     this.inputChannels  = inputChannels;
     this.outputChannels = outputChannels;
     this.channels       = channels;
     this.buffer         = buffer;
     this.buffersMapped  = buffersMapped;
     this.tempBuffer     = tempBuffer;
 }
Beispiel #4
0
 public void ClearBuffer()
 {
     circularBuffer?.Reset();
     circularBuffer = null;
 }