AVMIDIPlayer
MIDI ファイルの再生にApple のオブジェクトを使用しようとしています。次のコードを使用すると、Swift で十分に簡単に思えます。
let midiFile:NSURL = NSURL(fileURLWithPath:"/path/to/midifile.mid")
var midiPlayer: AVMIDIPlayer?
do {
try midiPlayer = AVMIDIPlayer(contentsOf: midiFile as URL, soundBankURL: nil)
midiPlayer?.prepareToPlay()
} catch {
print("could not create MIDI player")
}
midiPlayer?.play {
print("finished playing")
}
そして約0.05秒再生します。ある種のループでフレーム化する必要があると思います。私は簡単な解決策を試しました:
while stillGoing {
midiPlayer?.play {
let stillGoing = false
}
}
これは機能しますが、CPU を大幅に増加させます。より良い方法はありますか?最初のコメントに加えて、クラスを作成しようとしましたが、エラーのフラグは立てられませんが、機能しません。
class midiPlayer {
var player: AVMIDIPlayer?
func play(file: String) {
let myURL = URL(string: file)
do {
try self.player = AVMIDIPlayer.init(contentsOf: myURL!, soundBankURL: nil)
self.player?.prepareToPlay()
} catch {
print("could not create MIDI player")
}
self.player?.play()
}
func stop() {
self.player?.stop()
}
}
// main
let myPlayer = midiPlayer()
let midiFile = "/path/to/midifile.mid"
myPlayer.play(file: midiFile)