【发布时间】:2019-09-08 00:17:04
【问题描述】:
我对 SDL 音频有一个奇怪的问题。它会随机变形。它完全是随机的,我根本无法可靠地复制它。有时它会在程序启动几秒钟后开始失真,有时我玩过该软件,让它运行一夜,它仍然会在早上工作。
这可能与 SDL 有关,因为我可以用Mix_CloseAudio() 关闭混音器,然后用Mix_OpenAudio() 重新打开它,它会修复声音......一段时间,有时很长一段时间,其他时候它很快就会搞砸。 (正如 Brad 在 cmets 中指出的那样,这并不一定意味着这是一个 SDL 问题。
关于系统的更多信息:
- 剥离了内核 2.6.27.5-117.fc10.i686 的 linux 系统。
- libSDL_mixer-1.2.so.0.2.6.
这是一个在过去一直有效的旧系统,我对软件的音频系统部分没有做任何更改。该系统过去使用 CD-rom 运行,所有游戏资产都加载到文件系统覆盖层上的 ram 中,但我已将其切换为使用 CF 卡运行,而没有所有声音一直在 ram 中。我也没有对声音驱动程序进行任何更改。
这是一个声音失真的例子https://www.youtube.com/watch?v=zEneMi5mtt0
以下是相同声音正常运行的示例https://www.youtube.com/watch?v=nyPZLJ-9gsI
【问题讨论】:
-
你能发布一个失真声音的音频样本吗?
-
有没有办法用 SO 做到这一点?我不得不玩一会儿,直到它搞砸了,然后用我的手机记录下来。我想我总是可以把它放在 youtube 上。不过我很好奇,失真的类型能说明什么?
-
我不认为 Stack Overflow 对此有任何规定,但您始终可以链接到 Dropbox 或 Google Drive 链接或其他东西。失真的类型可以帮助区分许多不同的问题。例如,如果它恰好是规则的,则通常是采样率差异或缓冲区偏移问题。如果它是随机的,则通常是缓冲区不足的问题。位深度差异也有特征声音(如果播放模式发生变化,可能会发生这种情况)。各种东西。
-
谢谢,我会努力获取样本。你提到缓冲区不足,这就是为什么我提到关于内存中的所有内容与现在必须先从 cf 卡中加载它的原因。
-
声卡可能配置了非常小的缓冲区大小,因此即使平均 CPU 使用率很低,也很难跟上。另外,我不确定您关于它肯定与 SDL 相关的评论是否严格正确。我不知道您的系统是否是这种情况,但如果没有人使用它,声卡通常会停止。重新打开它可能实际上是在重新初始化硬件。
标签: linux audio sdl distortion