使用AKAppleSampler加载.sf2时出现问题-SIGABRT

时间:2018-11-08 16:10:12

标签: ios swift xcode audiokit soundfont

尝试将Soundfont文件加载到AudioKit的AKAppleSampler时遇到问题。

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

以上行尝试从找到.swift文件,info.plist等位置的子(子)文件夹中加载Rhodes键盘.sf2文件。导致硬崩溃(SIGABRT),并显示以下消息...

  

2018-11-08 15:37:59.672749 + 0000音频应用模板[2640:7756155]   -[AudioKit.AKAppleSampler loadMelodicSoundFont:preset:error:]:无法识别的选择器已发送到实例0x1c007f100 2018-11-08   15:37:59.675379 + 0000音频应用模板[2640:7756155] *正在终止   应用由于未捕获的异常“ NSInvalidArgumentException”,原因:   '-[AudioKit.AKAppleSampler loadMelodicSoundFont:preset:error:]:   无法识别的选择器已发送到实例0x1c007f100'   * 第一个调用堆栈:(0x181c9ad8c ...等

我不确定这是我引用文件位置的方式还是我使用AKAppleSampler的方式的问题。我确保将sf2文件拖到项目导航器中,并选中了“如果需要复制文件”(Project Navigator Screenshot),并且我已经知道该文件可以正常工作,因为我已经在DAW中使用了很多次(下载从这里开始:soundfont)。 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)
    }
}

0 个答案:

没有答案