internal void StreamCallback(IntPtr stream, IntPtr input, IntPtr output, int frames, double time, ulong position, bool timeValid, ulong error, IntPtr u) { XtFormat format = GetFormat(); bool interleaved = IsInterleaved(); object inData = raw ? (object)input : input == IntPtr.Zero ? null : interleaved ? inputInterleaved : inputNonInterleaved; object outData = raw ? (object)output : output == IntPtr.Zero ? null : interleaved ? outputInterleaved : outputNonInterleaved; if (!raw && inData != null) if (interleaved) CopyInterleavedBufferFromNative(format.mix.sample, input, (Array)inData, format.inputs, frames); else CopyNonInterleavedBufferFromNative(format.mix.sample, input, (Array)inData, format.inputs, frames); try { streamCallback(this, inData, outData, frames, time, position, timeValid, error, user); } catch (Exception e) { if (XtAudio.trace != null) XtAudio.trace(XtLevel.Fatal, string.Format("Exception caught in xrun callback: {0}.", e)); Console.WriteLine(e); Console.WriteLine(e.StackTrace); Environment.FailFast("Exception caught in stream callback.", e); } if (!raw && outData != null) if (interleaved) CopyInterleavedBufferToNative(format.mix.sample, (Array)outData, output, format.outputs, frames); else CopyNonInterleavedBufferToNative(format.mix.sample, (Array)outData, output, format.outputs, frames); }
internal void XRunCallback(int index, IntPtr user) { try { xRunCallback(index, this.user); } catch (Exception e) { if (XtAudio.trace != null) XtAudio.trace(XtLevel.Fatal, string.Format("Exception caught in xrun callback: {0}.", e)); Console.WriteLine(e); Console.WriteLine(e.StackTrace); Environment.FailFast("Exception caught in stream callback.", e); } }