iOS背景中的文字转语音

And*_*can 6 audio text-to-speech background-process ios

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

问题是:当应用程序从Watch获取请求并且应用程序在后台或手机处于休眠状态(已锁定)时,语音有时会立即播放,而其他时间则无法播放,直到应用程序被带来到前台.操作系统似乎有时排队音频,有时不排队.我在成功和失败案例之间找不到任何共同点.我可以登录,要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...
}
Run Code Online (Sandbox Code Playgroud)

在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)
Run Code Online (Sandbox Code Playgroud)

And*_*can 7

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