带音量信封的iOS音频采样器

时间:2015-06-08 20:04:24

标签: ios swift audio core-audio avaudioengine

我的目标是为iPhone / iOS创建一个采样器。

乐器应播放不同音高/音符的声音文件,并且应该有音量信封。

音量包络意味着当nit开始播放时音量正在消失。 我尝试了无数的创造方法。想要的方法是使用AVAudioEngine的AVPlayerNode,然后实时处理该节点的各个样本。

不幸的是,到目前为止我还没有成功。你能否就iOS中的工作方式给我一些指示?

谢谢, 托比亚斯

PS:我没有学习核心音频框架。也许可以访问AVAudioNodes音频单元来执行这项工作,但我还没有时间阅读框架。

2 个答案:

答案 0 :(得分:1)

我查看了你的另一篇文章,我认为AUSampler - Controlling the Settings of the AUSampler in Real Time正是你要找的。

我还没有使用AVAudioUnitSampler,但我相信它只是AUSampler的包装器。要配置AUSampler,您必须首先使用AULab在Mac上制作和导出预设文件。这个文件是一个plist,它包含文件引用和采样器衰减音量音调截止以及AUSampler所构建的所有好东西。然后将此文件放入您的应用包中。然后,您创建一个名为“Sounds”的目录,将所有引用的音频样本复制到该文件夹​​中,并将其放入您的应用程序包中(作为folder reference)。然后创建audioGraph(或在您的情况下为AVAudioEngine)和采样器,并从应用程序包中的预设文件加载预设。这有点痛。我提供的这些链接是我过去常常运行的,但它们有点过时了,如果我现在从哪里开始,我肯定会先查看AVAudioUnitSampler,看看是否有更简单的方法。< / p>

要让AULab转到Apple的开发人员downloads,请选择“Xcode的音频工具”。下载后,只需打开DMG并将文件夹拖到任何位置(我将其拖到我的Applications文件夹中)。里面是AULab。 这是一个technical note,用于描述如何加载预设,另一个technical note关于如何实时更改参数(例如攻击/衰减),这里有一个WWDC Video引导您完成整个过程包括使用AULab创建预设。

答案 1 :(得分:1)

更低级的方法是从文件中读取音频并处理音频缓冲区。

将ADSR存储在一个或更好的数组中,这是一个数学函数,它根据您传递的声音索引输出包络值(使用插值)。所以信封映射到任何声音的持续时间。

然后将音频样本与返回的包络值相乘以获得过滤后的样本。

一种方法是使用AVAudioNode并将处理节点链接到它。