/// <summary> /// Determines whether if the specified output format is supported /// </summary> /// <param name="shareMode">The share mode.</param> /// <param name="desiredFormat">The desired format.</param> /// <returns> /// <c>true</c> if [is format supported] [the specified share mode]; otherwise, <c>false</c>. /// </returns> public bool IsFormatSupported(EAudioClientShareMode shareMode, WaveFormat desiredFormat) { WaveFormatExtensible closestMatchFormat; return(IsFormatSupported(shareMode, desiredFormat, out closestMatchFormat)); }
/// <summary> /// /// </summary> /// <param name="shareMode"></param> /// <param name="desiredFormat"></param> /// <returns></returns> public WaveFormatExtensible CheckSupportFormat(EAudioClientShareMode shareMode, WaveFormat desiredFormat) { WaveFormatExtensible closestMatchFormat; int hresult = _realAudioClient.IsFormatSupported(shareMode, desiredFormat, out closestMatchFormat); return(closestMatchFormat); }
/// <summary> /// Determines if the specified output format is supported in shared mode /// </summary> /// <param name="shareMode">Share Mode</param> /// <param name="desiredFormat">Desired Format</param> /// <param name="closestMatchFormat">Output The closest match format.</param> /// <returns> /// <c>true</c> if [is format supported] [the specified share mode]; otherwise, <c>false</c>. /// </returns> public bool IsFormatSupported(EAudioClientShareMode shareMode, WaveFormat desiredFormat, out WaveFormatExtensible closestMatchFormat) { int hresult = _realAudioClient.IsFormatSupported(shareMode, desiredFormat, out closestMatchFormat); // S_OK is 0, S_FALSE = 1 if (hresult == 0) { // directly supported return(true); } if (hresult == 1) { return(false); } //else if (hresult == (int)AudioClientErrors.UnsupportedFormat) //{ // return false; //} else { Marshal.ThrowExceptionForHR(hresult); } // shouldn't get here throw new NotSupportedException("Unknown hresult " + hresult.ToString()); }
/// <summary> /// Creates a new WASAPI Output /// </summary> /// <param name="device">Device to use</param> /// <param name="shareMode"></param> /// <param name="useEventSync">true if sync is done with event. false use sleep.</param> /// <param name="latency"></param> public WasapiRender(MMDevice device, EAudioClientShareMode shareMode, bool useEventSync, int latency) { this.audioClient = device.AudioClient; this.shareMode = shareMode; this.isUsingEventSync = useEventSync; this.latencyMilliseconds = latency; this.syncContext = SynchronizationContext.Current; }
public void Initialize(EAudioClientShareMode shareMode, EAudioClientStreamFlags streamFlags, long bufferDuration, long periodicity, WaveFormat format, Guid audioSessionGuid) { var hresult = _realAudioClient.Initialize(shareMode, streamFlags, bufferDuration, periodicity, format, ref audioSessionGuid); Marshal.ThrowExceptionForHR(hresult); // may have changed the mix format so reset it mixFormat = null; }
/// <summary> /// WASAPI Out using default audio endpoint /// </summary> /// <param name="shareMode">ShareMode - shared or exclusive</param> /// <param name="useEventSync">true if sync is done with event. false use sleep.</param> /// <param name="latency">Desired latency in milliseconds</param> public WasapiRender(EAudioClientShareMode shareMode, bool useEventSync, int latency) : this(GetDefaultAudioEndpoint(), shareMode, useEventSync, latency) { }
/// <summary> /// WASAPI Out using default audio endpoint /// </summary> /// <param name="shareMode">ShareMode - shared or exclusive</param> /// <param name="latency">Desired latency in milliseconds</param> public WasapiRender(EAudioClientShareMode shareMode, int latency) : this(GetDefaultAudioEndpoint(), shareMode, true, latency) { }