【问题标题】:AVSpeechUtterance - Swift - initializing with a phraseAVSpeechUtterance - Swift - 用短语初始化
【发布时间】:2014-06-29 02:55:49
【问题描述】:

所以我只是想将 AVSpeechSynthesizer 与 Swift 一起使用。我不知道如何为 AVSpeechUtterance 设置短语。

@IBAction func buttonSpeakClicked(sender:UIButton)
    {
        var mySpeechSynthesizer:AVSpeechSynthesizer = AVSpeechSynthesizer()
        var myString:String = "This is the phrase to say"
        var mySpeechUtterance:AVSpeechUtterance = AVSpeechUtterance(string:myString)

        println("\(mySpeechUtterance.speechString)")
        println("My string - \(myString)")

        mySpeechSynthesizer .speakUtterance(mySpeechUtterance)
    }

第一个 println - 无

第二个 println - 这是要说的短语

文档说 init(string string: String!),但我不知道该放在哪里

【问题讨论】:

  • 不需要将类型注释添加到您的变量中。 IE。你可以放弃:AVSpeechSynthesizer:String:AVSpeedUtterance...
  • 那么当你尝试运行它时到底发生了什么?我正在玩一个单视图应用程序,该应用程序有一个按钮,单击该按钮会调用 AVSpeechUtterance.speakUtterance,当单击 UI 上的该按钮时,它只会引发异常。你也经历过同样的事情吗?我在我的代码中导入了 AvFoundation 模块,因此代码在运行时不会引发任何错误。
  • 我不记得我最初发布此内容时使用的是哪个测试版。我没有收到任何错误,但无法在 iOS8 模拟器上设置 SpeechUtterance。现在它是 beta 6,相同的代码产生正确的 println,speechUtterance 设置正确。但它实际上并没有在模拟器上说话(iPhone 5S,iOS8)。它给出了一个错误“语音初始化错误:2147483665”它在我运行当前 iOS 测试版的 iphone 4S 上可以正常工作。

标签: swift ios8 xcode6


【解决方案1】:

代码没问题,语音字符串设置正确。但是问题是 AVSpeechUtterance 在 iOS 8 Beta 上没有按预期工作。我建议提交错误报告here

代码在 iOS 7.1 设备和模拟器上运行良好。

【讨论】:

  • 是的,看起来有点怪。如果你用任何类型的字符串构造一个 AVSpeechUtterance,据我所知,你会得到 nil 回来。如果你不带参数构造它,它工作正常,并且你得到一个对象,但是你当然不能设置语音字符串,因为 SpeechString 属性是只读的。
  • 已提交错误报告 - 17498112
  • 天啊!我以为我疯了,我无法让它在 8 上工作。谢谢你的帮助。
【解决方案2】:

是的,这是一个错误。从 iOS8 GM 开始,似乎第一次尝试让 AVSpeechSynthesizer 说出 AVSpeechUtterance 会导致静音。

我的解决方法是让 AVSpeechSynthesizer 在初始化后立即说出单字符话语。这将保持沉默,之后您的 AVSpeechSynthesizer 将正常工作。

在 Objective-C 中:

AVSpeechUtterance *bugWorkaroundUtterance = [AVSpeechUtterance speechUtteranceWithString:@" "];
bugWorkaroundUtterance.rate = AVSpeechUtteranceMaximumSpeechRate;
[self.speechSynthesizer speakUtterance:bugWorkaroundUtterance];

【讨论】:

  • 太棒了!它在真实设备上运行良好。 (Xcode 6.0.1 , iOS 8.0.2, iPhone 5) 但是模拟器还是不行。谢谢
  • 对我来说,这个错误在 iPhone 4S 上的 iOS 8.0.2 中仍然存在。上述解决方法确实有效,但对我来说只有如果我匹配了 utterance.rate 和 utterance.voice。我在我的实际话语上指定了 utterance.rate = 0.2 * AVSpeechUtteranceDefaultSpeechRate,我必须在 bugWorkaroundUtterance 以及 上执行此操作才能使此解决方法起作用。我正在 viewDidLoad 中播放 @" " 变通方法。现在在 UI 中播放 TTS 时,它第一次可以正常工作,即使在 iOS 8.0.2 中也是如此。希望这些额外的信息可以帮助你们中的一些可能仍在为此苦苦挣扎的人。 :-)
  • 8.1 SDK、Xcode 6.1... 在任何设备上的模拟器中仍然存在问题。适用于 7.1 SDK。
  • XCode 6.2 beta 2 with WatchKit 确实解决了这个问题:模拟器再次工作。
猜你喜欢
  • 2016-08-19
  • 2010-12-09
  • 2021-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多