使用 NAudio 更改默认音频输出设备
Change default audio output device with NAudio
我想用 NAudio 更改 windows 10 个默认音频输出。
NAudio 有一个 api 来获取默认音频端点:
var enumerator = new MMDeviceEnumerator();
var audioOutputDevice = enumerator.GetDefaultAudioEndpoint(DataFlow.Render, Role.Console);
我想设置默认音频端点。
最后我找不到任何关于 NAudio 的解决方案。我用 PowerShell 来做:
从 here.
添加 AudioDeviceCmdlets nuget 包到您的项目
然后我们应该使用Set-AudioDevice
命令来设置默认音频设备。它使用设备 ID 或索引。在 C# 代码中,我们需要一个 PowerShell nuget 包。该包已添加为 AudioDeviceCmdlets nuget 包的依赖项,因此请不要执行任何操作并转到下一步。
使用此代码设置默认设备:
InitialSessionState iss = InitialSessionState.CreateDefault();
iss.ImportPSModule(new string[]
{
Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "AudioDeviceCmdlets.dll")
});
Runspace runspace = RunspaceFactory.CreateRunspace(iss);
runspace.Open();
Pipeline pipeline = runspace.CreatePipeline();
Command command_set = new Command("Set-AudioDevice");
CommandParameter param_set = new CommandParameter("ID", id);
command_set.Parameters.Add(param_set);
pipeline.Commands.Add(command_set);
// Execute PowerShell script
var results = pipeline.Invoke();
我将此添加为更改音频设备的更简单方法。我查看了您提到的源库 AudioDeviceCmdlets,并且找到了另一种方法。
查看 class AudioDeviceCmdlets you can find this piece of code at line 429,其中 DeviceCollection[i].ID 是新设备的 ID:
// Create a new audio PolicyConfigClient
PolicyConfigClient client = new PolicyConfigClient();
// Using PolicyConfigClient, set the given device as the default playback communication device
client.SetDefaultEndpoint(DeviceCollection[i].ID, ERole.eCommunications);
// Using PolicyConfigClient, set the given device as the default playback device
client.SetDefaultEndpoint(DeviceCollection[i].ID, ERole.eMultimedia);
好吧,就像导入这个库并进行相同的调用一样简单:
public void SetDefaultMic(string id)
{
if (string.IsNullOrEmpty(id)) return;
CoreAudioApi.PolicyConfigClient client = new CoreAudioApi.PolicyConfigClient();
client.SetDefaultEndpoint(id, CoreAudioApi.ERole.eCommunications);
client.SetDefaultEndpoint(id, CoreAudioApi.ERole.eMultimedia);
}
此外,通过这种方式,当在分离的线程上与 NAudio 结合使用时,您不会得到强制转换异常(添加此注释是因为它发生在我身上)。
我想用 NAudio 更改 windows 10 个默认音频输出。
NAudio 有一个 api 来获取默认音频端点:
var enumerator = new MMDeviceEnumerator();
var audioOutputDevice = enumerator.GetDefaultAudioEndpoint(DataFlow.Render, Role.Console);
我想设置默认音频端点。
最后我找不到任何关于 NAudio 的解决方案。我用 PowerShell 来做:
从 here.
添加 AudioDeviceCmdlets nuget 包到您的项目然后我们应该使用
Set-AudioDevice
命令来设置默认音频设备。它使用设备 ID 或索引。在 C# 代码中,我们需要一个 PowerShell nuget 包。该包已添加为 AudioDeviceCmdlets nuget 包的依赖项,因此请不要执行任何操作并转到下一步。使用此代码设置默认设备:
InitialSessionState iss = InitialSessionState.CreateDefault();
iss.ImportPSModule(new string[]
{
Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "AudioDeviceCmdlets.dll")
});
Runspace runspace = RunspaceFactory.CreateRunspace(iss);
runspace.Open();
Pipeline pipeline = runspace.CreatePipeline();
Command command_set = new Command("Set-AudioDevice");
CommandParameter param_set = new CommandParameter("ID", id);
command_set.Parameters.Add(param_set);
pipeline.Commands.Add(command_set);
// Execute PowerShell script
var results = pipeline.Invoke();
我将此添加为更改音频设备的更简单方法。我查看了您提到的源库 AudioDeviceCmdlets,并且找到了另一种方法。
查看 class AudioDeviceCmdlets you can find this piece of code at line 429,其中 DeviceCollection[i].ID 是新设备的 ID:
// Create a new audio PolicyConfigClient
PolicyConfigClient client = new PolicyConfigClient();
// Using PolicyConfigClient, set the given device as the default playback communication device
client.SetDefaultEndpoint(DeviceCollection[i].ID, ERole.eCommunications);
// Using PolicyConfigClient, set the given device as the default playback device
client.SetDefaultEndpoint(DeviceCollection[i].ID, ERole.eMultimedia);
好吧,就像导入这个库并进行相同的调用一样简单:
public void SetDefaultMic(string id)
{
if (string.IsNullOrEmpty(id)) return;
CoreAudioApi.PolicyConfigClient client = new CoreAudioApi.PolicyConfigClient();
client.SetDefaultEndpoint(id, CoreAudioApi.ERole.eCommunications);
client.SetDefaultEndpoint(id, CoreAudioApi.ERole.eMultimedia);
}
此外,通过这种方式,当在分离的线程上与 NAudio 结合使用时,您不会得到强制转换异常(添加此注释是因为它发生在我身上)。