无法在MacOSX上将WAV加载到AKMidiSampler

时间:2017-12-14 22:13:21

标签: audiokit

我正在尝试在Mac OSX上使用AKMidiSampler。我无法从文件中加载示例数据。以下代码将说明在AudioKit for macOS项目中放入Development Playground时的问题:

导入AudioKit

let sampler1 = AKMIDISampler()
sampler1.loadPath("/Users/shane/Documents/Cel1.wav")
AudioKit.output = sampler1
AudioKit.start()
sampler1.play(noteNumber: 64, velocity: 100, channel: 0)
sleep(5)
sampler1.stop(noteNumber: 64, channel: 0)

错误发生在第2行:

  

AKSampler.swift:loadPath:114:在/Users/shane/Documents/samples/Cel1.wav

加载音频文件时出错

我听到的只是默认的正弦音。我检查过明显的事情,例如权限肯定存在,权限确定(实际上是每个人的rwx,以防万一)。尝试加载ESX文件的早期实验表明权限错误(代码-54)。

任何人都可以验证AKSampler和/或AKMIDISampler实际上是否在OSX中工作?

2 个答案:

答案 0 :(得分:3)

更新2018年3月20日:此后,AudioKit团队对AKSampler / AKMIDISampler API进行了一些补充,以允许从任意文件路径加载样本文件。

我被邀请加入AudioKit核心团队,并从头开始编写新的采样器引擎。在下一个AudioKit版本中(预计在一两天内),名称" AKSampler"将引用这个较新的代码,但用户应该知道它不是旧的AKSampler的直接替代品,旧的AKSampler将被重命名为" AKAppleSampler"反映它是苹果公司内置的" AUSampler"的包装物。音频单元。 AKMIDISampler类(大多数人实际使用的类)将保持不变,作为AKAppleSampler的包装器。

答案 1 :(得分:1)

在AudioKit源代码中,loadPath(_ :)调用loadInstrument(_:type :),它在包中查找您的文件。请在此处查看来源的副本:

@objc open func loadPath(_ filePath: String) {
    do {
        try samplerUnit.loadInstrument(at: URL(fileURLWithPath: filePath))
    } catch {
        AKLog("Error loading audio file at \(filePath)")
    }
}

internal func loadInstrument(_ file: String, type: String) throws {
    //AKLog("filename is \(file)")
    guard let url = Bundle.main.url(forResource: file, withExtension: type) else {
        fatalError("file not found.")
    }
    do {
        try samplerUnit.loadInstrument(at: url)
    } catch let error as NSError {
        AKLog("Error loading instrument resource \(file)")
        throw error
    }
}

因此,您需要将音频文件放在app或playground的捆绑包中,以便此操作。