Beispiel #1
0
        /// <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));
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
        /// <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;
 }
Beispiel #5
0
        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)
 {
 }