アプリがバックグラウンドに入ったときや画面がロックされているときに音を鳴らす必要がある運動アプリケーションに取り組んでいます。私はまた、他のアプリからのサウンド(音楽など)を再生しながら、サウンドエフェクトを再生できるようにする必要があります。Swift 3でアプリがバックグラウンドになっているときのiOS 10での音の再生方法
私はAVAudioSessionCategoryAmbientを使用してiOS 9でこの作業を行っていましたが、私のアプリが非アクティブになるか画面がロックされるとすぐに音が止まります。
ここに私のコードの簡易版はデモアプリにあります:
import UIKit
import AVFoundation
class ViewController: UIViewController {
var session: AVAudioSession = AVAudioSession.sharedInstance()
var timer = Timer()
let countdownSoundFile = "154953__keykrusher__microwave-beep"
let countdownSoundExt = "wav"
var audioPlayer = AVAudioPlayer()
override func viewDidLoad() {
super.viewDidLoad()
activateAudio()
}
func activateAudio() {
_ = try? session.setCategory(AVAudioSessionCategoryAmbient, with: [])
_ = try? session.setActive(true, with: [])
}
@IBAction func play() {
timer = Timer.scheduledTimer(timeInterval: 2.0, target: self, selector: #selector(ViewController.playSound), userInfo: nil, repeats: true)
}
func playSound() {
if let soundURL = Bundle.main.url(forResource: countdownSoundFile, withExtension: countdownSoundExt) {
do {
print("sound playing")
try audioPlayer = AVAudioPlayer(contentsOf: soundURL)
audioPlayer.prepareToPlay()
audioPlayer.play()
} catch {
print("no sound found")
}
}
}
}
私も自分のplistに必要なバックグラウンドモードを追加した、バックグラウンドモードでAudio, Airplay, and Picture in Picture
の能力を確認しました。
私はデバイスでこれをテストしています。スクリーンをロックしたり、ホームボタンを押すと、私のサウンドは止まり、アプリケーションが再びアクティブになると再開します。
私が使用して回避策が見つかりました:
var mySound: SystemSoundID = 0
AudioServicesCreateSystemSoundID(soundURL as CFURL, &mySound)
AudioServicesPlaySystemSound(mySound);
をしかし、これは音の音量を変更することはできませんし、私もAVSpeechSynthesizerを使用する必要があり、この回避策は、そのために動作しません。 。
私はこの作業をするために何ができるのですか?
EDIT:
私は_ = try? session.setCategory(AVAudioSessionCategoryPlayback, with: [.mixWithOthers])
にカテゴリ行を変更し、これはアプリの実行中に音楽を再生することを可能にする、しかし音はまだ時に画面がロックまたはバックグラウンドになり停止します。私はこれらのシナリオで演奏を続ける音が必要です。
EDIT:答えは指摘したように
、私は私のアプリがバックグラウンドにしたときの音を再生することはできませんが、_ = try? session.setCategory(AVAudioSessionCategoryPlayback, with: [.mixWithOthers])
を使用すると、画面がオフになり、他のアプリからの音(音楽)と混合したときに音が再生できるようありません。
また、オーディオ用に「背景モード機能」も有効にする必要があります。 – iphonic
@iphonic質問をお読みください。彼はそれをしたと言います。問題はなぜそれが不十分かということです。 – matt
@mattアップデートで私の質問を編集しました。あなたの提案は、私のアプリがサウンドを再生している間に別のアプリからの音楽を再生できるようにしますが、画面が消えたり、アプリがバックグラウンドに入ると、何か案は? – OffensivelyBad