protected void SamplesCallback(IntPtr sampleBuffer, int size) { if (size == 0) { return; } if (size > 2048) { Debug.LogError("Input buffer is larger than target size!"); } SampleBuffer buffer = GetEmptyBuffer(); //Copy samples into empty buffer. Marshal.Copy(sampleBuffer, buffer.GetBuffer(), 0, size); //Set buffer to in use. buffer.Consume(0, size); //Link the buffer. if (this.HeadBuffer == null) { this.HeadBuffer = buffer; } else { this.HeadBuffer.Next = buffer; buffer.Previous = this.HeadBuffer; this.HeadBuffer = buffer; } }
public bool ResampleLerpRead <T>( SampleProvider provider, NativeArray <float> input, SampleBuffer outputBuffer, ParameterData <T> parameterData, T rateParam) where T : unmanaged, Enum { var finishedSampleProvider = false; var outputL = outputBuffer.GetBuffer(0); var outputR = outputBuffer.GetBuffer(1); for (var i = 0; i < outputL.Length; i++) { Position += parameterData.GetFloat(rateParam, i); var length = input.Length / 2; while (Position >= length - 1) { m_LastLeft = input[length - 1]; m_LastRight = input[input.Length - 1]; finishedSampleProvider |= ReadSamples(provider, new NativeSlice <float>(input, 0)); Position -= length; } var positionFloor = Math.Floor(Position); var positionFraction = Position - positionFloor; var previousSampleIndex = (int)positionFloor; var nextSampleIndex = previousSampleIndex + 1; var prevSampleL = (previousSampleIndex < 0) ? m_LastLeft : input[previousSampleIndex]; var prevSampleR = (previousSampleIndex < 0) ? m_LastRight : input[previousSampleIndex + length]; var sampleL = input[nextSampleIndex]; var sampleR = input[nextSampleIndex + length]; outputL[i] = (float)(prevSampleL + (sampleL - prevSampleL) * positionFraction); outputR[i] = (float)(prevSampleR + (sampleR - prevSampleR) * positionFraction); } return(finishedSampleProvider); }