我想用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:
-
从这里向您的项目添加AudioDeviceCmdletsnuget包。
-
然后我们应该使用
Set-AudioDevice
命令来设置默认的音频设备。它使用设备id或索引。在C#代码中,我们需要一个PowerShellnuget包。该程序包已作为AudioDeviceCmdletsnuget程序包的依赖项添加,因此不采取任何操作并转到下一步。 -
使用此代码设置默认设备:
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();