我在AVFoundation中使用语音合成器,创建一个语音实例,如下所示:
import AVFoundation
class CanSpeak {
let voices = AVSpeechSynthesisVoice.speechVoices()
let voiceSynth = AVSpeechSynthesizer()
var voiceToUse: AVSpeechSynthesisVoice?
init(){
for voice in voices {
if voice.name == "Arthur"
{
voiceToUse = voice
}
}
}
func sayThis(_ phrase: String){
let utterance = AVSpeechUtterance(string: phrase)
utterance.voice = voiceToUse
utterance.rate = 0.5
voiceSynth.speak(utterance)
}
}我有两个问题。
2-一些我在加载时不理解的奇怪错误:
2016-11-18 03:03:07.103349 mySKtest687:87489 0x17415ee50副本匹配资产答复: XPC_TYPE_DICTIONARY {计数= 2,事务: 0,凭单= 0x0,内容=“资产”=>:{长度= 3620字节,内容= 0x62706c6973743030d4000100020003000400050006012d01...}“结果”=>:0} 2016-11-18 03:03:07.109254 mySKtest687:87489 0x17015e610复制资产属性答复: XPC_TYPE_DICTIONARY { count = 1,事务: 0,凭单= 0x0,目录=“结果”=>:1} 2016-11-18 03:03:07.109547 mySKtest687:87489无法复制资产属性2016-11-18 03:03:07.110080 mySKtest687:87489无法获得属性'LocalURL':错误Domain=MobileAssetError Code=1“无法复制资产属性”UserInfo={NSDescription=Unable复制资产属性} 2016-11-18 03:03:07.112341 0x0,687:87489 0x17015e610复制资产属性答复: XPC_TYPE_DICTIONARY { count = 1,transaction: 0,凭单=0x0,目录=“结果”=>:1} 2016-11-18 03:03:07.112416 mySKtest687:87489无法复制资产属性2016-11-18 03:03:07.112523 mySKtest687:87489无法获得属性'LocalURL':错误Domain=MobileAssetError Code=1“无法复制资产属性”UserInfo={NSDescription=Unable复制资产属性} 2016-11-18 03:03:07.145658 0x0,687:87489 0x174341c30拷贝匹配资产答复: XPC_TYPE_DICTIONARY { count = 2,transaction: 0,凭单=0x0,内容=“资产”0x62706c6973743030d4000100020003000400050006016f01...:{ length = 4198字节,contents = =>}“结果”=>:0} 2016-11-18 03:03:07.148403 mySKtest687:87489 0x17015e610复制资产属性答复: XPC_TYPE_DICTIONARY {计数= 3,事务: 0,凭单= 0x0,内容=“属性”=>:{ length = 526字节,contents =}“结果”=>:0 "SandboxExtension“=> { length = 269,contents =SandboxExtension/private/var/MobileAsset/Assets/com_apple_MobileAsset_VoiceServices_CustomVoice/54ffb86ce0ecd2c5bf871303b5690d327a571428.asset/AssetData“}2016-18 03:03:07.149858 mySKtest687:87489 0x1743414a0复制资产属性答复: XPC_TYPE_DICTIONARY {计数= 2,事务: 0,凭单= 0x0,内容=”属性“=>:{ length = 526字节,contents = 0x62706c6973743030d4010203040506232458247665727369...}“结果”=>:0}
发布于 2016-11-17 20:32:32
至于第一,这可能不会发生。语音合成器是一个系统共享资源,因此,作为API的客户端,系统如何处理多个请求是我们无法控制的。(请注意,如果您重用相同的合成器,它会排队等待额外的话语,但是如果您创建了多个合成器,则它无法在另一个合成器说话时发出请求的话语。)
不知道2号的事,抱歉。看起来像诊断文本,不一定是错误。可能值得将错误归档,因为他们可能不想在没有实际问题的情况下进行日志诊断。
额外的答案:您可以使用函数式编程来缩短语音选择:
let voice = AVSpeechSynthesisVoice.speechVoices().first(where: { $0.name == "Arthur" })https://stackoverflow.com/questions/40663130
复制相似问题