【问题标题】:iOS text-to-speech in backgroundiOS 文本转语音在后台
【发布时间】:2016-03-02 21:29:47
【问题描述】:

我在后台播放文字转语音时遇到间歇性(啊啊!)问题,由 Apple Watch 触发。我已经正确设置了后台模式、AVSession 类别和 WatchKitExtensionRequest 处理程序。 (见下文。)我以前做过这个工作,但不知道发生了什么变化。 (会不会是 iOS 9 有问题?“之前”是指 iOS 8 等。)

问题是这样的:当应用程序从 Watch 获得请求并且应用程序处于后台或手机处于睡眠状态(锁定)时,语音有时会立即播放,并且 其他时候在应用程序被带到前台之前不会播放。操作系统似乎有时会排队音频,有时不会。我在成功和失败案例之间找不到任何共同点。我可以通过记录来验证对 speakUtterance() 的调用是在 all 情况下进行的。但它的行为各不相同,显然是随机的。唯一的线索是,可能应用在后台的时间越长,立即说话的可能性就越小。

这让我把头发拉出来。欢迎提出建议。

在 info.plist 中:

所需的背景模式:应用使用 AirPlay 播放音频或流式传输音频/视频

在 AppDelegate.application:didFinishLaunching:withOptions():

do {
    try AVAudioSession.sharedInstance().setCategory(
        AVAudioSessionCategoryPlayback, 
        withOptions:.DuckOthers
    )
    try AVAudioSession.sharedInstance().setActive(true)
} catch let error as NSError {
    // etc...
}

在 AppDelegate.application:handleWatchKitExtensionRequest...():

var bgTaskId:UIBackgroundTaskIdentifier = 0
bgTaskId = application.beginBackgroundTaskWithName(
    "Prose WKE handler",
    expirationHandler: {
        application.endBackgroundTask(bgTaskId)
    }
)
//... Post notification to call Text-to-Speech
application.endBackgroundTask(bgTaskId)

【问题讨论】:

  • 虽然是通过推送通知启动的,但我也遇到了同样的问题。但我肯定会试试你的话:)
  • 祝你好运!我最近没有检查是否不再需要它。我怀疑这是苹果的错误。让我知道它是如何为您工作的。

标签: ios audio text-to-speech background-process


【解决方案1】:

这里有一个解决方法:在调用 speakUtterance() 之后,使用 AVAudioPlayer 播放第二个 sn-p 声音(我使用了半秒的静音),这似乎是“慢跑管道”。

【讨论】:

  • 嗨 Andrew - 你的解决方法在周末成功 - 谢谢 :D 我已经向 Apple 提交了一份错误报告。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-17
  • 2012-09-29
  • 1970-01-01
相关资源
最近更新 更多