使用 AVAudioSession 时背景音频安静

Posted

技术标签:

【中文标题】使用 AVAudioSession 时背景音频安静【英文标题】:Background Audio quiet when using AVAudioSession 【发布时间】:2019-04-13 17:23:43 【问题描述】:

我正在尝试使用背景音频(如音乐)重现 snapchat 的效果。进入他们的应用程序时,即使在录制时,它也会保持正常音量。在我的应用程序中,它在打开应用程序后立即变得几乎无声。

我尝试在 AVAudiosession 设置类别函数中使用 .mixWithOthers 和 .defaultToSpeaker 选项。这些没有区别。

            if #available(iOS 10.0, *) 
                try AVAudioSession.sharedInstance().setCategory(.playAndRecord, mode: .default, options: [.mixWithOthers, .allowBluetooth, .allowAirPlay, .allowBluetoothA2DP, .defaultToSpeaker])
             else 
                let options: [AVAudioSession.CategoryOptions] = [.mixWithOthers, .allowBluetooth, .defaultToSpeaker]
                              let category = AVAudioSession.Category.playAndRecord
                let selector = NSSelectorFromString("setCategory:withOptions:error:")
                AVAudioSession.sharedInstance().perform(selector, with: category, with: options)
            
            try AVAudioSession.sharedInstance().setActive(true)
            session.automaticallyConfiguresApplicationAudioSession = false
        
        catch 
            print("Failed to set background audio preference")

        

【问题讨论】:

“在我的应用程序中,它在打开应用程序后立即变得几乎无声。”可能是因为您在打开应用程序后立即配置和激活音频会话?如果这是问题所在,请不要这样做。仅在您真正需要之前配置和激活音频会话。 如果我的应用程序立即打开摄像头,在我按下录制按钮之前我是否仍然不这样做?我的印象是,一旦进入该记录视图,我应该立即执行此操作。 好吧,让我们来实验一下:试试我说的(即是的,在按下录制按钮之前不要这样做),看看效果是否更接近您的想法。 成功了!非常感谢 :)。尽管您发表了评论,但我认为我不能将您选为最佳评论?不知道它是如何工作的。 嗯,它很好用 - 我会把我的评论变成一个答案,这样我们就可以关闭它,如果你满意的话。 【参考方案1】:

在我的应用中,它在打开应用后立即变得几乎无声。

可能是因为您在打开应用程序后立即配置和激活音频会话?如果这是问题所在,请不要这样做。仅在您真正需要之前配置和激活音频会话。例如,在用户真正要求开始录制之前不要调整音频会话。 很好在应用的整个生命周期内根据需要更改音频会话类别。

【讨论】:

以上是关于使用 AVAudioSession 时背景音频安静的主要内容,如果未能解决你的问题,请参考以下文章

音频单元背景冲突

防止无音频 AVPlayer 暂停背景音频

访问 AVAudioSession 的音频缓冲区

iOS 音频-AVAudioSession

使用 AVAudioSession 播放音频问题

AVAudioSession 不会自动连接蓝牙 A2DP 音频?