/// <summary> /// Handles the exception. Throws an exception based on the error. /// </summary> /// <param name="error">The error to check.</param> /// <param name="methodName">Method name</param> private void HandleException(AsioError error, string methodName) { if (error != AsioError.ASE_OK && error != AsioError.ASE_SUCCESS) { var asioException = new AsioException( $"Error code [{AsioException.getErrorName(error)}] while calling ASIO method <{methodName}>, {this.GetErrorMessage()}"); asioException.Error = error; throw asioException; } }
/// <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); }