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 - 有时没有及时调用音频回调函数的主要内容,如果未能解决你的问题,请参考以下文章