当我的iOS应用处于后台模式时,我无法让iOS 7 AVSpeechSynthesizer
正常工作。我已将“ App播放音频”键添加到应用程序支持的后台模式,但我仍然无法让它工作。
我还研究了创建AVMutableCompositionTrack
,AVSpeechSynthesizer
话语的可能性,然后以一种能够在后台运行的播放器以某种方式播放它 - 但没有运气。
在后台使用AVSpeechSynthesizer
时,有没有人比我好运?
答案 0 :(得分:38)
NSError *error = NULL;
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayback error:&error];
if(error) {
// Do some error handling
}
[session setActive:YES error:&error];
if (error) {
// Do some error handling
}
答案 1 :(得分:8)
对于swift 3,导入AVKit(或AVFoundation)然后添加
try? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
to viewWillAppear()。无论静音开关状态如何,都可以播放音频,屏幕关闭时可以在后台播放音频。
*编辑:AVAudioSession在AVFoundation中定义,也可用于AVKit
*编辑2:自动完成的屏幕截图,显示AVAudioSession在AVKit中可用
答案 2 :(得分:0)
此代码在Swift 5中对我有效
do {
try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: AVAudioSession.CategoryOptions.mixWithOthers)
try AVAudioSession.sharedInstance().setActive(true)
} catch {
print(error)
}
let utterance = AVSpeechUtterance(string: voiceOutdata)
let synth = AVSpeechSynthesizer()
synth.speak(utterance)
根据https://forums.developer.apple.com/thread/38917
当会话可混合时,将AVAudioSessionCategoryOptionMixWithOthers和“播放类别”一起添加,其中存在一些内部检查,涉及“为什么”在允许应用程序播放音频之前将其唤醒。
答案 3 :(得分:0)