再生関係の基本的な操作に対応
動作を確認した環境
環境 | 情報 |
---|---|
Xcode | 6.3.2 (6D2105) |
iOS | 8.3 |
Swift | 1.2 |
Date | 2015/6/5 |
再生関係の基本的な操作に対応
MusicPlayer関係の処理が増えるのは目に見えてるので、MPMusicPlayerControllerを管理するためのクラスをあらかじめ用意。再生のテスト用に、すべての曲を再生キューにセットする処理を入れておく。
import Foundation import MediaPlayer /// MPMusicPlayerControllerを管理するためのクラス class SK4MusicPlayerAdmin: NSObject { /// アプリ全体で使用するMPMusicPlayerController let player = MPMusicPlayerController.systemMusicPlayer() //////////////////////////////////////////////////////////////// // MARK: - 再生キュー /// すべての曲を再生キューにセット func allSongsToQueue() { let query = MPMediaQuery.songsQuery() player.setQueueWithQuery(query) } //////////////////////////////////////////////////////////////// // MARK: - 基本操作 /// 再生 func play() { player.play() } /// 一時停止 func pause() { player.pause() } /// 1つ前の曲に移動 func skipToPreviousItem() { player.skipToPreviousItem() } /// 1つ後の曲に移動 func skipToNextItem() { player.skipToNextItem() } }
あとは、それぞれのアクションで、対応する処理を呼ぶようにするだけ。
import UIKit let g_musicPlayer = SK4MusicPlayerAdmin() class ViewController: UIViewController { @IBAction func onRepeat(sender: AnyObject) { println(__FUNCTION__) } @IBAction func onPrev(sender: AnyObject) { g_musicPlayer.skipToPreviousItem() } @IBAction func onPause(sender: AnyObject) { g_musicPlayer.pause() } @IBAction func onPlay(sender: AnyObject) { g_musicPlayer.play() } @IBAction func onNext(sender: AnyObject) { g_musicPlayer.skipToNextItem() } @IBAction func onShuffle(sender: AnyObject) { println(__FUNCTION__) } //////////////////////////////////////////////////////////////// override func viewDidLoad() { super.viewDidLoad() g_musicPlayer.allSongsToQueue() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }
ここまで出来たら、実機で実行して動作を確認。MPMusicPlayerController関係の処理は、iOS Simulatorで確認できないのが面倒で残念。せめて、実機にコンパイルする際に、いちいちStandard Libraryをコピーするのだけでもどうにかしてくれれば・・・
これで、基本的な再生/一時停止/前の曲に移動/次の曲に移動まで出来るようになった。リピートとシャッフルへの対応は後回し。
プログラムとしては、MPMusicPlayerControllerの管理クラスを、あっさりグローバル変数に持ってるのがポイント? C/C++の時代には忌み嫌われてたグローバル変数だけど・・・ Swiftでは、そこまで嫌う必要も無いんじゃないかな、と。
https://itunes.apple.com/jp/app/46-minute-shuffle/id991599315?mt=8&uo=4&at=10l8JW&ct=hatenablog