如何获取和设置通用 Windows 应用程序的音量级别

Posted

技术标签:

【中文标题】如何获取和设置通用 Windows 应用程序的音量级别【英文标题】:how to get and set audio volume level for a Universal Windows application 【发布时间】:2016-04-06 09:35:05 【问题描述】:

标题说明了一切,我想获取和设置通用 Windows (iot) 应用程序的音量级别。

它可以是与我的特定应用程序相关的声级 - 这将是理想的;或者它可以是系统声级 - 如果需要/可能的话。

我正在使用 Visual Studio 2015

我一直在寻找示例/示例,但都没有找到。

任何帮助将不胜感激。

(请注意,这不是一个重复的问题 - 我想为通用 Windows 应用程序获取和设置音量级别 - 这不能通过 uwp 中的 COM 对象来完成 - uwp 应用程序也不使用 VBScript 或 JScript)

【问题讨论】:

无法从通用 Windows 应用程序访问任意 COM 对象 - 参考:***.com/questions/32042324/… @Rob-您链接的答案是正确的。 @Codexer - UWP 应用不使用 VBScript 或 JScript。 通常(至少我总是这样找到解决方案)在 C# 中不可用的 C++ 代码中,例如系统字体、系统类型(7'' 或更多),明天我可以看看有没有那样的东西 【参考方案1】:

无需制作 WinRT 组件。相反,您可以使用 P/Invoke 访问 win32 音频接口。

查看my code (Gist),了解如何在 C# 中执行此操作。

【讨论】:

【参考方案2】:

看这个源码:https://github.com/File-New-Project/EarTrumpet

它将包含您要查找的内容。

【讨论】:

我尝试深入研究,但找不到所需的代码 - 当我深入研究时,我发现了与 naudio 匹配的代码;但我也无法让 naudio 在 windows iot 平台上工作 - 不想枚举声音设备。 我不敢相信改变音量这么简单的事情竟然这么难。 【参考方案3】:

您可以使用 MediaPlayer Volume 属性控制您自己的应用程序的音量。它不控制整个系统的音量,但它允许您设置自己的应用程序音量。

https://msdn.microsoft.com/en-us/library/windows/apps/windows.media.playback.mediaplayer.volume.aspx

例如,我有一个视图模型,其中公开了以下属性,并且绑定了滑块控件的 value 属性。 (我的滑块的最小值为 0,最大值为 100,这就是为什么我将 MediaPlayer 的音量属性的 0-1 值转换为 0-100 的范围。)

(注意:我还有一个“BackgroundAudioservice”单例来包装对背景音频 MediaPlayer 的引用,就像 github 上的 UWP 示例背景音频项目演示的那样,但它只是对 MediaPlayer 的引用。)

    public double Volume
    
        get
           
            this.volume = (BackgroundAudioService.Instance.CurrentPlayer.Volume * 100);
            return this.volume;
        

        set
        
            this.volume = value;
            BackgroundAudioService.Instance.CurrentPlayer.Volume = (this.volume / 100);
            this.RaisePropertyChanged();
        
    

如果这不起作用,请尝试检查并设置系统的音量,因为此方法仅控制您的应用的音量。

【讨论】:

【参考方案4】:

我一直在寻找同样的东西,但我找到了我想要的东西。所以,我觉得有义务在这里发布(和分享)我的发现。

为了控制整个系统的音量,您可以使用Sound Global API

ElementSoundPlayer.Volume = 0.5f;

应用程序中的所有声音都可以通过音量控制调暗。但是,应用内的声音不能超过系统音量。

【讨论】:

【参考方案5】:

其实是有记录的。

您可以像在桌面应用程序中使用 IAudioEndpointVolume 一样获取或设置音频设备的音量,文档声明它在 Windows 应用商店应用程序中受支持。

要在 UWP 应用中为特定设备激活此接口,您需要使用 ActivateAudioInterfaceAsync 函数。有UWP sample codes展示了如何使用这个功能来激活IAudioClient接口。除了IAudioEndpointVolume 接口,你也可以做同样的事情。

最后,目前,此 API 仅在 C++ 中可用。如果您想从 C# 或 VB UWP 应用程序中执行此操作,您可以在 C++CX 中创建一个 RuntimeComponent,它将为您的应用程序提供此功能。

【讨论】:

以上是关于如何获取和设置通用 Windows 应用程序的音量级别的主要内容,如果未能解决你的问题,请参考以下文章

如何在 windows xp 中获取主音量?

在 Windows 应用程序中获取声卡输出音量

GET Windows XP/Vista/Seven 中的主音量(通常通过键盘滚轮增加的那个)

如何使用 Core Audio 设置/获取音量级别?

如何使用 C# 使用 ALSA 在 Linux 中获取和设置音量?

如何设置“音量:-postgres”Windows 10