Проблемы загрузки .sf2 с использованием AKAppleSampler - SIGABRT - PullRequest
0 голосов
/ 08 ноября 2018

У меня возникла проблема при попытке загрузить файлы звукового шрифта в AKAppleSampler в AudioKit.

try! sampler.loadMelodicSoundFont("Audio/Soundfonts/Rhodes", preset: 1)

В приведенной выше строке делается попытка загрузить файл .sf2 клавиатуры Rhodes из подпапки (местоположения) местоположениягде находятся файлы .swift, info.plist и т. д.В результате происходит сбой (SIGABRT), который выдает следующее сообщение ...

2018-11-08 15: 37: 59.672749 + 0000 Шаблон приложения аудио [2640: 7756155] - [AudioKit.AKAppleSamplerloadMelodicSoundFont: предустановка: ошибка:]: нераспознанный селектор отправлен в экземпляр 0x1c007f100 2018-11-08 15: 37: 59.675379 + 0000 Шаблон аудио-приложения [2640: 7756155] * Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина:'- [AudioKit.AKAppleSampler loadMelodicSoundFont: предустановка: ошибка:]: нераспознанный селектор отправлен в экземпляр 0x1c007f100' * Стек первого вызова вызова: (0x181c9ad8c ... и т. Д.

Я не уверенЕсли это связано с тем, как я ссылаюсь на местоположение файла или с использованием AKAppleSampler. Я удостоверился, что перетащил файл sf2 в навигатор проекта, оставив флажок «Копировать файлы при необходимости» ( Снимок экрана Навигатора проекта ), и я уже знаю, что файл работает, потому что я много раз использовал его в своей DAW (скачано здесь: soundfonт ).Файл sf2 содержит только один банк / пресет / инструмент - возможно, проблема связана с этим.

Полный код показан ниже - это мой первый пост, поэтому извиняюсь, если что-то пропустил.

Xcode версии 9.4.1, актуальный AudioKit

ViewController.swift

import UIKit
import AudioKit

class ViewController: UIViewController {
    var sf2Player: SoundfontPlayer!

    override func viewDidLoad() {
        super.viewDidLoad()

        let master = Mixer()
        sf2Player = SoundfontPlayer(mixer: master, file: "Rhodes")
    }


    @IBAction func keyPressed(_ sender: UIButton) {
        sf2Player.noteOn(note: MIDINoteNumber(sender.tag))
    }

    @IBAction func keyReleased(_ sender: UIButton) {
        sf2Player.noteOff(note: MIDINoteNumber(sender.tag))
    }
}

AudioController.swift

import Foundation
import AudioKit

open class Mixer {
    let mixer = AKMixer()

    init() {
        AudioKit.output = mixer
        try! AudioKit.start()
    }

    open func connect(obj: AKNode) {
        mixer.connect(input: obj)
    }
}

open class SoundfontPlayer {
    var sampler: AKAppleSampler!

    init(mixer: Mixer, file: String) {
        //let filePath = "Audio/Soundfonts/" + file
        // the above is commented out for debugging of the sf2 loading below

        sampler = AKAppleSampler()
        try! sampler.loadMelodicSoundFont("Audio/Soundfonts/Rhodes", preset: 1)

        mixer.connect(obj: sampler)
    }

    public func noteOn(note: MIDINoteNumber) {
        try! sampler.play(noteNumber: note, velocity: 120, channel: 0)
    }

    public func noteOff(note: MIDINoteNumber) {
        try! sampler.stop(noteNumber: note, channel: 0)
    }
}
...