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

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

音量包络表示,当尼特开始播放时,音量逐渐减弱。
我尝试了无数种方式来创建它。理想的方法是使用AVAudioEngine的AVPlayerNode,然后实时处理该节点的各个样本。

不幸的是,到目前为止,我在这种方法上还没有成功。您能否给我一些有关iOS中工作方式的指导?

谢谢,
托比亚斯

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

最佳答案

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

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

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

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

07-27 16:22