2016-09-15 4 views
1

AVMIDIPlayer를 사용하여 하나의 노트 메시지 만 사용하여 MusicSequence를 재생할 때. 시간의 대부분은 잘 작동하지만, 경우에 따라서는 소리가없고 다음과 같이 기록 :AVMIDIPlayer DLSBankManager :: AddBank : 뱅크로드가 실패했습니다.

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

그것은 iOS9 잘 작동하지만, 내가 iOS10에서 테스트 할 때이 문제로 실행됩니다. sf2 사운드 뱅크 파일 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

가와 사운드 폰트를로드하기 전에 0 errno = 0에 전역 변수 errno를 설정하십시오

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

우리는 같은 문제를 경험하고 동시에 this one을 경험했습니다. 그래서 우리는 다른 문제의 수정을이 문제에 적용하려고 시도했지만 방금 작업했습니다.

+0

답장을 보내 주셔서 대단히 감사합니다. 하지만 내 코드에서 'errno'를 어디에 설정해야하는지 알려 줄 수 있습니까? – Song

+0

그냥 내 대답을 편집;) –

+0

위대한, 지금은 잘 작동합니다. 대단히 고마워. – Song