gpt4 book ai didi

c++ - IAudioRenderClient::ReleaseBuffer 钩子(Hook)有时会扭曲音频(试图找到原始音频的类型)

转载 作者:行者123 更新时间:2023-11-28 06:29:28 39 4
gpt4 key购买 nike

我连接到 IAudioClient 和 IAudioRenderClient 以检索原始音频缓冲区。为了确定格式,我之前在客户端调用了 GetMixFormat。这适用于大多数应用程序,例如 Firefox 中的游戏或 Flash Player。

但是,从 Google Chrome (Flash) 捕获的音频失真。我附上了从 Firefox 和 Google Chrome 捕获的相同音频流的简短示例。 GetMixFormat() 报告 IEEE_FLOAT,两者均为 48k 的 2 个 channel 。但是当在 Audacity 中导入它们并使用这些参数时,只有 Firefox 运行良好。事实上,为了让图表在 Chrome 上正确显示,我必须将其导入为 Signed PCM(尽管仍然失真)。

知道 GetMixFormat 错误的原因或 Google Chrome 代码片段使用的格式吗?

作为旁注,我发现 Chrome 示例包含 1 个完整帧(0xF00 字节),然后仅包含半帧(0x780 字节),其余部分填充为零,即使函数报告已写入 0xF00 字节.但即使删除了零数据,我也无处可去。 Chrome 是否以某种方式改变了缓冲区?

文件:

非常感谢任何帮助!提前致谢。

最佳答案

好吧,我通过直接从音频客户端实例读取 WAVEFORMATEX 解决了 GetMixFormat 的问题。虽然它依赖于版本......这是它在 Win 8 中的工作方式:

        mov     eax, pAudioClient
mov eax, [eax + 0x7C]
mov eax, [eax + 0x3C]
mov edi, eax
mov eax, [edi - 50h]
add eax, 0xA0
mov waveFormatEx, eax

这也让我得到了正确的帧大小,这是我在获取缓冲区时的核心问题。现在可以在 16 位 PCM 模式下播放它了。

我试过适配Win 7,但是Audioses.dll差异很大,所以这可能需要一些时间。

关于c++ - IAudioRenderClient::ReleaseBuffer 钩子(Hook)有时会扭曲音频(试图找到原始音频的类型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27868624/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com