gpt4 book ai didi

iphone - 我可以在 AURenderCallback 函数中限制 iOS 传递的 inNumberFrames 吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:09:07 25 4
gpt4 key购买 nike

我创建了使用 AudioUnitExtAudioFile 的自定义音频播放器类。在我的类里面,我准备了自己的渲染回调函数,例如

OSStatus MyAURenderCallack (
void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData
);

当我的应用程序在前台时,操作系统传递的参数inNumberFrames总是5121024,我的播放器运行良好。
但是当 iOS 设备休眠时,inNumberFrames 变为 4096,我的播放器无法工作,因为它一次无法准备这么多帧。

帧准备过程很难改进,因为它大量使用extAudioFileRead函数,很难加速。

所以,我想限制 inNumberFrames 变得大于 1024
我能做到吗?

最佳答案

正如@sbooth 指出的那样,您真的应该在另一个线程中写入磁盘。否则,这会给您的应用程序的主线程带来真正的压力,该线程应该专注于传输音频而不会丢失。

但要直接回答您的问题:不,您不能直接告诉操作系统用于 block 大小的确切帧数。您可以建议它使用一定的延迟,结合请求的采样率将为您提供一个大概的 block 大小。但是,不能保证 iOS 会把这个 block 大小还给你。

但是,您最好的选择是让您的算法适用于任意 block 大小。除非你正在做类似卷积的事情,否则通常应该更容易使用更大的 block 。因此,如果您在 4096 处遇到问题,您可能应该分析您的代码并查看根本问题是什么。

关于iphone - 我可以在 AURenderCallback 函数中限制 iOS 传递的 inNumberFrames 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7665447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com