繁体   English   中英

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

[英]Playing multi-sampled Instruments using AudioKit, controlling ADSR envelope

我正在尝试使用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)

可能最好的方法是将您的wav文件嵌入到EXS或Soundfont格式中,利用该领域中的工具来完成ADSR。 否则你必须为每个样品配备一个仪器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM