使用NAudio更改默认音频输出设备



我想用NAudio更改windows 10的默认音频输出。

NAudio有一个api来获取默认的音频端点:

var enumerator = new MMDeviceEnumerator();
var audioOutputDevice = enumerator.GetDefaultAudioEndpoint(DataFlow.Render, Role.Console);

我想设置默认的音频端点。

我添加它是为了更简单地更改音频设备。我看过你提到的源代码库AudioDeviceCmdlet,我找到了另一种方法。

查看AudioDeviceCmdlet类,您可以在第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的任何解决方案。我使用PowerShell:

  1. 从这里向您的项目添加AudioDeviceCmdletsnuget包。

  2. 然后我们应该使用Set-AudioDevice命令来设置默认的音频设备。它使用设备id或索引。在C#代码中,我们需要一个PowerShellnuget包。该程序包已作为AudioDeviceCmdletsnuget程序包的依赖项添加,因此不采取任何操作并转到下一步。

  3. 使用此代码设置默认设备:

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();

最新更新