/// <summary> /// Opens the audio track with the specified parameters /// </summary> /// <param name="sampleRate">The requested sample rate of the track</param> /// <param name="channelCount">The requested channel count of the track</param> /// <param name="callback">A <see cref="ReleaseCallback" /> that represents the delegate to invoke when a buffer has been released by the audio track</param> /// <param name="format">The requested sample format of the track</param> public void Open( int sampleRate, int channelCount, ReleaseCallback callback, SoundIOFormat format = SoundIOFormat.S16LE) { // Close any existing audio streams if (AudioStream != null) { Close(); } if (!AudioDevice.SupportsSampleRate(sampleRate)) { throw new InvalidOperationException($"This sound device does not support a sample rate of {sampleRate}Hz"); } if (!AudioDevice.SupportsFormat(format)) { throw new InvalidOperationException($"This sound device does not support SoundIOFormat.{Enum.GetName(typeof(SoundIOFormat), format)}"); } AudioStream = AudioDevice.CreateOutStream(); AudioStream.Name = $"SwitchAudioTrack_{TrackID}"; AudioStream.Layout = SoundIOChannelLayout.GetDefault(channelCount); AudioStream.Format = format; AudioStream.SampleRate = sampleRate; AudioStream.WriteCallback = WriteCallback; BufferReleased += callback; AudioStream.Open(); }