Example #1
0
        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);
        }
Example #2
0
        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);
        }