簡體   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