gpt4 book ai didi

c++ - 播放 "clicking"噪音

转载 作者:太空狗 更新时间:2023-10-29 21:08:23 27 4
gpt4 key购买 nike

我正在尝试用 C++ 编写一个程序来播放一个小的 .wav 文件。我已经按照 DirectX SDK 文档对其进行了编程,以在辅助静态缓冲区上编写和播放。它运行正常,除了在任何 .wav 文件播放结束时,有一个非常明显的“咔嗒”声。我确信这不是我的音频硬件的缺陷,因为我知道使用 DirectSound 的任何其他游戏都没有它。

我已经尝试在每个周期轮询 GetCurrentPosition 并在它结束之前停止它,但不可靠。我无法在主缓冲区上播放它,因为在主缓冲区上播放的 .wav 必须循环播放,这是我不想要的。

有人知道解决这个问题的方法吗?提前致谢。

最佳答案

我们需要查看有问题的 WAV 文件和将 WAV 文件加载到声音缓冲区的代码。但这里有一些猜测。

我的第一个猜测是,如果我们要将您拥有的 WAV 文件加载到可视化音频编辑器中,我们会看到声音突然结束,而不是逐渐变小直至静音。这会导致几乎所有音频播放器都发出突然的“爆裂”噪音。

我的第二个猜测是您正在将垃圾数据复制到最后的声音缓冲区中。某些 WAV 文件在文件末尾超过 DATA block 末尾时有额外的元数据。不确定您如何确定声音文件中的位置以从中复制样本,但这很容易搞砸。您是否使用十六进制编辑器(如 Visual Studio)检查 WAV 文件以确认 DATA block 的长度与它声称的一样大?当您调试 ReadFile 调用以将数据从文件复制到缓冲区时,您检查缓冲区的最后几个字节是否与您在十六进制编辑器中看到的相匹配?

关于c++ - 播放 "clicking"噪音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3129736/

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