2016-09-15 1 views
1

AVMIDIPlayerを使用して1つのノートメッセージのみで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

try self.midiPlayerPreview = AVMIDIPlayer(data: midiData, soundBankURL: bankURL) 
でサウンドフォントをロードする前に0 errno = 0にグローバル変数errnoを設定してみてください

私たちは同じ問題を経験したのと同時に、this oneを経験しました。 他の問題の修正をこの問題に適用しようとしましたが、うまくいきました。

+0

ご返信ありがとうございます。しかし、私のコードで 'errno'をどこに設定するか教えていただけますか? – Song

+0

ただ私の答えを編集;) –

+0

素晴らしい、それは今すぐうまくいきます。お返事ありがとうございます – Song

関連する問題