しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

【Swift】mp3をバックグラウンド再生する

バックグラウンド再生を試してみました。

mp3をフォアグラウンドで再生

まずはフォアグラウンドでmp3を再生してみます。
再生したいmp3ファイルをAssets.xcassetsに追加して下さい。

f:id:llcc:20171018131635p:plain

そのあと下のようにmp3再生処理を記述すれば完了です。

import UIKit
import AVFoundation

class ViewController: UIViewController {
    var player: AVAudioPlayer?
    
    override func viewDidLoad() {
        if let sound = NSDataAsset(name: "bgm") {
            player = try? AVAudioPlayer(data: sound.data)
            player?.play() // → これで音が鳴る
        }
    }
}

mp3をバックグラウンドで再生

次はアプリをバックグラウンドにしても再生し続ける方法を試します。

まずはCapabilitiesのBackground ModesをONにして、Audio Airplay and Picture in Pictureにチェックを入れます。

f:id:llcc:20171018132041p:plain

その後、AppDelegateなどに下2行を追加すれば完了です。

try? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: .mixWithOthers)
try? AVAudioSession.sharedInstance().setActive(true)
import UIKit
import AVFoundation

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        
        try? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: .mixWithOthers)
        try? AVAudioSession.sharedInstance().setActive(true)
        
        return true
    }
}

これでアプリがバックグラウンドに移動してもbgmが再生されます。
シミュレータでは上の処理を追加してもバックグラウンド再生されないので注意が必要です。