2

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

乐器应该以不同的音高/音符播放声音文件,并且应该有一个音量包络。

音量包络意味着当 nit 开始播放时声音音量正在减弱。我尝试了无数种方法来创建它。所需的方法是使用 AVAudioEngine 的 AVPlayerNode,然后实时处理该节点的各个样本。

不幸的是,到目前为止,我在这种方法上没有成功。你能给我一些关于它在iOS中如何工作的指示吗?

谢谢,托拜厄斯

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

4

2 回答 2

2

我看了你的另一篇文章,我认为AUSampler - 实时控制 AUSampler 的设置是你要找的。

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

要获得 AULab,请前往 Apple 的开发者下载,选择“Audio Tools for Xcode”。下载后只需打开 DMG 并将文件夹拖到任何地方(我将它拖到我的应用程序文件夹中)。里面是AULab。这是一个描述如何加载预设的技术说明,另一个关于如何实时更改参数(例如攻击/衰减)的技术说明,这是一个WWDC 视频,它会引导您完成整个过程,包括使用创建预设奥实验室。

于 2015-06-10T16:06:08.800 回答
2

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

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

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

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

于 2015-06-10T16:16:54.267 回答