/// <summary> /// Builds the capabilities internally. /// </summary> private void BuildCapabilities() { capability = new AsioDriverCapability(); capability.DriverName = driver.GetDriverName(); // Get nb Input/Output channels driver.GetChannels(out capability.NbInputChannels, out capability.NbOutputChannels); capability.InputChannelInfos = new AsioChannelInfo[capability.NbInputChannels]; capability.OutputChannelInfos = new AsioChannelInfo[capability.NbOutputChannels]; // Get ChannelInfo for Inputs for (int i = 0; i < capability.NbInputChannels; i++) { capability.InputChannelInfos[i] = driver.GetChannelInfo(i, true); } // Get ChannelInfo for Output for (int i = 0; i < capability.NbOutputChannels; i++) { capability.OutputChannelInfos[i] = driver.GetChannelInfo(i, false); } // Get the current SampleRate capability.SampleRate = driver.GetSampleRate(); var error = driver.GetLatencies(out capability.InputLatency, out capability.OutputLatency); // focusrite scarlett 2i4 returns ASE_NotPresent here if (error != AsioError.ASE_OK && error != AsioError.ASE_NotPresent) { var ex = new AsioException("ASIOgetLatencies"); ex.Error = error; throw ex; } // Get BufferSize driver.GetBufferSize(out capability.BufferMinSize, out capability.BufferMaxSize, out capability.BufferPreferredSize, out capability.BufferGranularity); }
private void HandleException(AsioError error, string methodName) { if (error != AsioError.ASE_OK && error != AsioError.ASE_SUCCESS) { throw new AsioException(string.Format("Error code [{0}] while calling ASIO method <{1}>, {2}", AsioException.getErrorName(error), methodName, this.GetErrorMessage())) { Error = error }; } }