Воспроизведение инструментов с несколькими сэмплами с использованием AudioKit, управление огибающей ADSR

Я пытаюсь играть на инструменте нескольких .wav сэмплов, используя AudioKit.

Я пробовал до сих пор:

  1. С помощью AKSampler (с нижележащим AVAudioUnitSampler) - все работало нормально, но я не могу понять, как управлять конвертом ADSR здесь - вызов stop немедленно остановит заметку
  2. Другой способ заключается в использовании 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. В противном случае вам понадобится инструмент для каждого образца.

Другие вопросы по тегам