nis*_*ngh 7 xcode avfoundation ios avspeechsynthesizer swift
我们对 的输出有音频处理的要求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)
}
}
Run Code Online (Sandbox Code Playgroud)
在 iOS 16 之前,所有这些都工作正常,但在 iOS 16 中,我们开始遇到此异常:
[AXTTSCommon] TTSPlaybackEnqueueFullAudioQueueBuffer: error -66686 enqueueing buffer
Run Code Online (Sandbox Code Playgroud)
不确定这个异常到底意味着什么。因此,我们正在寻找解决此异常的方法,或者可能是播放缓冲区的更好方法。
更新:
创建了一个空项目进行测试,结果表明,如果使用空块调用 write 方法,则会生成以下日志:
小智 -1
我用于 Swift 项目的代码:
let synth = AVSpeechSynthesizer()
let myUtterance = AVSpeechUtterance(string: message)
myUtterance.rate = 0.4
synth.speak(myUtterance)
Run Code Online (Sandbox Code Playgroud)
可以将let Synth = AVSpeechSynthesizer()移出此方法并在该类的顶部声明并使用。
为 Xcode14 和 iOS 16 启用的设置:如果您使用 XCode14 和 iOS16,可能会未下载语音内容下的语音,并且您将在控制台上收到错误消息,提示标识符、来源、内容为零。您需要做的就是,转到设置中的辅助功能 -> 语音内容 -> 语音 -> 选择任何语言并下载任何配置文件。运行您的声音后,您将能够听到传递的文本中的语音。
它现在对我有用。
| 归档时间: |
|
| 查看次数: |
688 次 |
| 最近记录: |