bounty还有6天到期。此问题的答案有资格获得+200声望奖励。daniel想要引起更多关注这个问题:我至少要找出错误是什么,比如错误号是什么意思,是什么导致了错误。
我们需要对AVSpeechSynthesizer
的输出进行音频处理。因此,我们首先使用AVSpeechSynthesizer
类的write
方法在顶部应用处理。我们目前拥有的:
var synthesizer = AVSpeechSynthesizer()
var playerNode: AVAudioPlayerNode = AVAudioPlayerNode()
fun play(audioCue: String){
let utterance = AVSpeechUtterance(string: audioCue)
synthesizer.write(utterance, toBufferCallback: {[weak self] buffer in
// We do our processing including conversion from pcmFormatFloat16 format to pcmFormatFloat32 format which is supported by AVAudioPlayerNode
self.playerNode.scheduleBuffer(buffer as! AVAudioPCMBuffer, completionCallbackType: .dataPlayedBack)
}
}
在iOS 16之前,所有这些都运行良好,但在iOS 16中,我们开始遇到这个异常:
[AXTTSCommon] TTSPlaybackEnqueueFullAudioQueueBuffer: error -66686 enqueueing buffer
我不知道这个异常到底是什么意思。因此,我们正在寻找一种解决此异常的方法,或者可能是一种更好的播放缓冲区的方法。
更新:
创建了一个空项目进行测试,结果发现如果使用空块调用write方法,则会生成以下日志:
1条答案
按热度按时间hgqdbh6s1#
我在Swift项目中使用的代码:
可以将**let synth = AVSpeechSynthesizer()**移出此方法,并在此类的顶部声明并使用。
**Xcode 14和iOS 16启用的设置:**如果您使用的是XCode 14和iOS 16,可能是语音下的语音内容没有下载,您会在控制台上看到一个错误,说identifier,source,content nil。所有你需要做的是,去accessibility在设置-〉口语内容-〉语音-〉选择任何语言和下载任何配置文件。在此之后运行你的声音,你将能够听到通过文本的讲话。
它现在为我工作。