在ios上混合音频

2023-12-01

我正在尝试混合音频源,这样就不会出现音频闪避。我试图解决的用例是在后台进行音频通话,同时播放音乐和/或收听应用程序音频,没有任何音频闪避。音频闪避是指音频稍微降低并失真以帮助收听另一个音频会话。我可以取消音频和音频混合(或 iOS)吗?

我已经尝试过以下代码。我也尝试将其包装在 DispatchQueue.main.async 闭包中,但仍然没有运气。


// I have also tried this code with this block uncommented
// do {
//     try audioSession.setActive(false, options: .notifyOthersOnDeactivation)
//
// } catch let activationError {
//     print(activationError)
//     print(activationError.localizedDescription)
// }


let audioSession = AVAudioSession.sharedInstance()
do {
    try audioSession.setCategory(
        AVAudioSession.Category.playAndRecord,
        mode: AVAudioSession.Mode.voiceChat,
        options: [.allowBluetoothA2DP, .allowBluetooth, .mixWithOthers, .allowAirPlay]
    )
} catch let setCategoryError {
    print(setCategoryError)
    print(setCategoryError.localizedDescription)
}

do {
    try audioSession.setActive(true, options: .notifyOthersOnDeactivation)

} catch let activationError {
    print(activationError)
    print(activationError.localizedDescription)
}


答案似乎是AVAudioSession.Mode正在自动设置一些选项。苹果似乎已经做出了这样的设计决定:.voiceChat模式应该始终避开其他模式以获得最佳体验。这同样适用于.videoChat模式,这两种模式都是 Agora 通话中使用的明显模式。使用这些模式似乎会自动设置.duckOthers flag.

我能够通过将模式设置为来解决这个问题.videoRecording,它是为录制音频和视频的应用程序设计的,因此不会自动设置.duckOthers。因为这实际上不是您正在做的事情,所以它绝对是一种解决方法,并且可能会产生其他副作用。

考虑到您对 AVAudioSession 所做的事情,您可能还想阻止 Agora 从您的手下更改它。您可以致电agoraKit.setAudioSessionOperationRestriction(.all)防止 Agora 在未经您许可的情况下更改全局 AVAudioSession,这可能是完成此操作所必需的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在ios上混合音频 的相关文章

随机推荐

  • 在 QTreeView 上的子项上设置小部件

    谢谢这个线程 我可以将小部件添加到第二列或后续列QAbstractItemView 在我的例子中QTreeView 的顶级项目view 但是是否可以向子项添加小部件 这是我尝试过的部分进展顺利的方法 usr bin env python i
  • Android Studio 0.4.3 中的 Gradle 错误

    我在旧版本中找到了对此的引用 但不是最新版本 我将 Android Studio 更新到 0 4 3 并创建了一个新项目 构建立即失败 并显示以下内容 Could not create an instance of Tooling API
  • 更改 YTPlayerView 的播放质量

    我的应用程序中嵌入的 YouTube 视频存在质量问题 我在用YTPlayerView嵌入 YouTube 中的视频 我的应用程序有 2 个选项 选项 1 是用户可以观看 360p 质量的视频 选项 2 是 720p 质量 这两种选择可能吗
  • 从特定日期开始按 7 天间隔对行进行分组

    有没有办法从 Mysql 中的某个日期开始按 7 天间隔 日期时间 对行进行分组 SELECT 1 DATEDIFF columnDate start date DIV 7 AS weekNumber start date INTERVAL
  • WPF Datagrid 双击单元格 MVVM 设计

    我有一个包含数据网格的 WPF 应用程序 它绑定到我的列表对象 订单 如下所示 public class OrderBlock public Settings setting public List
  • 仅复制粘贴值( xlPasteValues )

    我正在尝试将sheetA 中的整个列复制到Sheet B sheetA 列具有用公式形成的值 我仅使用复制 SheetA 列值xl粘贴值 但它不会将值粘贴到另一个sheetB SheetB 中的列为空 我的VBA代码 Public Sub
  • Xcode 10 Beta 6 Playground 中未调用 Deinit 方法

    我正在探索内存管理概念并发现deinit方法没有调用Xcode 10 beta 6 游乐场 最初我认为可能是代码中存在一些问题 然后我在 Xcode 9 4 1 Playground 和 Xcode 10 beta 6 示例应用程序中测试相
  • fetch() 在 Firefox 中使用 SSL 客户端身份验证失败

    我有一个使用 SSL 客户端身份验证的 Web 服务器 该服务器上的网页具有同源性GET请求使用fetch API 在 Chrome 中 客户端证书按照预期在 SSL 握手中发送 从而产生 200 ok 响应 在 Firefox 中 不会发
  • 如何在触摸屏上关闭 Windows 8.1 手势和设置超级按钮栏

    我安装了戴尔触摸屏和 Windows 8 1 单语言 当我将手指从右边缘向中间移动时 Windows 8 将调出设置超级栏 或者当我将手指从中上边缘向下移动时 Windows 8 会隐藏我的应用程序并调出开始菜单 这是一个问题 因为我正在
  • JSON复杂类型,可以是一个对象或对象数组[重复]

    这个问题在这里已经有答案了 我正在尝试处理一个对象 该对象可以是对象数组 也可以只是对象 仅当 naics 是对象而不是数组时 使用下面的代码才有效 我究竟做错了什么 这是我能想到的最短的例子 section 52 219 1 b naic
  • 如何在 Xcode 4.2 上为 IOS 5 创建 UITableView?

    上周我下载了 Xcode 4 2 所以当我开始构建应用程序时 我尝试添加一个UITableView到我的一个项目 就像我开始开发以来一直在做的那样 但是UITableView不工作 我一直在寻找教程 但没有找到任何教程 如何在 Xcode
  • python 基于键匹配合并字典的最快方法

    我有 2 个字典列表 列表 A 长 34 000 列表 B 长 650 000 我本质上是根据键匹配将所有列表 B 字典插入到列表 A 字典中 目前 我正在做显而易见的事情 但这需要很长时间 说真的 就像一天一样 一定有更快的方法 for
  • 如何从秘密管理器获取私钥?

    我需要在 AWS 中存储私钥 因为当我从 AWS 创建 ec2 实例时 我需要使用此主键在配置程序 remote exec 中进行身份验证 我不想保存在存储库 AWS 中 在 Secret Manager 中保存私钥是个好主意吗 然后吃掉它
  • 调用存储过程 Mysql 时命令不同步

    我有两个存储过程 我需要对记录进行分页 比如选择下一个n记录 到选择所有匹配记录的第一个 CREATE PROCEDURE trans all IN varphone VARCHAR 15 BEGIN Select loans amt lo
  • 如何将 dicom 文件转换为 jpg

    我们如何使用java将dicom文件 dcm 转换为jpeg图像 这是我的代码 import java io File import java io IOException import org dcm4che2 tool dcm2jpg
  • Inno Setup 中的全屏背景图像

    如何在 Inno Setup 编译器中为我们的设置提供背景全屏图像 就像下面这张图一样 不要那样做 这违反了 Windows 设计准则 无论如何 如果必须的话 请使用旧版全屏安装程序模式WindowVisible yes指示然后通过修改 现
  • 在 JupyterLab 中扩展代码片段的键盘快捷键

    有谁知道如何创建一个快捷方式 将特定代码粘贴到选定的单元格或将片段扩展为代码块 例如 当按下类似的内容时 我想用有用的导入列表填充单元格Ctrl Shift M 这会将单元格内容扩展为 import numpy as np import p
  • 将多个 Bootstrap 菜单合并为一个移动设备菜单?

    我一直在看这个之前提出的问题 在折叠时合并多个 Bootstrap 3 导航栏菜单 正如您所见 它为这个问题提供了一个很好的解决方案这把小提琴 问题是对于我当前的布局来说 这个解决方案并不完美 它的显示方式如下 它适用于我想的其他场景 但在
  • Jw播放器视频分析,无需上传视频

    是否可以在不将内容上传到 jw 播放器的情况下进行视频分析 取决于您想在哪里查看分析 如果您想在您的JW 玩家帐户仪表板 您需要上传视频或添加外部内容 URL 请参见https support jwplayer com customer p
  • 在ios上混合音频

    我正在尝试混合音频源 这样就不会出现音频闪避 我试图解决的用例是在后台进行音频通话 同时播放音乐和 或收听应用程序音频 没有任何音频闪避 音频闪避是指音频稍微降低并失真以帮助收听另一个音频会话 我可以取消音频和音频混合 或 iOS 吗 我已