【问题标题】:speedup or mute audio playback in a windows process via hooking calls通过挂钩调用在 Windows 进程中加速或静音音频播放
【发布时间】:2011-03-21 02:21:58
【问题描述】:

我有一个应用程序,我没有用于播放音频的源代码,但缺少加速或暂时静音音频播放的功能。我正在尝试通过注入 dll 并连接 waveOutOpen、waveOutWrite 来添加这两个功能(并分别阻止播放或尝试 waveOutSetPlaybackRate 以实现静音和加速)。但是我有几个问题。

让我们先谈谈“静音”按钮,因为这是我的第一笔业务: 我将函数的钩子版本称为 MyWaveOut...

1) 我可以毫无问题地挂钩这些函数,并且我看到它们在 dbgView 日志语句中被调用。我的第一次尝试是拦截waveOutWrite 函数调用,如果按下我的“静音”按钮只是在MyWaveOutWrite 函数中返回MMSYSERR_NOERROR 而不是调用真正的waveOutWrite。这正确地阻止了音频播放,但是当我关闭“静音”时遇到问题。当我禁用静音时,音频不再播放,实际上钩子函数(也不是真正的函数)被钩子进程再次调用。

我的第一个怀疑是我在调用 WaveOutOpen 时没有调用应用程序注册的回调 waveOutProc。因此,我还挂钩了 waveOutOpen 并保留并将 waveOutProc 的地址切换到 MyWaveOutProc 并添加逻辑以在 MyWaveOutWrite 中返回相同的 MMSYSERR_NOERROR 之前调用真正的 waveOutProc。这产生了奇怪的结果,导致播放视觉效果非常快地向前跳跃,但是我遇到了同样的问题,即音频没有返回(MyWaveOutWrite 函数再也没有调用过)。

2)

至于音频加速部分,我尝试使用 waveOutSetPlaybackRate 但这只是返回了 MSYSERR_NOTSUPPORTED 所以我走到了死胡同。挂钩 GetTickCount 和 QueryPerformanceCounter 对音频播放完全没有影响,如果禁用音频,视觉播放指示器会快速向前跳,但是当启用音频设备时,视觉似乎甚至绑定到音频播放的速率.

如果有遇到这些问题的人提供任何帮助,我们将不胜感激。我通常不使用 Windows 音频,所以这对我来说是一种学习体验。

谢谢

【问题讨论】:

    标签: c windows audio hook


    【解决方案1】:

    对不同方法的建议。

    这假设操作系统来自 Vista Kernnel 或更高版本。 在这些操作系统中,有一个 pr 应用程序音量控制,在这里将其静音可能比使用任何挂钩更简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-27
      • 2013-09-22
      相关资源
      最近更新 更多