我对SDL音频有一个奇怪的问题。它将随机变形。它是完全随机的,我根本无法可靠地复制它。有时,它会在程序启动后几秒钟开始失真,而另一些时候,我使用该软件进行播放时,请让它运行一整夜,直到早上仍能正常工作。
这可能与SDL有关,因为我可以使用Mix_CloseAudio()
关闭混音器,然后使用Mix_OpenAudio()
重新打开混音器,这样可以修复声音……有时,有时很长一段时间,有时它很快就会混乱。 (正如Brad在评论中指出的,这并不一定意味着这是SDL问题。)
有关系统的更多信息:
这是一个过去一直可以使用的旧系统,我对该软件的音频系统部分完全没有做任何更改。该系统以前是用CD-ROM运行的,所有游戏的资产都通过文件系统覆盖图加载到ram中,但是我将其切换为使用CF卡运行,而所有时间都没有ram的声音。我也没有对声音驱动程序进行任何更改。
这是声音失真https://www.youtube.com/watch?v=zEneMi5mtt0的示例
下面是一个示例,说明相同的声音可以正常运行https://www.youtube.com/watch?v=nyPZLJ-9gsI
答案 0 :(得分:1)
基于您的声音的一些观察结果,我们可以用来调试问题:
基本上,正在发生的是,声卡正在从循环缓冲区读取的位置与软件对其写入的位置不同。在某个时候,缓冲区不足,导致播放头位于读取头的前面。
应该发生的是,播放应该重新设置,导致音频暂时丢失,直到缓冲区再次变满。似乎发生了什么事,继续播放了。因此,播放头继续在旧缓冲区数据和新缓冲区数据之间的线上运行,从而引起咔嗒声。这就是为什么当声音更安静时,喀哒声/失真更安静了……两个PCM样本之间的差异较小。
我已经看到这种情况发生在有故障的声卡驱动程序以及有故障的声卡中。要变通解决此问题,找到一种增加缓冲区大小的方法。这会增加等待时间,但可以帮助防止问题首先发生。