ios - 使用 AudioKit 播放多采样乐器,控制 ADSR 包络

标签 ios swift audiotoolbox audiokit

我正在尝试使用 AudioKit 演奏几个 .wav 样本的乐器。

到目前为止我已经尝试过:

  1. 使用 AKSampler(使用底层 AVAudioUnitSampler)——它工作正常,但我不知道如何在这里控制 ADSR 包络——调用 stop 将立即停止注释。
  2. 另一种方法是对每个样本使用 AKSamplePlayer 并播放它,手动设置 rate 使其播放正确的音符。我可以(可能?)然后将 AKAmplitudeEnvelope 连接到每个样本播放器。但是,如果我想同时播放同一样本的 5 个音符,我将需要 5 个 AKSamplePlayer 实例,这似乎是在浪费资源。

我还试图找到一种方法,将原始音频样本推送到 AudioKit 输出缓冲区,自己进行混音和样本插值(可能是在 C 中?)。但是没找到怎么做:(

使用 AudioKit 制作多采样乐器的正确方法是什么?我觉得这一定是一项相当简单的任务。

最佳答案

感谢mahal tertin , AKAUPresetBuilder 非常容易使用!
您可以在 tmp 目录中的某处创建 .aupreset 文件,然后使用 AKSampler 加载此乐器。

唯一值得注意的是,默认情况下 AKAUPresetBuilder 将生成触发模式设置为 trigger 的样本,这将忽略音符关闭事件。所以你应该明确地设置它。

例如:

let sampleC4 = AKAUPresetBuilder.generateDictionary(
                    rootNote: 60,
                    filename: pathToC4WavSample,
                    startNote: 48,
                    endNote: 65)
sampleC4["triggerMode"] = "hold"

let sampleC5 = AKAUPresetBuilder.generateDictionary(
                    rootNote: 72,
                    filename: pathToC5WavSample,
                    startNote: 66,
                    endNote: 83)
sampleC5["triggerMode"] = "hold"

AKAUPresetBuilder.createAUPreset(
                    dict: [sampleC4, sampleC5],
                    path: pathToAUPresetFilename,
                    instrumentName: "My Instrument",
                    attack: 0,
                    release: 0.2)

然后创建一个采样器并启动 AudioKit:

sampler = AKSampler()

try sampler.loadInstrument(atPath: pathToAUPresetFilename)

AudioKit.output = sampler
AudioKit.start()

然后用它开始演奏音符:

sampler.play(noteNumber: MIDINoteNumber(63), velocity: MIDIVelocity(120), channel: 0)

关于发布参数,这将停止:

sampler.stop(noteNumber: MIDINoteNumber(63), channel: 0)

关于ios - 使用 AudioKit 播放多采样乐器,控制 ADSR 包络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47359088/

相关文章:

swift - cocoa : Load Different View Controllers depending on input from App Delegate

ios - 需要访问 iPhone 使用的默认相机快门声音

iphone - UIScrollView contentSize 问题 - 带有示例代码

ios - 在 IOS 中获取错误的运营商名称

iphone - iOS:将大型 XIB 重构为几个较小的 XIB 文件以提高速度

ios - 处理向同一方向滚动的嵌套 UIScrollViews 的触摸

ios - 当前模态未正确调整 View 大小

swift - UITableViewCell 滚动时继续更改其图像

swift - AudioToolbox、C 函数指针和 Swift

iphone - 结合使用remoteio和AudioServicesPlaySystemSound