我们需要对输出进行音频处理AVSpeechSynthesizer
。所以我们开始使用write
的方法AVSpeechSynthesizer
类在顶部应用处理。它的。我们目前拥有的:
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
不确定这个异常到底意味着什么。因此,我们正在寻找解决此异常的方法,或者可能是播放缓冲区的更好方法。
UPDATE:
创建了一个空项目进行测试,结果表明,如果使用空块调用 write 方法,则会生成以下日志:
我用于 Swift 项目的代码:
let synth = AVSpeechSynthesizer()
let myUtterance = AVSpeechUtterance(string: message)
myUtterance.rate = 0.4
synth.speak(myUtterance)
可以移动让合成器 = AVSpeechSynthesizer()脱离此方法并在该类的顶部声明并使用。
为 Xcode14 和 iOS 16 启用的设置:如果您使用的是 XCode14 和 iOS16,可能是语音内容下的语音未下载,您将在控制台上收到错误消息,提示标识符、来源、内容为零。您需要做的就是,转到设置中的辅助功能 -> 语音内容 -> 语音 -> 选择任何语言并下载任何配置文件。运行您的声音后,您将能够听到传递的文本中的语音。
它现在对我有用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)