public static AsioDriver GetAsioDriverByGuid(Guid guid) { AsioDriver expr_05 = new AsioDriver(); expr_05.InitFromGuid(guid); return(expr_05); }
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()))); }
/// <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(); }
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); } }