首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在音频单元扩展(实时处理)中为音频播放分配内存?

如何在音频单元扩展(实时处理)中为音频播放分配内存?
EN

Stack Overflow用户
提问于 2020-04-17 22:51:56
回答 1查看 152关注 0票数 1

我正在创建一个音频单元v3。我已经取得了不错的进展,到目前为止,我做了一个主机应用程序,加载我所有的第三方插件。我创建了一个处理音频并可由其他主机加载的auv3插件。

现在,我想创建一个au,它从磁盘加载音频数据,并以抽样精度(时间扩展、粒度等)以随机位置扫描数据。我认为这将是一个对AudioKit做出贡献的很酷的示例回放加载项。

因此,这将在AKSampler框架中的AudioKit级别上做出一些贡献。当我翻看AK的消息来源时,我觉得我好像错过了什么。

当我浏览github的时候,我来到了这样的地方:https://github.com/AudioKit/AudioKit/tree/118affee65f4c9b8d4780ef1a03a6d03004bbcee/AudioKit/Common/Nodes/Playback/Samplers

然后我在这里看了看:https://github.com/AudioKit/AudioKit/blob/118affee65f4c9b8d4780ef1a03a6d03004bbcee/AudioKit/Common/Nodes/Playback/Samplers/Disk%20Streamer/AKDiskStreamerAudioUnit.mm

带我来这里的是:https://github.com/AudioKit/AudioKit/blob/d69dabf090a5e78d4495d938bf6c0aea9f672630/AudioKit/Common/Nodes/Playback/Samplers/Disk%20Streamer/AKDiskStreamerDSPKernel.hpp

最后在这里:https://github.com/AudioKit/AudioKit/blob/d69dabf090a5e78d4495d938bf6c0aea9f672630/AudioKit/Core/Soundpipe/modules/wavin.c

我不是在寻找有关AKSampler的信息,特别是,一般的音频文件是如何被加载的,以及它是如何与au扩展过程的实时性质相关联的。

我在任何地方都找不到IPC/XPC代码,所以我猜想这与连接到其他进程或其他进程的循环缓冲区无关。

AudioKit是否在实时过程中为音频播放分配内存?这似乎违背了来自经验丰富的音频程序员的所有警告(比如http://www.rossbencina.com/code/real-time-audio-programming-101-time-waits-for-nothing),但我不知道在AudioKit和一般iOS中正在做什么。

我只是不理解或发现什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-19 18:54:29

打开文件和为文件读取分配内存应该在实时音频上下文之外完成,可能是在UI文件选择期间,而不是在音频单元回调中。

对AU回调中的示例进行随机访问的一种方法是内存映射文件(mmap Mmap),然后在传递内存指针(不安全的原始数据等)之前,先触摸内存映射中的每个示例。和文件长度(映射的边界)到音频单元。然后,您可以使用固定的延迟在回调中进行虚拟随机访问文件的读取。

一种通过进行校验和(可能会在稍后丢弃结果)来触摸数组中的每个样本的方法。这种内存读取是为了让iOS虚拟内存系统将文件VM中的块交换到RAM中,这样存储系统读取就不会在实时上下文中发生。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61281973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档