SDL - 有时没有及时调用音频回调函数

Posted

技术标签:

【中文标题】SDL - 有时没有及时调用音频回调函数【英文标题】:SDL - Audio callback function is not called in time sometimes 【发布时间】:2012-01-13 12:22:49 【问题描述】:

我是 SDL 的新手。 我正在使用SDL开发一个媒体播放器,现在遇到了音频回调函数有时没有被及时调用,导致音频有点断断续续的问题。

我用这样一段代码来打开音频设备:

wanted_spec.xxx = xxx;
wanted_spec.callback = audio_callback;    //audio_callback is my audio callback function
SDL_OpenAudio(&wanted_spec, &spec);

我的操作系统是 Windows XP。

你知道吗?有人可以建议如何以 0 延迟将数据馈送到回调函数同步。

我的问题不是通过 SDL_LoadWAV 提供整个 wav 文件,而是我想传递 PCM 样本(可能是 1024 个样本)。(设计是这样的,我将获得 PCM 样本)

但问题是,回调函数没有及时调用或调用延迟导致声音断断续续。我无法将数据同步传递给回调函数。

您能否建议一种将传递数据(样本)同步到回调函数的方法,或者提供一些在样本中传递数据的应用程序?

【问题讨论】:

那么,你在回调中做了什么?您发布的只是一些设置代码 - 我们无法从中看出可能出了什么问题。 缓冲区有多大,即您希望 SDL 多久需要回调一次才能按时提供服务? 【参考方案1】:

我们需要真正的价值观来全面回答您的问题。

您尝试的缓冲区大小是多少?

还要意识到 SDL 不给您想要的东西是很常见的,因此请检查实际的规范缓冲区大小。

我一直在 Windows 上使用 SDL 的二进制 mingw32 端口,无论我请求什么,它都不会给我小于一秒的缓冲区。

【讨论】:

您好,我是 SDL 的新手。你能建议一个合适的缓冲区大小吗?我想一次将 1024 个 PCM 样本传递给回调函数,而不是传递整个 wav 文件。 ThnX 这是一个合理的缓冲区大小。

以上是关于SDL - 有时没有及时调用音频回调函数的主要内容,如果未能解决你的问题,请参考以下文章

我可以从内部暂停回调吗?

尝试使用 SDL 为音频分配回调变量

C++:SDL 音频回调最终停止工作

为啥我的 iOS 录音回调中的音频缓冲区未满?

带有 SDL 音频的 Emscripten 工作模型

waveOutOpen()API中的回调函数