private void OnAudioFilterRead(float[] data, int channels) { if (_sampleRate > 0)//--You can't read the sampleRate outside of the main thread. Ie. when unity is loading a scene. This will callback outside of the main thread. SO, we add a guard condition (_sampleRate is > 0 only after off-loading-thread-is exited). { #region Native implementation //--Pinning the arrays with Alloc before passing them to the native code so GC doesn't collect as the native code is accessing them. GCHandle bufferLowHandle = GCHandle.Alloc(bufferLow, GCHandleType.Pinned); GCHandle bufferHighHandle = GCHandle.Alloc(bufferHigh, GCHandleType.Pinned); try { ApplyBandStopFilter(data, channels, data.Length, bufferLow, bufferHigh, _lowCutoff, _highCutoff); } finally { bufferLowHandle.Free(); bufferHighHandle.Free(); } #endregion } }