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 大师您好 我已经广泛搜索了答案 但找不到答案 我打赌对我的问题的第一个答复将是另一个类似的问题 但我找不到它 不管怎样 我的问题是我正在运行一个简单的地图应用程序 用户可以在地图上放置图钉 并在放置的图钉周围有一个自定义的圆圈覆盖
  • 如何在 Monotouch 中对 UIImageView 进行运动模糊效果?

    在 MonoTouch 中进行实时运动模糊的方法是什么 当滚动惯性图片库时 我需要在 UIImageView 上应用运动模糊效果 以强度和方向作为参数 就像在 Photoshop 中一样 我在 CocoaTouch 或 CoreAnimat
  • 如何使用 Unity 在 Android 设备上以各种宽高比显示游戏的相同部分?

    我从 Libgdx 引擎转向 Unity 是一名初级程序员 我尝试在 Unity 中为 Android 和 iOS 设备制作游戏 但在宽高比 分辨率缩放方面遇到问题 在 Libgdx 中 如果您开发了一些东西 您可以指定 默认 分辨率 并且
  • iPhone - 创建图像网格列表

    我正在开发一个应用程序 它从网站获取图像并使用网格视图向用户显示 例如Apple的照片应用程序 当您点击图像时 我会推送一个显示图像信息和其他内容的视图控制器 实现这个的更好方法是什么 我想到了自定义 UITableViewCell 我见过
  • 应用程序在第二次运行 nsnull 计数的循环时崩溃

    我有一个循环 第一次运行正常 但第二次循环时我得到 NSNull count unrecognized selector sent to instance 0x3a094a70 Terminating app due to uncaught
  • cordova-plugin-whitelist 适用于 Android,但不适用于 iOS (Phonegap Build)

    我正在开发一个用 Cordova 封装并使用 Phonegap Build 构建的 JavaScript 应用程序 我们包括cordova plugin whitelist来自我们构建中的 npm 并添加了
  • 使用 JavaScript 从 URL 变量读取来加载不同的 CSS 样式表

    我试图在我的 WordPress 博客上使用两个不同的样式表 以便在通过 Web 访问页面时使用一个样式表 而在通过我们的 iOS 应用程序访问博客内容时使用另一个样式表 现在 我们将 app true 附加到来自 iOS 应用程序的 UR
  • 为什么我们在 @synchronized 块中传递 self ?

    我猜 synchronized 块不依赖于对象 而是依赖于线程 对吗 既然如此 我们为什么要传递 self 呢 synchronized是语言提供的用于创建同步作用域的构造 因为使用简单的全局共享互斥锁效率非常低 因此序列化每个单独的互斥锁
  • 适用于 iOS 的 Google Cast SDK 2.3.0 不支持 64 位

    似乎是适用于 iOS 的 Google Cast SDK 2 3 0 版本 https developers google com cast downloads GoogleCastFramework 2 3 0 Release zip停止
  • 在界面生成器/故事板中设置 UIButton 图像

    我有一个视图控制器 我在故事板中添加了一个圆形矩形按钮 该应用程序运行良好 我还使用故事板将按钮连接到 segue 我正在尝试为此按钮设置一个自定义图像以用于其开和关状态 我如何访问此按钮并设置其属性 在本例中为开和关图像 这是一个屏幕截图
  • 如何等待 webViewDidFinishLoad 完成

    我有一个初始化 webView 的布尔条件 并在 webViewDidFinishLoad 中加载另一个委托 以便在完成完成后触发 但是 由于布尔值在条件 webViewDidFinishLoad 之前返回 因此页面永远不会完全加载 如何确
  • iOS 4.2.1 丢失文件?

    这是我第一次使用最新的 xcode 3 2 5 和新的 iOS 4 2 1 当我在设备上运行应用程序时 我收到以下运行时错误 无法读取 Developer Platforms iPhoneOS platform DeviceSupport
  • 使用 UIActionSheet 更改视图时工具栏项目消失

    当从 a 启动视图时UIActionSheet按钮 通过导航栏后退按钮返回视图后 工具栏虽然仍然可见 但上面没有任何以前的按钮 自从更新到 iOS 6 以来 这个错误就出现了 并且是在模拟器和仅运行 iOS 6 的设备上测试时发生的 如果我
  • Swift:从自定义 UITableViewCell 中的 UITextField 检索文本并将其放入数组中

    我正在制作一个非常简单的应用程序 用户在第一个屏幕中输入人数 在第二个屏幕中 它会生成一些UITableViewCell基于用户在第一个屏幕中输入的数字 这UITableViewCell have a UITextField在其中 一旦用户
  • iOS 内存警告

    我正在尝试使用从 Parse 数据库下载的图像填充集合视图 但我收到内存警告 然后偶尔崩溃 有谁知道其他应用程序如何设法呈现这么多图像而不崩溃 有人可以告诉我如何优化我已有的东西吗 这是所有相关代码 https gist github co
  • 从 RemoteIO 保存音频的示例?

    我进行了搜索 但没有找到任何从 RemoteIO 音频单元保存音频的好示例或教程 我的设置 使用 MusicPlayer API 我有几个 AUSamplers gt MixerUnit gt RemoteIO 音频播放效果很好 我想添加将
  • 从 Core Data、iOS 获取最后插入的项目

    有没有办法获取核心数据数据库中最后插入的项目 这将返回最后插入的对象 setFetchLimit 1 和 setFetchOffset 所有条目数 1
  • swift 中的负数模

    负数模如何在 swift 中工作 当我执行 1 3 时 它给出 1 但余数是 2 其中有什么问题 雨燕余数运算符 计算余数 整数除法 a b a a b b where 是截断整数除法 在你的情况下 1 3 1 1 3 3 1 0 3 1
  • 如何自动为 Swift 类创建初始化程序?

    UPDATE 使用结构而不是类 struct 在很多方面都更好 它有自己的初始化器 这是我的模型课 是否有可能创建init自动方法 每次我都必须将所有变量一一初始化 这会花费很多时间 class Profile var id String
  • 当设置 setVisibleXRangeMaximum 时,iOS-Charts X 轴值无限重复

    我正在尝试绘制一个图表 其中 x 轴是TimeIntervalY 轴是power consumption 由于每天都会有数据 因此将有太多数据无法显示 因此 我想一次显示 5 个值 我通过设置实现了这一点self chart setVisi

随机推荐

  • 将 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 以及音乐和地图应用程序