Esempio n. 1
0
        public static AsioDriver GetAsioDriverByGuid(Guid guid)
        {
            AsioDriver expr_05 = new AsioDriver();

            expr_05.InitFromGuid(guid);
            return(expr_05);
        }
Esempio n. 2
0
        public static AsioDriver GetAsioDriverByName(string name)
        {
            RegistryKey expr_15 = Registry.LocalMachine.OpenSubKey("SOFTWARE\\ASIO\\" + name);

            if (expr_15 == null)
            {
                throw new ArgumentException(string.Format("Driver Name {0} doesn't exist", name));
            }
            return(AsioDriver.GetAsioDriverByGuid(new Guid(expr_15.GetValue("CLSID").ToString())));
        }
Esempio n. 3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="AsioDriverExt"/> class based on an already
        /// instantiated AsioDriver instance.
        /// </summary>
        /// <param name="driver">A AsioDriver already instantiated.</param>
        public AsioDriverExt(AsioDriver driver)
        {
            this.driver = driver;

            if (!driver.Init(IntPtr.Zero))
            {
                throw new InvalidOperationException(driver.GetErrorMessage());
            }

            callbacks = new AsioCallbacks();
            callbacks.pasioMessage          = AsioMessageCallBack;
            callbacks.pbufferSwitch         = BufferSwitchCallBack;
            callbacks.pbufferSwitchTimeInfo = BufferSwitchTimeInfoCallBack;
            callbacks.psampleRateDidChange  = SampleRateDidChangeCallBack;

            BuildCapabilities();
        }
Esempio n. 4
0
        private void InitFromGuid(Guid asioGuid)
        {
            int num = AsioDriver.CoCreateInstance(ref asioGuid, IntPtr.Zero, 1u, ref asioGuid, out this.pAsioComObject);

            if (num != 0)
            {
                throw new COMException("Unable to instantiate ASIO. Check if STAThread is set", num);
            }
            IntPtr ptr = Marshal.ReadIntPtr(this.pAsioComObject);

            this.asioDriverVTable = new AsioDriver.AsioDriverVTable();
            FieldInfo[] fields = typeof(AsioDriver.AsioDriverVTable).GetFields();
            for (int i = 0; i < fields.Length; i++)
            {
                FieldInfo fieldInfo = fields[i];
                object    delegateForFunctionPointer = Marshal.GetDelegateForFunctionPointer(Marshal.ReadIntPtr(ptr, (i + 3) * IntPtr.Size), fieldInfo.FieldType);
                fieldInfo.SetValue(this.asioDriverVTable, delegateForFunctionPointer);
            }
        }