2016-09-15 6 views
1

Когда я использую AVMIDIPlayer для воспроизведения MusicSequence с одним сообщением с записью. Большая часть времени она работает нормально, но иногда это не имеет никакого звука и вошли, как показано ниже:AVMIDIPlayer DLSBankManager :: AddBank: Ошибка загрузки банка

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

Он хорошо работает на iOS9, но когда я проверить его на iOS10 он работает в этот вопрос. Я уверен, что файл sf2 sound bank file url установлен правильно. я вставляю код, как показано ниже:

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

Попробуйте установить глобальную переменную ERRNO в 0 errno = 0 перед загрузкой SoundFont с

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

Мы столкнулись с той же проблемой и в то же время this one. Итак, мы попытались применить исправление другой проблемы к этой, и она просто сработала.

+0

Большое спасибо за ваш ответ. Но может ли я указать, где установить «errno» в моем коде? – Song

+0

Только что отредактировал мой ответ;) –

+0

Отлично, теперь он хорошо работает. Большое спасибо за вашу помощь – Song