- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
每当我导航到这个 View Controller 时,viewDidLoad
中的 speakText()
函数出于某种原因不起作用,并且 View Controller 需要很长时间才能加载(当我删除该行时情况并非如此)。在该行上方,文本标签的文本设置为要说出的字符串,并且工作正常。每次调用 recordTapped
时,语音合成都会完美运行。但是,它似乎在 viewDidLoad
中不起作用。
更新 在分配语音合成器的 View Controller 委托(delegate)并异步运行函数后,我做了一些更多的测试。但是,它不起作用。我将 View Controller 设置为初始 View Controller ,但它仍然不起作用,所以这不是导航问题,加载时间仍然很长。
import UIKit
import AVFoundation
class StartViewController: UIViewController, AVAudioRecorderDelegate {
@IBOutlet weak var questionLabel: UILabel!
@IBOutlet weak var recordButton: UIButton!
let synth = AVSpeechSynthesizer()
var myUtterance = AVSpeechUtterance(string: "")
var number = 0
override func viewDidLoad() {
super.viewDidLoad()
synth.delegate? = self as! AVSpeechSynthesizerDelegate
number = 0
DispatchQueue.global(qos: .userInitiated).async {self.speakText(int: number)}
self.number = self.number + 1
}
@IBAction func recordTapped(_ sender: UIButton) {
speakText(int: number)
number = number + 1
}
func speakText(int: Int) {
myUtterance = AVSpeechUtterance(string: "the number is \(int)")
myUtterance.voice = AVSpeechSynthesisVoice(language: "en-AU")
synth.speak(myUtterance)
}
}
最佳答案
正如我在评论中所说,多线程工作。刚刚测试了自己。下面的工作代码,请测试并确认。依靠单独的线程进行语音总是好的。
import UIKit
import AVFoundation
class ViewController: UIViewController {
@IBOutlet weak var questionLabel: UILabel!
@IBOutlet weak var recordButton: UIButton!
var number = 0
@IBAction func recordTapped(_ sender: UIButton) {
questionLabel.text = "\(number)"
speakTest(int: number)
number += 1
}
override func viewDidLoad() {
super.viewDidLoad()
number = 0
questionLabel.text = "\(number)"
DispatchQueue.global(qos: .userInitiated).async {
self.speakTest(int: self.number)
}
// speakTest(int: number)
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func speakTest(int: Int) {
let utterance = AVSpeechUtterance(string: "Number is \(int)")
let synth = AVSpeechSynthesizer()
synth.speak(utterance)
}
}
另外,要在 View 出现时调用 Speech,请从 viewWillAppear()
或 viewDidAppear()
调用它,而不是从 viewDidLoad ()
,因为后者在应用程序处于前台时被调用一次。
关于swift - AVSpeechSynthesiser 窃听 ViewDidLoad 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50365260/
尽管阅读了我可以在developer.android.com和stackoverflow上获得的所有内容,但是我确实认为应该可以实现,但是我仍然不知道该怎么做。 我正在尝试使用OpenGL ES 2.
这是一项相当烦人但相当简单的任务。根据这个guide ,我这样写: #!/bin/bash content=$(wget "https://example.com/" -O -) ampersand=
每当我导航到这个 View Controller 时,viewDidLoad 中的 speakText() 函数出于某种原因不起作用,并且 View Controller 需要很长时间才能加载(当我删
是否可以使用 JavaScript 将所有更改抓取到正在使用 AJAX 实时更新的网页中?我希望抓取的网站每秒使用 AJAX 更新数据,我想抓取所有更改。这是一个拍卖网站,只要用户出价,几个对象就会发
我正在尝试使用 Apache Camel 进行事件搜索。对于消息总线,我使用 ActiveMQ。 用例 我想审核使用 MongoDB 作为持久存储推送到 ActiveMQ 的每条消息。我尝试过在 Ac
我的 android 应用程序应该使用 twitter4j 库通过 twitter,并返回一堆包含您搜索的关键字的推文。该应用程序不会像以前那样崩溃,但它也会以某种方式出现错误,导致无法打印任何内容。
我是一名优秀的程序员,十分优秀!