iOS背景中的文字转语音

时间:2015-11-29 01:23:39

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

我在Apple Watch中触发了在后台播放文字转语音的间歇性(aargh!)问题。我已正确设置后台模式,AVSession类别和WatchKitExtensionRequest处理程序。 (见下文。)我之前有过这个工作,并且无法弄清楚改变了什么。 (可能是iOS 9有问题吗?"之前"其中包括iOS 8。)

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

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

在info.plist中:

所需的背景模式:App使用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)

1 个答案:

答案 0 :(得分:3)

这里有一个解决方法:播放第二段声音(我使用了半秒的静音),使用AVAudioPlayer,在调用speakUtterance()之后,这似乎&#34; jog管道&# 34 ;.