带有音量包络的 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 音频采样器的主要内容,如果未能解决你的问题,请参考以下文章

iOS:增加录制音频的音量

iOS6 使用 PlayAndRecord 音频会话类别时音量非常低

播放结束后将音量控制返回给 iOS 设备铃声

iOS:静音右声道音量

IOS - 从 Ipod 访问音频流、暂停和更改音量

PhoneGap:无法在 ios 中更改 html5 音频对象的音量