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