端口扬声器的未知选定数据源(类型:扬声器)?

Jac*_*ack 22 audio xcode swift

我多次在cat日志中收到此消息:

[avas] AVAudioSessionPortImpl.mm:56:ValidateRequiredFields: Unknown selected data source for Port Speaker (type: Speaker)
Run Code Online (Sandbox Code Playgroud)

我正在使用此代码播放背景音乐:

  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)")
        }
Run Code Online (Sandbox Code Playgroud)

我做了一个研究,我发现了类似的问题,所以我在viewdidload中添加了音频类别:

  do {
            try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, mode: AVAudioSessionModeDefault)
            try AVAudioSession.sharedInstance().setActive(true)
        } catch {
            print(error)
        }
Run Code Online (Sandbox Code Playgroud)

在我添加了上面的代码之后,即使手机处于静音模式,背景音乐也在播放!并且调试器消息Unknown selected data source for Port Speaker (type: Speaker)仍然显示

小智 20

该消息Unknown selected data source for Port Speaker似乎是iOS 12的问题.显然,即使代码正常工作,也会出现一些警告.也许苹果很快就会解决这个问题,所以也许现在你可以忽略这个警告,一旦找到解决方案,你就可以让它沉默.

来源:iOS 12中的AVAudioSession错误

至于在静音模式下播放的背景音乐,这是因为AVAudioSessionCategory您选择了.根据AVAudioSessionCategoryPlayback文件(来源):

使用此类别时,您的应用程序音频会继续将静音开关设置为静音或屏幕锁定时.

根据您应用的风格,您可以使用AVAudioSessionCategorySoloAmbient(来源):

屏幕锁定和静音开关(在iPhone上称为Ring/Silent开关)可以使您的音频静音.

或许AVAudioSessionCategoryAmbient(来源):

此类别也适用于"播放"风格的应用程序,例如用户在播放音乐应用程序时播放的虚拟钢琴.使用此类别时,来自其他应用程序的音频会与您的音频混合.屏幕锁定和静音开关(在iPhone上称为Ring/Silent开关)可以使您的音频静音.