iOS 应用程序蓝牙音频以“电话模式”出现。

2024-01-16

我有一个 iOS 应用程序,可以生成文本转语音 (TTS) 音频(AVSpeechSynthesizer)。一位用户表示,他的汽车蓝牙扬声器上的音频以“电话模式”(大概是拨打或接听电话时的音频)发出,而不是像 Youtube 以及音乐和地图应用程序那样的“音乐模式”是。这也会导致车载蓝牙扬声器无法正常处理来电。

不幸的是,我不明白为什么,甚至不知道“电话”和“音乐”模式之间有区别。使用手机扬声器时,处理来电不存在此类问题。问题仅在于蓝牙。

The AVAudioSession初始化代码如下。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        
        do {
            let session = AVAudioSession.sharedInstance()
            try session.setCategory(AVAudioSession.Category.playAndRecord, options: [.defaultToSpeaker, .allowBluetooth, .allowBluetoothA2DP])
            try session.overrideOutputAudioPort(AVAudioSession.PortOverride.none)
            try session.setActive(true, options: .notifyOthersOnDeactivation)
            
        } catch let error {
            print("audioSession properties weren't set. Error: \(error.localizedDescription)")
        }
        
        return true
    }

另外,AVSpeechSynthesizer代码如下

let synthesizer = AVSpeechSynthesizer()
let utterance = AVSpeechUtterance(string: newText)
synthesizer.speak(utterance)

这段代码还有什么应该做的,或者可能做错了什么?

提前致谢。


您所说的“电话模式”是 HFP(免提模式)。你已经包括了.allowBluetooth意思是“更喜欢使用 HFP”。 (这是一个非常令人困惑的枚举名称。)

您所说的“音乐模式”是 A2DP,您可以通过.allowBluetoothA2DP.

但是,A2DP 不是双向的,您需要使用.playAndRecord。因此会话使用 HFP。

HFP 的音频质量明显比 A2DP 差。

对于 TTS,不需要麦克风,因此您可以替换.playAndRecord with .play(我可能会放弃.allowBluetooth)。如果您需要麦克风用于其他目的,则应该放弃.allowBluetoothA2DP,并且没有(标准)方法可以避免使用 HFP 通过蓝牙进行通信。

如果您是汽车和应用程序的制造商,则可以使用非标准方法来解决此问题。您可以打开到手机的第二个 A2DP 通道,也可以通过 BLE 或 iAP2 实施专有的麦克风协议。但在与 iPhone 通话时,标准设备无法做到这一点。 (如果两台设备都支持 aptX,还有一些其他选项,但 iPhone 不支持,而且我也没有听到任何暗示它们会支持。)

请注意,您可以随时更改类别和选项,以及激活或停用会话。所以如果你有时需要麦克风,你可以切换到.playAndRecord仅在需要时才使用,并在用户不需要麦克风时最大程度地减少对用户的影响。

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

iOS 应用程序蓝牙音频以“电话模式”出现。 的相关文章

  • iOS:如何创建核心数据库的备份副本?以及如何导出/导入该副本?

    我想为我的应用程序的用户提供创建核心数据数据库备份的可能性 特别是在他切换到新设备等情况下 我该怎么做呢 特别是如何重新导入该文件 我的意思是 假设他制作了数据库的备份副本 然后更改了大量内容并想要重置为以前保存的备份副本 我该怎么做呢 T
  • iOS 搜索栏不显示结果

    更新 这实际上有效 我的自定义单元格的样式尚未出现 因此单元格看起来是空白的 那我怎样才能得到searchResultsTableView使用我的自定义单元格 我在表格视图中实现了搜索栏 当我调试时搜索 过滤所有工作 但是当我在搜索栏中输入
  • 从应用程序内发送电子邮件中的图像和文本

    如何从我的应用程序内通过电子邮件发送图像和文本 表格数据形式 请大家帮忙并提出建议 谢谢 void sendMailWithImage UIImage image if MFMailComposeViewController canSend
  • UITextfield 键盘只有字母,没有数字,没有大写字母,没有空格键?

    我希望 UITextfield 的键盘只有 a z 没有数字 没有特殊字符 并且没有大写字母 基本上我想要一个只有字母的键盘 我已经能够禁用该空间了 有人知道如何禁用数字 特殊字符和大写字母吗 解决这些问题中的任何一个都很棒 对所有角色执行
  • 如何打开/关闭 iPhone 相机闪光灯 swift 2?

    我正在寻找如何打开 关闭 iPhone 的相机闪光灯 我发现了这个 IBAction func didTouchFlashButton sender AnyObject let avDevice AVCaptureDevice defaul
  • 4.4 中新的 Objective-c 文字

    我可以写 42 这会创建一个NSNumber with int值 42 我可以用变量来做到这一点 例如 someIntVar 显然我尝试过但它不起作用 这很糟糕 因为然后我必须经历 NSNumber numberWithInt someIn
  • 统一的阿拉伯语输入字段

    有没有办法将输入字段的语言统一更改为阿拉伯语 我尝试了ArabicSupport 它正确显示了阿拉伯语 但将其与输入字段一起使用却不起作用 因为 GameObject Find input field GetComponent
  • 如何在 Swift 中退出“DispatchQueue.main.asyncAfter”

    我想在调用 deinit 时退出 DispatchQueue main asyncAfter 子视图 swift DispatchQueue main asyncAfter deadline now 5 0 self doSomething
  • 找不到 -lDoubleConversion 的库

    我尝试在 XCode 上构建 但是ld library not found for lDoubleConversion发生错误 我可以建造react native run ios 这可行 但 XCode 无法构建 ld 警告 找不到选项 L
  • 我可以在滚动时固定表格的 tableHeaderView 位置吗?

    我有一个表视图 并在其 tableHeaderView 上附加了一个 UISegmentedControl 如何使 tableHeaderView 固定 以便即使在滚动表视图时也始终可以在同一位置查看 UISegmentedControl
  • iOS:接收“304 Not Modified”响应时 AVPlayerItem 中的错误

    这是一个非常奇怪的错误 我有一个 tableView 每个单元格都使用AVPlayer从远程服务器流式传输视频 想象一下类似 Vine 的时间线 因此 当我滚动时 重复使用的单元格会使用新视频重新配置播放器 问题是 如果我非常快地来回滚动
  • Angular/ HTML5 到 iOS WKWebView 通信

    我们正在尝试看看发送信号的最佳选择是什么To iOS WKWebView fromAngular 6 HTML5 项目 任何示例都会很棒 我们想要做的是 我们在 Angular 网页上有一个按钮 单击该按钮应该通知 iOS 执行某些操作 我
  • iOS 上的三字母国家代码

    我知道您可以在 iOS 上获取所有国家 地区的两个字母的国家 地区代码 但是有没有办法获得三个字母的国家代码 So from http en wikipedia org wiki ISO 3166 1 alpha 2 http en wik
  • NSNotification 与dispatch_get_main_queue

    和 关联这个问题 https stackoverflow com questions 7905192 iphone grand central dispatch main thread我想知道关于何时使用 NSNotification 在主
  • Xcode - 免费清除设备文件夹?

    我正在删除一些文件夹和文件 以便在驱动器上腾出更多空间 我知道在路径中 Library Developer CoreSimulator Devices 每个模拟器和每个版本都有文件夹 这个文件夹对我来说大约有 11GB 大小 我知道我可以删
  • iOS 9.3 出现新的 UIPDFPageRenderOperation 错误?

    我正在向 UIWebView 添加一些 PDF 链接 每次加载并做出滚动手势时 都会收到此错误 objc 910 UIPDFPageRenderOperation 对象 0x14acaca10 过度释放 当已经解除分配时 打断 objc o
  • 如何在调用-reloadData后保留UITableView contentoffset

    CGPoint offset table contentOffset table reloadData table setContentOffset offset animated NO unuseful block UITableView
  • NSLocale 货币符号,显示金额值之前或之后

    我在用StoreKit在我的应用程序中实现应用程序内购买商店 我有一个自定义设计 这意味着价格的值应该是白色的且较大的 货币符号较小 较暗并与价格值的顶部对齐 我可以使用以下命令毫无问题地获取货币符号NSLocale in SKproduc
  • 快速从 appDelegate 中 popToRootViewController

    我试图从应用程序委托弹出到导航堆栈的根视图控制器 并且在将 obj c 中的内容转换为 swift 时遇到一些问题 obj c 中的工作原理 UINavigationController navigationController UINav
  • 如何在 Safari 和 Native App 之间共享上下文?

    我有需要通过 Safari 设置一些上下文 上下文标记 然后从本机 iOS 应用程序读取该上下文 这样做的最佳实践是什么 到目前为止的一些想法 在 HTML 5 数据库中设置上下文 但我不确定这是否有效 因为该数据库可能只能从 Safari

随机推荐

  • 将 json 列表记录转换为 PowerBI 中的表值

    我对 Power BI 完全陌生 因此我尝试了不同的方法将 JSON 文件转换为表 但到目前为止尚未成功 Family Father F1 Age 50 Mother M1 MAge 49 Children Name C1 Name C2
  • jQuery 有“存在”功能吗?

    如何检查 jQuery 中某个元素是否存在 我当前的代码是这样的 if selector length gt 0 Do something 有没有更优雅的方法来解决这个问题 也许是插件或函数 在 JavaScript 中 一切都是 真 或
  • Android:禁用平板电脑应用程序

    我开发了一个应用程序 现在我想限制平板电脑上的应用程序 意味着应用程序不应在任何平板电脑上运行 为此 我在 Androidmenifest XML 文件中将支持屏幕指定为
  • 我应该用什么替换已弃用的 sizeWithFont: 方法?

    我有一个方法 可以为给定字符串长度的 UITextView 提供完美的大小 具有相应的正确字体大小 NSInteger heightOfLabel NSString string CGSize maximumLabelSize CGSize
  • 使应用程序在锁屏界面显示为 iOS 8 建议应用程序

    随着 iOS 8 的推出 有一项功能可以根据您的位置在锁屏上显示 建议的应用程序 问题是 如果我有一个应用程序 当用户位于这些位置附近时 如何定义使我的应用程序显示为 建议的应用程序 的位置 我在苹果开发者论坛上问了同样的问题 用户 Mar
  • Typescript 加载器在编译时抛出多个“重复标识符..”错误

    我今天将一个项目从我的工作站移至我的家用电脑 现在我无法再编译它了 每当我运行 webpack 时 我都会收到以下错误 TS2300 Duplicate identifier Request ERROR in at loader C Use
  • 删除包装 div 并保持所有子 div 完好无损?

    我有一个包装 div 里面有几个子 div 这些子 div 里面也有标签 我想删除包装 div 我考虑过 JQuery 的展开 但似乎我需要指定子 div 来告诉 Jquery 展开什么 如果有几个孩子 这可行吗 所以 代码如下 div d
  • 如何使用 conda MatchSpec?

    如何列出 conda 可用的软件包版本 https stackoverflow com questions 43222407 how to list package versions available with conda 4755625
  • 在sequelize中创建新项目时id: null

    当我尝试创建一个新的对话项目时 Sequelize 将返回一个带有以下内容的对象 id null即使数据库中有有效的 id 如何让 Sequelize 将最后插入的 id 返回到新创建的项目 Conversation create type
  • 如何在JPA存储库中编写动态查询?使用Java springboot。规范是答案吗?

    我在 JPA 存储库中有一个项目 我想使用 UNIONS 和响应参数从两个表中检索值 并且我成功执行了以下本机查询 Public interface resultRepository extends JpaRepository
  • SQL - 获取所有一对多关系的平均分

    我的问题和分数之间存在一对多的关系 我的表设置是 Table Question id int auto increment primary key question varchar 255 Table Score id int auto i
  • 如何使用 OpenGL 正确处理 Alpha 合成

    我正在使用glBlendFunc GL SRC ALPHA GL ONE MINUS SRC ALPHA 正如文档所述 实际上 Direct3D 文档中也说了同样的事情 一开始一切都很好 直到我从 GPU 下载结果并将其制作为 PNG 图像
  • 使用pointinterval减少点数

    With pointinterval 可以告诉 Gnuplot 何时在线上插入点 现在 通过将其设置为 1 线不会穿过该点 例如 pi 1 lt gt lt gt lt gt lt gt lt gt lt gt lt gt lt gt lt
  • SonarQube 分析成功,但服务器未处理

    我最近将 SonarQube 服务器从 5 1 2 升级到 5 2 我们通过 Jenkins 使用 SonarQube Runner 2 4 运行分析 并且分析成功 问题是服务器不会处理分析 在针对失败的后台任务显示的日志末尾可以看到以下错
  • 使用 MessageContract 时,Webservice Response 会变成 ref 参数

    我定义了以下接口 ServiceContract public interface IHealthProducts OperationContract ResponseClass OrderSelfSignedHealthCertifica
  • 机架会话在 Chrome 中丢失

    我有一个非常简单的应用程序 托管在 EC2 上 使用 Sinatra 构建 并在 nginx 后面提供 Thin 服务 问题是 对于 Chrome 会话变量在 Sinatra 中会 丢失 在 Firefox 中不会发生这种情况 这是使用 R
  • 检测 Windows 还是 Linux? [复制]

    这个问题在这里已经有答案了 我正在寻求在 Windows 和 Linux 上运行通用的 Java 程序 该程序需要在每个平台上做一些不同的事情 那么我的 Java 程序如何 应该检测它是在 Linux 下运行还是在 Windows 下运行
  • Firebase 远程配置根据初始请求得出结果

    我正在使用单例从 Firebase 远程配置文件中获取参数 第一次运行应用程序时 我只能从单例中访问默认值 后续运行正确返回配置的值 有什么更好的方法可以做到这一点 以便我可以从新的开始访问这些值 protocol RemoteConfig
  • 如何缩放基于 FFT 的互相关,使其峰值等于 Pearson's rho

    问题描述 FFT 可用于计算两个信号或图像之间的互相关 确定两个信号之间的延迟或滞后A and B 只需定位以下峰值 IFFT FFT A conjugate FFT B 然而 峰值的幅度与各个信号的频谱的幅度相关 从而确定皮尔逊相关系数
  • iOS 应用程序蓝牙音频以“电话模式”出现。

    我有一个 iOS 应用程序 可以生成文本转语音 TTS 音频 AVSpeechSynthesizer 一位用户表示 他的汽车蓝牙扬声器上的音频以 电话模式 大概是拨打或接听电话时的音频 发出 而不是像 Youtube 以及音乐和地图应用程序