public unsafe XtStream AggregateStream(XtDevice[] devices, XtChannels[] channels, double[] bufferSizes, int count, XtMix mix, bool interleaved, bool raw, XtDevice master, XtStreamCallback streamCallback, XtXRunCallback xRunCallback, object user) { IntPtr str; IntPtr channelsPtr = IntPtr.Zero; IntPtr[] ds = devices.Select(d => d.d).ToArray(); XtStream stream = new XtStream(raw, streamCallback, xRunCallback, user); try { int size = Marshal.SizeOf(typeof(XtChannels)); channelsPtr = Marshal.AllocHGlobal(count * size); for (int i = 0; i < count; i++) { Marshal.StructureToPtr(channels[i], new IntPtr((byte *)channelsPtr + i * size), false); } XtNative.HandleError(XtNative.XtServiceAggregateStream(s, ds, channelsPtr, bufferSizes, count, mix, interleaved, master.d, stream.streamCallbackPtr, stream.xRunCallbackPtr, IntPtr.Zero, out str)); } finally { if (channelsPtr != IntPtr.Zero) { Marshal.FreeHGlobal(channelsPtr); } } stream.Init(str); return(stream); }
public XtStream OpenStream(XtFormat format, bool interleaved, bool raw, double bufferSize, XtStreamCallback streamCallback, XtXRunCallback xRunCallback, object user) { IntPtr s; XtStream stream = new XtStream(raw, streamCallback, xRunCallback, user); XtNative.Format native = XtNative.Format.ToNative(format); XtNative.HandleError(XtNative.XtDeviceOpenStream(d, ref native, interleaved, bufferSize, stream.streamCallbackPtr, stream.xRunCallbackPtr, IntPtr.Zero, out s)); stream.Init(s); return(stream); }