我正在创建一个音频单元v3。我已经取得了不错的进展,到目前为止,我做了一个主机应用程序,加载我所有的第三方插件。我创建了一个处理音频并可由其他主机加载的auv3插件。
现在,我想创建一个au,它从磁盘加载音频数据,并以抽样精度(时间扩展、粒度等)以随机位置扫描数据。我认为这将是一个对AudioKit做出贡献的很酷的示例回放加载项。
因此,这将在AKSampler框架中的AudioKit级别上做出一些贡献。当我翻看AK的消息来源时,我觉得我好像错过了什么。
当我浏览github的时候,我来到了这样的地方:https://github.com/AudioKit/AudioKit/tree/118affee65f4c9b8d4780ef1a03a6d03004bbcee/AudioKit/Common/Nodes/Playback/Samplers
我不是在寻找有关AKSampler的信息,特别是,一般的音频文件是如何被加载的,以及它是如何与au扩展过程的实时性质相关联的。
我在任何地方都找不到IPC/XPC代码,所以我猜想这与连接到其他进程或其他进程的循环缓冲区无关。
AudioKit是否在实时过程中为音频播放分配内存?这似乎违背了来自经验丰富的音频程序员的所有警告(比如http://www.rossbencina.com/code/real-time-audio-programming-101-time-waits-for-nothing),但我不知道在AudioKit和一般iOS中正在做什么。
我只是不理解或发现什么?
发布于 2020-04-19 18:54:29
打开文件和为文件读取分配内存应该在实时音频上下文之外完成,可能是在UI文件选择期间,而不是在音频单元回调中。
对AU回调中的示例进行随机访问的一种方法是内存映射文件(mmap Mmap),然后在传递内存指针(不安全的原始数据等)之前,先触摸内存映射中的每个示例。和文件长度(映射的边界)到音频单元。然后,您可以使用固定的延迟在回调中进行虚拟随机访问文件的读取。
一种通过进行校验和(可能会在稍后丢弃结果)来触摸数组中的每个样本的方法。这种内存读取是为了让iOS虚拟内存系统将文件VM中的块交换到RAM中,这样存储系统读取就不会在实时上下文中发生。
https://stackoverflow.com/questions/61281973
复制相似问题