如何使用C#访问Windows音量混合器?

时间:2019-02-04 12:28:38

标签: c# .net audio

我在软件中使用NAudio和AudioSwitcher库。我想更改一个音频设备的音量,如下图所示:

enter image description here

不幸的是,我找不到描述如何使用2个库之一访问此混音器中的音量控件。

在任何地方都有关于该库的文档,或者有人为我提供示例?

到目前为止,我只设法访问了此音量控制,但这与上面的方法不同

enter image description here

对于我设法使用的设置,我使用:

           IEnumerable<CoreAudioDevice> DeviceList = m_Controller.GetPlaybackDevices();

            foreach (CoreAudioDevice PlaybackDevice in DeviceList)
            {
                if (PlaybackDevice != null)
                {
                    if (PlaybackDevice.State == AudioSwitcher.AudioApi.DeviceState.Disabled)
                        continue;

                     string strTmp = PlaybackDevice.FullName.ToUpper();
                     if (PlaybackDevice.FullName.Contains("xxxxx"))
                     {
                         m_PlaybackDevice = PlaybackDevice;
                         m_PlaybackDevice.SetAsDefault();
                         m_PlaybackDevice.SetAsDefaultCommunications();
                         PlaybackDevice.SetVolumeAsync(100);
                    }
                }

            }

但这不是第一张图片的音量设置

更新1:

我尝试使用nAudio示例进行链接

        try
        {

            NAudio.CoreAudioApi.MMDeviceEnumerator MMDE = new NAudio.CoreAudioApi.MMDeviceEnumerator();

            NAudio.CoreAudioApi.MMDeviceCollection DevCol = MMDE.EnumerateAudioEndPoints(NAudio.CoreAudioApi.DataFlow.All, NAudio.CoreAudioApi.DeviceState.All);

            foreach (NAudio.CoreAudioApi.MMDevice dev in DevCol)
            {
                try
                {

                    System.Diagnostics.Debug.Print(dev.FriendlyName);
                    //dev.AudioEndpointVolume.Mute = true;
                }
                catch (Exception ex)
                {
                    //Do something with exception when an audio endpoint could not be muted 
                }
            }
        }
        catch (Exception ex)
        {
            //When something happend that prevent us to iterate through the devices 
        }

但是,这仅给我一张硬件设备列表,而不是第一张图片中的应用程序列表。我需要申请清单。例如当firefox运行时,我可以在该音频混合器面板中更改firefox应用程序的音量。

更新2

            NAudio.CoreAudioApi.MMDeviceEnumerator MMDE = new NAudio.CoreAudioApi.MMDeviceEnumerator();

有时会抛出,但并不总是例外:

  

Blockquote System.InvalidCastException:类型NAudio.CoreAudioApi.Interfaces.MMDeviceEnumeratorComObject中的Typs“ System .__ ComObject” kann nicht“。   bei NAudio.CoreAudioApi.MMDeviceEnumerator..ctor()

有时候可以,但是大多数时候我都会得到强制转换异常

0 个答案:

没有答案