Skip to content

Instantly share code, notes, and snippets.

@jayluxferro
Forked from genedelisa/MidIPlayer
Created April 4, 2020 20:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jayluxferro/d7a204798b588333986ac41180751709 to your computer and use it in GitHub Desktop.
Save jayluxferro/d7a204798b588333986ac41180751709 to your computer and use it in GitHub Desktop.
Swift AVMIDIPlayer
/// soundbanks are either dls or sf2. see http://www.sf2midi.com/
var soundbank:NSURL!
var mp:AVMIDIPlayer!
func playMIDIFile() {
// Load a SoundFont or DLS file.
self.soundbank = NSBundle.mainBundle().URLForResource("GeneralUser GS MuseScore v1.442", withExtension: "sf2")
// a standard MIDI file.
var contents:NSURL = NSBundle.mainBundle().URLForResource("ntbldmtn", withExtension: "mid")
var error:NSError?
self.mp = AVMIDIPlayer(contentsOfURL: contents, soundBankURL: soundbank, error: &error)
if self.mp == nil {
println("nil midi player")
}
if let e = error {
println("Error \(e.localizedDescription)")
}
self.mp.prepareToPlay()
self.mp.play(nil)
// there is a crash when you use a completion
//self.mp.play({
// println("midi done")
//})
// or
// var completion:AVMIDIPlayerCompletionHandler = {println("done")}
// mp.play(completion)
}
func toggleMIDIPlayer() {
if mp.playing {
mp.stop()
} else {
self.mp.play(nil)
}
}
func stopMIDIPLayer() {
if mp.playing {
mp.stop()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment