我多次在cat日志中收到此消息:
[avas] AVAudioSessionPortImpl.mm:56:ValidateRequiredFields: Unknown selected data source for Port Speaker (type: Speaker)
我正在使用此代码播放背景音乐:
let path = Bundle.main.path(forResource: fileName, ofType:"mp3")!
let url = URL(fileURLWithPath: path)
do {
let sound = try AVAudioPlayer(contentsOf: url)
self.player = sound
sound.prepareToPlay()
sound.volume = 0.05
sound.numberOfLoops = loops
sound.play()
} catch {
print("[PLAY SOUND][DELEGATE] error loading file -> \(fileName)")
}
我进行了研究,发现了类似的问题,因此我在viewdidload中添加了音频类别:
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, mode: AVAudioSessionModeDefault)
try AVAudioSession.sharedInstance().setActive(true)
} catch {
print(error)
}
添加以上代码后,即使手机处于静音模式,背景音乐仍在播放!并且Unknown selected data source for Port Speaker (type: Speaker)
的调试器消息仍在显示
答案 0 :(得分:20)
消息Unknown selected data source for Port Speaker
似乎是iOS 12的问题。显然,即使代码正在工作,也会出现一些警告。也许Apple会很快解决此问题,所以也许现在您可以忽略此警告,一旦他们找到解决方案,您就可以使其静音。
来源: AVAudioSession errors in iOS 12
至于在静音模式下播放背景音乐,这是因为您选择了AVAudioSessionCategory
。根据{{1}}文档(source):
使用此类别时,您的应用音频会继续将“静音”开关设置为“无声”或屏幕锁定。
取决于您应用的样式,也许您可以使用AVAudioSessionCategoryPlayback
(source):
您可以通过屏幕锁定和静音开关(在iPhone上称为“铃声/静音”开关)使音频静音。
或者也许是AVAudioSessionCategorySoloAmbient
(source):
此类别也适用于“伴奏”风格的应用程序,例如用户在播放“音乐”应用程序时演奏的虚拟钢琴。使用此类别时,其他应用程序的音频会与您的音频混合在一起。屏幕锁定和静音开关(在iPhone上称为“铃声/静音”开关)使音频静音。
答案 1 :(得分:3)
从Swift 4.2开始,我最初是这样设置的:
try AVAudioSession.sharedInstance().setCategory(.playAndRecord, mode: .default, options: [])
我实际上并不需要录制功能,所以我将其更改为
try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [])
这消除了错误(这是我唯一可以解决的错误)。但是,如果您还需要记录功能,显然这将无法工作。