Beispiel #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);
        }
Beispiel #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);
        }
Beispiel #3
0
 internal XtStream(bool raw, XtStreamCallback streamCallback, XtXRunCallback xRunCallback, object user) {
     this.raw = raw;
     this.user = user;
     this.xRunCallback = xRunCallback;
     this.streamCallback = streamCallback;
     this.win32StreamCallback = new XtNative.StreamCallbackWin32(StreamCallback);
     this.linuxStreamCallback = new XtNative.StreamCallbackLinux(StreamCallback);
     Delegate streamCallbackDelegate = Environment.OSVersion.Platform == PlatformID.Win32NT
         ? (Delegate)win32StreamCallback : linuxStreamCallback;
     streamCallbackPtr = Marshal.GetFunctionPointerForDelegate(streamCallbackDelegate);
     if (xRunCallback != null) {
         this.win32XRunCallback = new XtNative.XRunCallbackWin32(XRunCallback);
         this.linuxXRunCallback = new XtNative.XRunCallbackLinux(XRunCallback);
         Delegate xRunCallbackDelegate = Environment.OSVersion.Platform == PlatformID.Win32NT
             ? (Delegate)win32XRunCallback : linuxXRunCallback;
         xRunCallbackPtr = Marshal.GetFunctionPointerForDelegate(xRunCallbackDelegate);
     }
 }