带有音量包络的 iOS 音频采样器
Posted
技术标签:
【中文标题】带有音量包络的 iOS 音频采样器【英文标题】:iOS Audio Sampler with Volume Envelope 【发布时间】:2015-06-08 20:04:23 【问题描述】:我的目标是为 iPhone/ios 创建一个采样器乐器。
乐器应该播放不同音高/音符的声音文件,并且应该有一个音量包络。
音量包络意味着当 nit 开始播放时声音音量正在减弱。 我尝试了无数种方法来创建它。所需的方法是使用 AVAudioEngine 的 AVPlayerNode,然后实时处理该节点的各个样本。
不幸的是,到目前为止,我在这种方法上没有成功。你能给我一些关于它在 iOS 中如何工作的指示吗?
谢谢, 托比亚斯
PS:我没有学习Core Audio Framework。也许可以访问 AVAudioNodes 音频单元来执行这项工作,但我还没有时间阅读框架。
【问题讨论】:
【参考方案1】:更底层的方法是从文件中读取音频并处理音频缓冲区。
您将 ADSR 存储在一个数组或更好的数组中,这是一个基于您传递的声音索引输出包络值的数学函数(使用插值)。所以包络映射到任何声音的持续时间。
然后将音频样本与返回的包络值相乘,得到过滤后的样本。
一种方法是使用 AVAudioNode 并将处理节点链接到它。
【讨论】:
如何在处理节点中访问和处理声音?我在文档中找不到方法。谢谢,托比!【参考方案2】:我看了你的另一个帖子,我认为AUSampler - Controlling the Settings of the AUSampler in Real Time 就是你要找的。p>
我还没有使用过AVAudioUnitSampler,但我相信它只是 AUSampler 的包装器。要配置 AUSampler,您必须首先使用 AULab 在 Mac 上制作和导出预设文件。该文件是一个 plist,其中包含文件引用和采样器衰减音量音高截止以及 AUSampler 构建的所有好东西。然后将此文件放入您的应用程序包中。然后,您创建一个名为“Sounds”的目录,将所有引用的音频样本复制到该文件夹中,并将其放入您的应用程序包中(作为folder reference)。然后,您创建您的 audioGraph(或在您的情况下为 AVAudioEngine)和采样器,并从您的应用程序包中的预设文件加载预设。这有点痛苦。我提供的这些链接是我用来启动和运行的,但它们有点过时了,如果我现在从哪里开始,我肯定会先查看AVAudioUnitSampler,看看是否有更简单的方法。
要获取 AULab,请转到 Apple 的开发人员 downloads,选择“Xcode 音频工具”。下载后只需打开 DMG 并将文件夹拖到任何地方(我将其拖到我的应用程序文件夹中)。里面是AULab。 这是一个 technical note 描述如何加载预设,另一个 technical note 是关于如何实时更改参数(例如攻击/衰减),这是一个 WWDC Video 将引导您完成整个过程,包括创建使用 AULab 进行预设。
【讨论】:
不幸的是,AU 实验室目前似乎被打破了。 ***.com/questions/30539748/… 它已损坏,但一种解决方法是在 AULab 中编辑现有的“仪器连接”以完成相同的操作。 我回答了他的other question,提供了一种解决方法,允许您添加攻击连接。以上是关于带有音量包络的 iOS 音频采样器的主要内容,如果未能解决你的问题,请参考以下文章