web-dev-qa-db-ja.com

iOSデバイスがロックされている間、または別のアプリケーションでバックグラウンドオーディオの再生を処理する方法

OpenFrameworksを使用してiOS用の生成音楽システムを設計する場合、次の場合にユーザーがアプリケーションによって生成された音楽を聴くことができるモードを提供する必要があります。

  • デバイスはロックされています
  • ユーザーが別のアプリケーションを使用している

BLOOM、または目覚まし時計などの一部のアプリケーションはそのように動作し、この機能を有効/無効にするスイッチをユーザーに提案します。

そのためのヒントはありますか?

22
gluon

バックグラウンドオーディオの再生

音声を連続的に再生または録音するアプリは(アプリがバックグラウンドで実行中であっても)、バックグラウンドでこれらのタスクを実行するように登録できます。 Xcodeプロジェクトの[機能]タブの[バックグラウンドモード]セクションからオーディオサポートを有効にします。 (UIBackgroundModesキーをアプリのInfo.plistファイルの音声値に含めることで、このサポートを有効にすることもできます。)オーディオコンテンツをバックグラウンドで再生するアプリは、無音ではなく音声コンテンツを再生する必要があります。

Appleリファレンス「バックグラウンドオーディオの再生と録音」

画面がロックされたときに音声が継続することを確認する

この機能を有効/無効にするために、私は オーディオセッションのアクティブ化と非アクティブ化 を見つけました。

34
DanSkeel

Plistファイルにいくつかの変更を加える必要があります。

つまり、1)必要なバックグラウンドモードをアプリがオーディオを再生するように設定します

2)アプリケーションをバックグラウンドで実行しないように設定します。

 NSError *setCategoryErr = nil;
 NSError *activationErr  = nil;
 [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error:&setCategoryErr];
 [[AVAudioSession sharedInstance] setActive:YES error:&activationErr];

次に、AppDelegateでこれらの多くのコードを記述する必要があります

これで、携帯電話の画面がロックされたりバックグラウンドになったりしても、簡単にオーディオを実行できます。

29
dhaval rupani

XCodeプロジェクトの設定とコードに次の変更を加えます。

手順1)Xcodeのナビゲーターでプロジェクトファイルを選択します。次に、[機能]セクションから、[バックグラウンドモード]サブセクションをオンにします。バックグラウンドモードのリストが表示されたら、Audio Airplayスイッチをオンにします。

stp 2)次のSwiftコードを使用します。基本的に、アプリのオーディオセッションを設定する必要があります。

var audioPlayer : AVAudioPlayer!

@IBAction func playButtonClicked(sender : AnyObject){

    let dispatchQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
    dispatch_async(dispatchQueue, {

        if let data = NSData(contentsOfFile: self.audioFilePath())
        {
            do{
                let session = AVAudioSession.sharedInstance()

                try session.setCategory(AVAudioSessionCategoryPlayback)
                try session.setActive(true)

                self.audioPlayer = try AVAudioPlayer(data: data)
                //self.audioPlayer.delegate = self
                self.audioPlayer.prepareToPlay()
                self.audioPlayer.play()
            }
            catch{
                print("\(error)")
            }
        }
    });
}

func audioFilePath() -> String{

    let filePath = NSBundle.mainBundle().pathForResource("mySong", ofType: "mp3")!
    return filePath
}

このオーディオ再生セッションは、アプリがバックグラウンドにある場合、電話がサイレントモードにある場合、またはデバイスがロックされている場合でも、アプリケーションの再生を再生します。

3

このチュートリアルをご覧ください。バックグラウンドサービスの例がいくつかあります

http://www.raywenderlich.com/29948/backgrounding-for-ios

1
hmlasnk

Plistファイルにいくつかの変更を加える必要があります。

1)必要なバックグラウンドモードをアプリがオーディオを再生するように設定する

2)アプリケーションをバックグラウンドで実行しないように設定します。

let dispatchQueue = DispatchQueue.global()
            dispatchQueue.async(execute: {
                    do{
                        let session = AVAudioSession.sharedInstance()

                        try session.setCategory(AVAudioSessionCategoryPlayback)
                        try session.setActive(true)

                        self.isObjectAllocate = true
                        if self.isPlayed == false{
                            self.playSound(soundName: "http://radio.zahraun.com:8000/live.m3u")
                            self.isPlayed = true
                            self.btnPlayAudio.setImage(#imageLiteral(resourceName: "pause") , for: .normal)

                        }else{
                            self.audioPlayer.pause()
                            self.isPlayed = false
                            self.btnPlayAudio.setImage(#imageLiteral(resourceName: "audioPlay"), for: .normal)
                        }
                    }
                    catch{
                        print("\(error)")
                    }
            });
0
Varun Naharia