[英]AudioKit: Using the new AKSequencer with any variety of the callback instruments
[英]Playing multi-sampled Instruments using AudioKit, controlling ADSR envelope
我正在嘗試使用AudioKit播放幾個.wav樣本的樂器。
我到目前為止嘗試過:
AKSampler
(底層AVAudioUnitSampler
) - 它工作正常,但我無法弄清楚如何控制ADSR信封 - 調用stop
會立即停止注釋。 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.