AVMIDIPlayer DLSBankManager :: AddBank:银行加载失败

时间:2016-09-15 13:40:28

标签: midi swift3 ios10

当我使用AVMIDIPlayer播放只有一条音符信息的MusicSequence时。大多数情况下它工作正常但有时它没有声音并记录如下:

DLSBankManager::AddBank: Bank load failed
Error Domain=com.apple.coreaudio.avfaudio Code=-10871 "(null)"

它在iOS9上运行良好,但是当我在iOS10上测试它时会遇到这个问题。 我确定sf2声音库文件网址设置正确。 我粘贴代码如下:

func playAVMIDIPlayerPreview(_ musicSequence:MusicSequence) {

    guard let bankURL = Bundle.main.url(forResource: "FluidR3 GM2-2", withExtension: "sf2") else {
        fatalError("soundbank file not found.")
    }

    var status = OSStatus(noErr)
    var data:Unmanaged<CFData>?
    status = MusicSequenceFileCreateData (musicSequence,
                                          MusicSequenceFileTypeID.midiType,
                                          MusicSequenceFileFlags.eraseFile,
                                          480, &data)

    if status != OSStatus(noErr) {
        print("bad status \(status)")
    }

    if let md = data {
        let midiData = md.takeUnretainedValue() as Data
        do {
            try self.midiPlayerPreview = AVMIDIPlayer(data: midiData, soundBankURL: bankURL)
        } catch let error as NSError {
            print("Error \(error)")
        }
        data?.release()

        self.midiPlayerPreview?.play({ () -> Void in
            self.midiPlayerPreview = nil
            self.musicSequencePreview = nil
        })
    }

}

此行发生错误:

try self.midiPlayerPreview = AVMIDIPlayer(data: midiData, soundBankURL: bankURL)

1 个答案:

答案 0 :(得分:1)

在使用

加载声音之前,尝试将全局变量errno设置为0 errno = 0
try self.midiPlayerPreview = AVMIDIPlayer(data: midiData, soundBankURL: bankURL)

我们遇到了同样的问题,同时this one。 因此,我们尝试将其他问题的修复应用于此问题,并且它只是起作用。