【问题标题】:volume control in c#. How do I assign a value to the volume? [duplicate]c#中的音量控制。如何为卷分配值? [复制]
【发布时间】:2020-01-13 01:02:59
【问题描述】:

在我的程序中,我可以使用系统变量来增加音量和减小音量,例如

    private const int APPCOMMAND_VOLUME_MUTE = 0x80000;
    private const int APPCOMMAND_VOLUME_UP = 0xA0000;
    private const int APPCOMMAND_VOLUME_DOWN = 0x90000;
    private const int WM_APPCOMMAND = 0x319;

但是是否有一个系统变量允许我为其分配一个值。例如,将音量设置为 57,而不是增加或减少以达到该值。

最终想要做的是使用轨迹栏来调整音量。向任一方向拖动时,trackbar 应等于系统音量,以相应地更改音量。

【问题讨论】:

标签: c# volume


【解决方案1】:

您可以使用 NuGet 包 AudioSwitcher.AudioApi.CoreAudio 作为回答这里: How to programmatically set the system volume?

通过代码:

CoreAudioDevice defaultPlaybackDevice = new CoreAudioController().DefaultPlaybackDevice;
Debug.WriteLine("Current Volume:" + defaultPlaybackDevice.Volume);
defaultPlaybackDevice.Volume = 80;

注意:如果设备静音它不会取消静音,它会在默认播放设备上将音量设置在 [0;100] 范围内,所以如果你想取消静音,你应该调用:

defaultPlaybackDevice.Mute(false);

为了您的目的,它还提供事件 VolumeChanged 和 MuteChanged 来跟踪内部音量变化。

在内部,它使用 Core Audio API,它是基于 COM 的低级音频控制 API,在 Windows Vista 启动时提供。

如果你想编写自己的包装器来做这样的事情,你应该看到 IAudioEndpointVolume 接口 (https://docs.microsoft.com/en-us/windows/win32/api/endpointvolume/nn-endpointvolume-iaudioendpointvolume)

内部音量通知实现为结构 AUDIO_VOLUME_NOTIFICATION_DATA (https://docs.microsoft.com/en-us/windows/win32/api/endpointvolume/ns-endpointvolume-audio_volume_notification_data) 中提供的信息内的回调

此外,如果您希望您的应用支持 Windows XP,您应该使用旧版 WinMM API 及其函数 waveOutSetVolume。

【讨论】:

  • 谢谢,我在哪里可以获得音频切换器 api。当我尝试使用代码时无法将 coreaudiodevice 识别为有效数据类型。
  • 使用 NuGet 包管理器在您的项目中安装 NuGet 包。链接到这些 nuget:nuget.org/packages/AudioSwitcher.AudioApi.CoreAudio
  • 谢谢。我能够获得 github 的 dll。来自其他项目。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-17
  • 2012-06-09
  • 2012-01-01
  • 1970-01-01
相关资源
最近更新 更多