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(); }
public void AddSamples(float[] buffer, int offset, int count) { if (circularBuffer == null) { circularBuffer = new CircularSampleBuffer(BufferLength); } if (circularBuffer.Write(buffer, offset, count) < count) { Overflows++; } }
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; }
public void ClearBuffer() { circularBuffer?.Reset(); circularBuffer = null; }