Воспроизведение инструментов с несколькими сэмплами с использованием AudioKit, управление огибающей ADSR
Я пытаюсь играть на инструменте нескольких .wav сэмплов, используя AudioKit.
Я пробовал до сих пор:
- С помощью
AKSampler
(с нижележащимAVAudioUnitSampler
) - все работало нормально, но я не могу понять, как управлять конвертом ADSR здесь - вызовstop
немедленно остановит заметку - Другой способ заключается в использовании
AKSamplePlayer
для каждого сэмпла и проиграйте его вручнуюrate
так что играю правильную ноту. Я могу (возможно?) Потом подключитьсяAKAmplitudeEnvelope
каждому образцу игрока. Но если я хочу сыграть 5 нот одного и того же семпла одновременно, мне нужно 5 экземпляровAKSamplePlayer
что, похоже, тратит ресурсы.
Я также попытался найти способ просто передать необработанные аудиосэмплы в выходной буфер AudioKit, самостоятельно выполняя микширование и интерполяцию сэмплов (возможно, в C). Но не нашел как это сделать:(
Как правильно сделать мультисэмплированный инструмент, используя AudioKit? Я чувствую, что это должно быть довольно простой задачей.
2 ответа
Благодаря Махалу Тертину, его довольно легко использовать AKAUPresetBuilder
!
Вы можете создать файл.aupreset где-нибудь в каталоге tmp, а затем загрузить этот инструмент с 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. В противном случае вам понадобится инструмент для каждого образца.