1

AVMIDIPlayerMIDI ファイルの再生に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)
4

3 に答える 3