C# 如何以编程方式更改播放设备

发布于 2024-08-07 17:02:15 字数 61 浏览 8 评论 0原文

如何以编程方式更改 vista / win 7 系统上的默认音频设备?使用 C# 或 Win API 调用?

How can I programatically change the default audio device on a vista / win 7 system? Using C# or a Win API call?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

笑饮青盏花 2024-08-14 17:02:15

WinMM API 应提供您请求的功能。

您将使用 DRVM_MAPPER_PREFERRED_SET 消息,该消息通过 waveOutMessage() 函数发送。

文档: http://msdn.microsoft.com/en-us/library/ aa909789.aspx

但是,如果您尝试自己发送波形声音,则应该查看 WinMM.Net 库。

http://winmm.codeplex.com

The WinMM API should provide the functionality that you request.

You would use the DRVM_MAPPER_PREFERRED_SET message, which is sent with waveOutMessage() function.

Documentation: http://msdn.microsoft.com/en-us/library/aa909789.aspx

However, if you are trying to send the waveform sound out yourself, you should look at the WinMM.Net library.

http://winmm.codeplex.com

二货你真萌 2024-08-14 17:02:15

我发现 AudioSwitcher 构造函数在我的情况下特别慢。

我建议使用 "CoreAudio " 用于管理音频设备的 API。

这是当前的包装器库可在 NuGet 上使用。
https://github.com/morphx666/CoreAudio/tree/master

设置设备:

public static void SetDefaultDevice(string id) {
    MMDeviceEnumerator deviceEnum = new MMDeviceEnumerator(Guid.NewGuid());
    MMDevice device = deviceEnum.GetDevice(id);
    deviceEnum.SetDefaultAudioEndpoint(device);
}

获取设备

public static MMDeviceCollection GetAudioDevices() {
    MMDeviceEnumerator deviceEnum = new MMDeviceEnumerator(Guid.NewGuid());
    return deviceEnum.EnumerateAudioEndPoints(DataFlow.Render, DeviceState.Active);
}

I found the AudioSwitcher constructor to be extra slow in my case.

I suggest using the "CoreAudio" API for managing audio devices.

Here is a current wrapper library available on NuGet.
https://github.com/morphx666/CoreAudio/tree/master

Set device:

public static void SetDefaultDevice(string id) {
    MMDeviceEnumerator deviceEnum = new MMDeviceEnumerator(Guid.NewGuid());
    MMDevice device = deviceEnum.GetDevice(id);
    deviceEnum.SetDefaultAudioEndpoint(device);
}

Get devices

public static MMDeviceCollection GetAudioDevices() {
    MMDeviceEnumerator deviceEnum = new MMDeviceEnumerator(Guid.NewGuid());
    return deviceEnum.EnumerateAudioEndPoints(DataFlow.Render, DeviceState.Active);
}
梦初启 2024-08-14 17:02:15

现在(实际上已经很长一段时间了)可以使用 AudioSwitcher.AudioApi 轻松完成此操作.CoreAudio NuGet 包

只需创建一个新的 CoreAudioController:

var controller = new AudioSwitcher.AudioApi.CoreAudio.CoreAudioController();

使用其 GUID 获取所需的设备:

var device = controller.GetDevice(Guid.Parse(...));

最后将其设置为默认播放设备:

controller.DefaultPlaybackDevice = device;

This can now (actually for quite some time already) be done very easily using the AudioSwitcher.AudioApi.CoreAudio NuGet package.

Simply create a new CoreAudioController:

var controller = new AudioSwitcher.AudioApi.CoreAudio.CoreAudioController();

Get hold of the desired device using its GUID:

var device = controller.GetDevice(Guid.Parse(...));

And lastly set it as the default playback device:

controller.DefaultPlaybackDevice = device;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文