我环顾四周,发现了类似的问题,但没有完全相同......如果我在某个地方错过了答案,我会道歉。
我正在使用SpriteKit完成我在Swift中编写的游戏。
我玩过的大多数其他游戏,我都可以在背景中播放音乐或播放音乐,并且在玩游戏时仍能听到它。
当我在玩游戏时,我注意到它会自动关闭其他应用的音频。
我没有使用AVAudioPlayer
声音,因为我目前只有少量的音频效果,所以我只是使用了SKAction.playsoundfilenamed动作。
我确实有逻辑可以打开和关闭我的声音,但这只是使用一些内部的if / else逻辑。
我想知道是否有一些我可以设置的AVAudio
属性可以让其他应用音频在我打开时继续播放?我在文档中找不到这个。
谢谢!
答案 0 :(得分:5)
在Xcode 8.2.1,Swift 3(最新语法)中,这对我有用:
import AVFoundation
override func viewDidLoad() {
super.viewDidLoad()
let audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setCategory(AVAudioSessionCategoryPlayback, with: [.mixWithOthers])
try audioSession.setActive(true)
}catch{
// handle error
}
// the rest of your code
}
答案 1 :(得分:4)
将AVAudioSession
类别设为Ambient
。
import AVFoundation.AVAudioSession
AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient, error: nil)
此类别也适用于“播放”风格的应用,例如用户在播放音乐应用时播放的虚拟钢琴。使用此类别时,来自其他应用程序的音频会与您的音频混合。通过屏幕锁定和静音开关(在iPhone上称为响铃/静音开关)使您的音频静音。
答案 2 :(得分:3)
从2015年10月14日的xCode 7开始,这对我有用。
根据你正在使用的Swift版本,将它放在GameViewController.swift上。
//Swift 2.2
import AVFoundation.AVAudioSession
//Swift 3.0
import AVFoundation
并将此代码放在ViewDidLoad中:
try! AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)
使用"尝试"是你希望程序做某事然后发现错误的时候。它是一个错误处理程序。通过添加感叹号,您几乎都在说"我知道这不会失败。"
这对我有用。我正在播放背景音乐,因为我的应用也是。
答案 3 :(得分:2)
在应用程序启动时调用此代码,以便您的AVAudioSession允许其他应用程序响起:
let audioSession = AVAudioSession.sharedInstance()
audioSession.setCategory(AVAudioSessionCategoryPlayback, withOptions:AVAudioSessionCategoryOptions.MixWithOthers, error: nil);
audioSession.setActive(true, error: nil)
答案 4 :(得分:0)
我不确定您viewController
的体系结构,但您可以尝试在viewDidLoad
中运行此体系结构,或创建在viewDidLoad
内调用的独立方法。
此代码可能有更好的位置,但不知道您的应用程序的代码是什么样的,您可以将其粘贴在那里以确定是否可以使其运行。
// this goes at the top w/ your import statements
import AVFoundation
// you could put this in your viewDidLoad or wherever it's appropriate for your code
let session = AVAudioSession.sharedInstance()
session.setCategory(AVAudioSessionCategoryAmbient, withOptions: nil, error: nil)
session.setActive(true, withOptions: nil, error: nil)