控制容积混合器

我想控制其他应用程序卷(firefox)

我可以用混音器

混音器的库是什么

下面是一个示例C#控制台应用程序。它基于Windows核心音频库。它仅适用于Windows 7及更高版本

使用系统;
使用System.Runtime.InteropServices;
使用System.Collections.Generic;
名称空间setAppVolume
{
班级计划
{
静态void Main(字符串[]参数)
{
const string app=“Mozilla Firefox”;
foreach(枚举应用程序()中的字符串名称)
{
Console.WriteLine(“名称:”+名称);
if(name==app)
{
//显示静音状态和音量级别(占主机的百分比)
Console.WriteLine(“静音:+GetApplicationMute(app));
Console.WriteLine(“卷:+GetApplicationVolume(app));
//使应用程序静音
SetApplicationMute(应用程序,true);
//将音量设置为主音量的一半(50%)
设置应用程序卷(应用程序,50);
}
}
}
公共静态浮点?GetApplicationVolume(字符串名称)
{
ISimpleAudioVolume=GetVolumeObject(名称);
如果(卷==null)
返回null;
浮子液位;
音量。GetMasterVolume(外部音量);
返回级别*100;
}
公共静态bool?GetApplicationMute(字符串名称)
{
ISimpleAudioVolume=GetVolumeObject(名称);
如果(卷==null)
返回null;
布尔静音;
音量。GetMute(输出静音);
返回静音;
}
公共静态void SetApplicationVolume(字符串名称、浮动级别)
{
ISimpleAudioVolume=GetVolumeObject(名称);
如果(卷==null)
回来
Guid=Guid.Empty;
卷。SetMasterVolume(级别/100,参考guid);
}
公共静态void SetApplicationMute(字符串名称,布尔静音)
{
ISimpleAudioVolume=GetVolumeObject(名称);
如果(卷==null)
回来
Guid=Guid.Empty;
音量设置静音(静音,参考guid);
}
公共静态IEnumerable<string>EnumerateApplications()
{
//获取扬声器(第一个渲染+多媒体)设备
IMMDeviceEnumerator deviceEnumerator=(IMMDeviceEnumerator)(新的MMDeviceEnumerator());
设备扬声器;
deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender、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);
对于(int i=0;i<count;i++)
{
iaudiosessioncontrolctl;
GetSession(i,out ctl);
字符串dn;
ctl.GetDisplayName(out dn);
收益率dn;
元帅释放对象(ctl);
}
Marshal.ReleaseComObject(会话记数器);
发布对象元帅(经理);
发布对象元帅(发言人);
Marshal.ReleaseComObject(设备枚举器);
}
私有静态ISimpleAudioVolume GetVolumeObject(字符串名称)
{
//获取扬声器(第一个渲染+多媒体)设备
IMMDeviceEnumerator deviceEnumerator=(IMMDeviceEnumerator)(新的MMDeviceEnumerator());
设备扬声器;
deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender、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);
//搜索具有所需名称的音频会话
//注意:我们也可以使用进程id而不是应用程序名称(使用IAudioSessionControl2)
ISimpleAudioVolume volumeControl=null;
对于(int i=0;i<count;i++)
{
iaudiosessioncontrolctl;
GetSession(i,out ctl);
字符串dn;
ctl.GetDisplayName(out dn);
if(string.Compare(名称、dn、StringComparison.OrdinalIgnoreCase)==0)
{
volumeControl=ctl作为ISimpleAudioVolume;
打破
}
元帅释放对象(ctl);
}
Marshal.ReleaseComObject(会话记数器);
发布对象元帅(经理);
发布对象元帅(发言人);
Marshal.ReleaseComObject(设备枚举器);
返回容量控制;
}
}
[ComImport]
[Guid(“BCDE0395-E52F-467C-8E3D-C4579291692E”)]
内部类MMDeviceEnumerator
{
}
内部枚举数据流
{
埃伦德,
eCapture,
伊尔,
EDataFlow_enum_count
}
内部枚举
{
eConsole,
乳化剂,
生态通信,
厄洛尔计数
}
[Guid(“A95664D2-9614-4F35-A746-DE8DB63617E6”),接口类型(ComInterfaceType.InterfaceIsIUnknown)]
内部接口IMMDeviceEnumerator
{
int NotImpl1();
[信号]
int GetDefaultAudioEndpoint(EDataFlow数据流、ERole角色、out-IMMDevice-ppDevice);
//其余的没有实施
}
[Guid(“D66063F-1587-4E43-81F1-B948E807363F”),接口类型(ComInterfaceType.InterfaceSiunknown)]
内部接口设备
{
[信号]
int Activate(参考Guid iid、int dwClsCtx、IntPtr pActivationParams、[MarshalAs(UnmanagedType.IUnknown)]输出对象pInterface);
//其余的没有实施
}
[Guid(“77AA99A0-1BD6-484F-8BC7-2C654C9A9B6F”),接口类型(ComInterfaceType.InterfaceSiunknown)]
内部接口IAudioSessionManager 2
{
int NotImpl1();
int NotImpl2();
[信号]
int GetSessionEnumerator(out IAudioSessionEnumerator sessionnum);
//其余的没有实施
}
[Guid(“E2F5BB11-0570-40CA-ACDD-3AA01277DEE8”),接口类型(ComInterfaceType.InterfaceSiunknown)]
内部接口IAudioSessionEnumerator
{
[信号]
int GetCount(out int SessionCount);
[信号]
int GetSession(int SessionCount,out IAudioSessionControl Session);
}
[Guid(“F4B1A599-7266-4319-A8CA-E70ACB11E8CD”),接口类型(ComInterfaceType.InterfaceSiunknown)]
内部接口IAAudioSessionControl
{
int NotImpl1();
[信号]
int GetDisplayName([Marshallas(UnmanagedType.LPWStr)]输出字符串pRetVal);
//其余的没有实施
}
[Guid(“87CE5498-68D6-44E5-9215-6DA47EF883D8”),接口类型(ComInterfaceType.InterfaceSiunknown)]
内部接口为音频音量
{
[信号]
int SetMasterVolume(float-fLevel,ref-Guid-EventContext);
[信号]
int GetMasterVolume(输出浮点pfLevel);
[信号]
int SetMute(bool bMute,ref Guid EventContext);
[信号]
int GetMute(out bool pbMute);
}
}

注意:我没有完全定义接口,只定义了代码工作所需的内容

发表评论