首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于iOS加载错误的语音合成,不并发

基于iOS加载错误的语音合成,不并发
EN

Stack Overflow用户
提问于 2016-11-17 19:10:28
回答 1查看 1.5K关注 0票数 2

我在AVFoundation中使用语音合成器,创建一个语音实例,如下所示:

代码语言:javascript
复制
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)
    }
}

我有两个问题。

  1. 没有并发性。多次调用此函数将导致字符串排队发言。我不想这样。如果对这个函数有多个调用,关闭在一起,我希望这个声音立即开始说话,即使这意味着自己说话。我怎样才能做到这一点?

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}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-17 20:32:32

至于第一,这可能不会发生。语音合成器是一个系统共享资源,因此,作为API的客户端,系统如何处理多个请求是我们无法控制的。(请注意,如果您重用相同的合成器,它会排队等待额外的话语,但是如果您创建了多个合成器,则它无法在另一个合成器说话时发出请求的话语。)

不知道2号的事,抱歉。看起来像诊断文本,不一定是错误。可能值得将错误归档,因为他们可能不想在没有实际问题的情况下进行日志诊断。

额外的答案:您可以使用函数式编程来缩短语音选择:

代码语言:javascript
复制
let voice = AVSpeechSynthesisVoice.speechVoices().first(where: { $0.name == "Arthur" })
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40663130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档