Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何更改麦克风的音量_C#_Wpf_Audio - Fatal编程技术网

C# 如何更改麦克风的音量

C# 如何更改麦克风的音量,c#,wpf,audio,C#,Wpf,Audio,我想更改本地计算机麦克风的音量。我做了很多研究,发现了这些链接 -->这是给代码项目链接,但它是如此混合项目,我只想改变麦克风的声音水平 -->这又给了一个项目,它是如此的被编译,而ı无法构建项目 试试这个 它仅适用于exe的语音级别,如lync、skype。它需要进程名。麦克风exe可以经常更换。所以我无法给出稳定的名字。我想尝试win32 change,那么如何更改麦克风音量?ı想要增加和降低声级 公共静态void SetMicrophoneVolume(字符串名称、浮动级别) 此处为完

我想更改本地计算机麦克风的音量。我做了很多研究,发现了这些链接

-->这是给代码项目链接,但它是如此混合项目,我只想改变麦克风的声音水平

-->这又给了一个项目,它是如此的被编译,而ı无法构建项目

试试这个

它仅适用于exe的语音级别,如lync、skype。它需要进程名。麦克风exe可以经常更换。所以我无法给出稳定的名字。我想尝试win32 change,那么如何更改麦克风音量?ı想要增加和降低声级

公共静态void SetMicrophoneVolume(字符串名称、浮动级别)

此处为完整代码

   private static List<ISimpleAudioVolume> getAppVol(string name, EDataFlow eDataFlow)
{
  List<ISimpleAudioVolume> simpleAudioVolList = new System.Collections.Generic.List<ISimpleAudioVolume>();
  // get the speakers (1st render + multimedia) device
  IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator)(new MMDeviceEnumerator());
  IMMDevice speakers;
  deviceEnumerator.GetDefaultAudioEndpoint(eDataFlow, ERole.eMultimedia, out speakers);

  // activate the session manager. we need the enumerator
  Guid IID_IAudioSessionManager2 = typeof(IAudioSessionManager2).GUID;
  object o;
  speakers.Activate(ref IID_IAudioSessionManager2, 0, IntPtr.Zero, out o);
  IAudioSessionManager2 mgr = (IAudioSessionManager2)o;

  // enumerate sessions for on this device
  IAudioSessionEnumerator sessionEnumerator;
  mgr.GetSessionEnumerator(out sessionEnumerator);
  int count;
  sessionEnumerator.GetCount(out count);

  for(int i = 0; i < count; i++)
  {
    IAudioSessionControl ctl;
    sessionEnumerator.GetSession(i, out ctl);
    IAudioSessionControl2 sessionCtl = ctl as IAudioSessionControl2;
    uint processId;
    string displayName;
    string iconPath;
    string sessionIdentifier;
    string sessionInstanceIdentifier;
    sessionCtl.GetProcessId(out processId);
    sessionCtl.GetDisplayName(out displayName);
    sessionCtl.GetIconPath(out iconPath);
    sessionCtl.GetSessionIdentifier(out sessionIdentifier);
    sessionCtl.GetSessionInstanceIdentifier(out sessionInstanceIdentifier);
    Debug.WriteLine("process id:" + processId + " name:" + displayName + " icon:" + iconPath + " sessionIdentifier:" + sessionIdentifier + " sessionInstanceIdentifier:" + sessionInstanceIdentifier);
    //Process process = Process.GetProcessesByName(name).FirstOrDefault<Process>(delegate(Process item) { return processId == item.Id; });
    if(sessionIdentifier.Contains(name))
    {
      simpleAudioVolList.Add((ISimpleAudioVolume)sessionCtl);
    }
  }
  Marshal.ReleaseComObject(sessionEnumerator);
  Marshal.ReleaseComObject(mgr);
  Marshal.ReleaseComObject(speakers);
  Marshal.ReleaseComObject(deviceEnumerator);
  return simpleAudioVolList;
}

private static void releasesimpleAudioVolList(List<ISimpleAudioVolume> volumeControlList)
{
  foreach(ISimpleAudioVolume item in volumeControlList)
  {
    Marshal.ReleaseComObject(item);
  }
}

public static void SetMicrophoneVolume(string name, float level)
{
  List<ISimpleAudioVolume> volumeList = getAppVol(name, EDataFlow.eCapture);

  Guid guid = Guid.Empty;
  foreach(ISimpleAudioVolume item in volumeList)
  {
    try
    {
      item.SetMasterVolume(level / 100, ref guid);
    }
    catch(Exception ex)
    {
      Debug.WriteLine(ex.ToString());
    }
  }
  releasesimpleAudioVolList(volumeList);
  return;
}
私有静态列表getAppVol(字符串名,EDataFlow-EDataFlow) { List simpleudiovollist=new System.Collections.Generic.List(); //获取扬声器(第一个渲染+多媒体)设备 IMMDeviceEnumerator deviceEnumerator=(IMMDeviceEnumerator)(新的MMDeviceEnumerator()); 设备扬声器; deviceEnumerator.GetDefaultAudioEndpoint(eDataFlow、ERole.eMultimedia、out扬声器); //激活会话管理器。我们需要枚举器 Guid IID_IAudioSessionManager2=typeof(IAudioSessionManager2).Guid; 对象o; 扬声器。激活(参考IID_IAudioSessionManager2,0,输入零,输出o); IAudioSessionManager2管理器=(IAudioSessionManager2)o; //枚举此设备上的会话 IAudioSessionEnumerator sessionEnumerator; 经理GetSessionEnumerator(外部sessionEnumerator); 整数计数; sessionnumerator.GetCount(out count); for(int i=0;i我认为这取决于您的windows版本,因为播放设备的音量也存在同样的问题。也许你想具体说明一下?我不想添加不包含c的外包库。请尝试下面的代码。我想更改本地电脑的麦克风,而不是扬声器或其他exe。我只是做了一个参考,因为您的问题需要每个windows版本的不同解决方案,并且您可能希望指定要支持的windows版本。就这些。谢谢你,但是如果你能改变win32,我想它可以是所有的windows版本