【问题标题】:Controlling a Specific Application's Volume Level控制特定应用程序的音量级别
【发布时间】:2014-01-20 10:07:56
【问题描述】:

NAudio 可以用于设置特定应用程序的音量吗? { 在 Windows 7 上}

我找到了this thread,指的是这个问题,建议通过 WASAPI 自行实现所需的解决方案,但我更喜欢更简单的解决方案,最好是使用 NAudio 包装器,如果有的话。

我还发现了this WASAPI-based solution,它(对我来说,超过 32 位 Windows 7 Professional)没有枚举所有音频播放应用程序,因此 - 不适用。

我真正想要实现的目标:我正在使用一个商业应用程序播放一长串各种质量和音频级别的音频文件。我想对该应用程序应用 AGC(自动增益控制,即音量级别标准化),以至少“模糊”(如果不能完全消除)播放曲目之间音量级别的差异。

作为第一阶段,我可以假设这个应用程序是唯一在系统上产生音频的应用程序,并且只处理 Windows 的主要音频路径样本,但我也不知道如何实现。 NAudio 能否干扰音频路径,在音频样本到达扬声器插孔之前修改(即放大它们)?

请注意,仅更改 Windows 主音量表并不能解决问题,因为它不会反映在 NAudio/WASAPI Loopback 捕获的样本幅度中。

NAudio 是首选方法,但不是必须的。

【问题讨论】:

  • 您是否测量响度并将其捕获?为什么不能在发送到输出设备之前对其进行规范化?考虑到“尝试完成”部分,这更有意义。
  • 在将音频发送到输出设备之前,如何规范化非我制作的(而是由外部现成的应用程序制作)?
  • 实际上没有提到该应用程序不是您的。尽管我可能会假设,这是重要的细节。那时,馈送至真实或虚拟的音频输出设备似乎是不可避免的。
  • 前一句是“我正在使用一个应用程序正在播放长序列...”。我已经重新措辞了,以免这种误解再次发生。无论如何,感谢您的善意协助。
  • 控制应用程序音量...看看这个:stackoverflow.com/questions/21200825/…

标签: volume naudio wasapi


【解决方案1】:

NAudio 确实为 Windows Core Audio API 的许多部分提供了封装,但不包括 Roman 在 the answer you linked to 中提到的 [IAudioSessionEnumerator][1]。这部分 API 似乎是在 Windows 7 中引入的。

所以恐怕 NAudio 在这里帮不了你,你需要将 Roman 的代码移植到 C#,这需要你为 IAudioSessionEnumerator 和相关接口(如 IAudioSessionManager 和 IAudioSessionControl)创建互操作包装器。

【讨论】:

  • 感谢马克的回答。实际上,我已经尝试过 sn-p Roman 建议 on his answer,但它不起作用(对我来说,超过 32 位 Windows 7 Professional),因为它没有枚举系统上的所有音频播放应用程序。
  • 马克,如果您看一下添加到问题中的新“我实际上想要完成的工作”段落,我将不胜感激。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-01
  • 1970-01-01
  • 2014-01-23
  • 2011-12-18
  • 2011-06-04
相关资源
最近更新 更多