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

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

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

我正在使用 Visual Studio 2015

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

任何帮助将不胜感激。

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

【问题讨论】:

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

标签: .net vb.net audio uwp iot


【解决方案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,它将为您的应用程序提供此功能。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-08
          • 1970-01-01
          • 1970-01-01
          • 2018-11-16
          • 2014-02-07
          • 1970-01-01
          相关资源
          最近更新 更多