【发布时间】:2018-05-08 10:28:38
【问题描述】:
我的项目是一个 IOS 音频应用。
我在使用 UIDragSession 时听到音频故障/口吃。它仅在用户第一次开始拖动交互时发生。更具体地说,同时调用了 'itemsForBeginningSession:' 委托方法。
就像我说的,这只会发生一次。我以前在展示屏幕键盘时遇到过类似的问题。解决方案是在应用程序启动时首先在后台显示键盘。
有其他人经历过吗?有解决方法或解决方案吗?
已解决:我刚刚在另一个应用程序(The Amazing Audio Engine Sample 应用程序)中重新创建了音频故障。原来这是一个 IOS 错误,一个简单的操作系统更新解决了这个问题。感谢您的所有帮助。
【问题讨论】:
-
应用程序使用哪个 API 播放音频?什么类型的音频源数据和缓冲区大小?
-
您好,我正在使用 AUGraph,并且已经向 remoteIO 音频单元注册了一个渲染回调。在渲染回调中,我使用循环缓冲区实现来播放音频。循环缓冲区是用 C 语言编写的,并且在音频线程上没有分配/锁定。缓冲区大小为 256,但可以更改。设备是最新的 iPad Pro 10.5。谢谢
-
您是否在每个回调中检查 inNumberFrames 以处理缓冲区大小的变化?
-
是的,我只提取渲染回调请求的缓冲区大小。实际上回调是由变速音频单元拉动的,它可以根据速率属性请求任意数量的帧,所以我编写了代码来动态响应这个。就像第一次启动拖动交互时发生了一件大事,它占用了 cpu 并暂停了音频线程片刻。你怎么看?还有其他人在他们的音频应用程序中使用 UIDragSession 吗?
-
如果您在渲染回调中读取文件,可能会阻塞并导致卡顿。它甚至可以在渲染回调中执行
malloc。音频可能非常微妙,因此如果您的渲染回调没有得到很好的优化,像 UI 事件这样看似无关的事情可能会导致打嗝。
标签: ios xcode audio drag-and-drop core-audio