Mic*_*ael 21 avfoundation avspeechsynthesizer swift
我为我的应用程序的 text2speech 函数编写了一个小函数。该代码在 ios16 之前都可以正常工作。现在我看到以下控制台日志:
022-09-13 18:04:02.274692+0200 Blindzeln_Prototyp[47358:164517] [asset] Failed to get sandbox extensions
2022-09-13 18:04:02.314956+0200 Blindzeln_Prototyp[47358:164517] [catalog] Query for com.apple.MobileAsset.VoiceServicesVocalizerVoice failed: 2
2022-09-13 18:04:02.315688+0200 Blindzeln_Prototyp[47358:164517] [catalog] Unable to list voice folder
2022-09-13 18:04:02.333665+0200 Blindzeln_Prototyp[47358:164517] [catalog] Query for com.apple.MobileAsset.VoiceServices.GryphonVoice failed: 2
2022-09-13 18:04:02.334239+0200 Blindzeln_Prototyp[47358:164517] [catalog] Unable to list voice folder
2022-09-13 18:04:02.338622+0200 Blindzeln_Prototyp[47358:164517] [catalog] Unable to list voice folder
2022-09-13 18:04:02.355732+0200 Blindzeln_Prototyp[47358:164583] [AXTTSCommon] File did not exist at content path: (null) (null). Attempting to fallback to default voice for language: (null)
2022-09-13 18:04:02.420342+0200 Blindzeln_Prototyp[47358:164583] [AXTTSCommon] Error: Unable to speak. No speech service: voice: (null) identifier: (null), language: (null), resource: (null)
Run Code Online (Sandbox Code Playgroud)
这是简单的代码:
import Foundation
import AVFoundation
func sayIt(text2speech: String) {
let utterance = AVSpeechUtterance(string: String(text2speech))
utterance.voice = AVSpeechSynthesisVoice(language: "de-DE")
utterance.rate = 0.5
let synthesizer = AVSpeechSynthesizer()
synthesizer.speak(utterance)
}
Run Code Online (Sandbox Code Playgroud)
有什么提示吗?
Sha*_*DES 26
尝试移动
let synthesizer = AVSpeechSynthesizer()
Run Code Online (Sandbox Code Playgroud)
在函数之外。这对我有用。
小智 12
Rohit 描述的设置在 iOS 16 模拟器上对我有用。显然,iOS 16 模拟器默认情况下没有加载任何声音。模拟设备本身的确切顺序如下:
设置/辅助功能/语音内容 必须打开语音选择。这将列出声音。触摸那个。选择你的语言。选择一个声音。单击下载按钮。等待。完成后,如果需要,您可以退出并关闭“说出所选内容”。必须打开它才能选择和下载语音。
小智 8
我使用过的代码:
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,可能会未下载语音内容下的语音,并且您将在控制台上收到错误消息,提示标识符、来源、内容为零。您需要做的就是,转到设置中的辅助功能 -> 语音内容 -> 语音 -> 选择任何语言并下载任何配置文件。运行您的声音后,您将能够听到传递的文本中的语音。
你需要指定一名代表
class Speaker: NSObject, AVSpeechSynthesizerDelegate {
let synthesizer = AVSpeechSynthesizer()
init() {
synthesizer.delegate = self
}
func speak(msg: String) {
let utterance = AVSpeechUtterance(string: msg)
utterance.rate = 0.57
utterance.pitchMultiplier = 0.8
utterance.postUtteranceDelay = 0.2
utterance.volume = 0.8
let voice = AVSpeechSynthesisVoice(language: "en-US")
utterance.voice = voice
synthesizer.speak(utterance)
}
}
Run Code Online (Sandbox Code Playgroud)
现在是如何使用
let s = Speaker()
s.speak(msg: "The quick brown fox jumped over the lazy dog.")
Run Code Online (Sandbox Code Playgroud)
您在上面将 声明AVSpeechSynthesizer为局部变量。一旦 anAVSpeechSynthesizer超出范围并被释放,语音输出就会停止。
\n\n系统不会自动保留语音合成器,因此您需要手动保留它直到语音结束。
\n
只要移动let synthesizer = AVSpeechSynthesizer()到一个可以在记忆中存在的地方,至少演讲已经结束了。
| 归档时间: |
|
| 查看次数: |
8796 次 |
| 最近记录: |