ios - 实时速率和音调调整 Swift

标签 ios swift uislider avspeechsynthesizer

我正在使用 AVSpeechSynthesizer 设置一个 tts 应用程序。我必须进行实时音调和速率调整。我正在使用 UISLider 来调整音调和速率。

这是我的代码:-

@IBAction func sl(_ sender: UISlider) {
    if synthesizer.isSpeaking {
        synthesizer.stopSpeaking(at: .immediate)

        self.rate = sender.value

        if currentRange.length > 0 {
            let valuee = currentRange.length + currentRange.location
            let neww = self.tvEditor.text.dropFirst(valuee)
            self.tvEditor.text = String(neww)
            synthesizer.speak(buildUtterance(for: rate, pitch: pitch, with: String(neww), language: self.preferredVoiceLanguageCode2 ?? "en"))
        }
    } else {

    }
}

最佳答案

即使没有提供详细信息,我也可能理解您的问题:您无法考虑ratepitchMultiplier 的新值 演讲开始时

为了解释以下细节,我阅读了this example包含代码片段(ObjC, Swift) 和插图。 enter image description here

  1. 使用 ratepitchMultiplier 属性创建您的 AVSpeechUtterance 实例。
  2. 将它们中的每一个添加到一个数组中,该数组将代表要发言的队列。
  3. 使用合成器在前一个队列中循环以读出每个元素。

现在,如果您想实时更改属性值,请在其中一个 slider 移动后查看以下步骤:

  1. 借助 AVSpeechSynthesizerDelegate 协议(protocol)获取当前语音。
  2. 运行 stopSpeaking 合成器方法,该方法将从队列中删除尚未说出的话语。
  3. 使用新的属性值创建之前删除的话语。
  4. 重做步骤 2/和 3/以使用这些更新后的值从停止的地方继续。

在您请求不影响存储的话语的新值之前,合成器将所有要说出的信息排入队列:您必须删除并重新创建具有新属性值的话语才能说出。

如果上面链接提供的代码示例还不够,我建议看一下 this WWDC video detailed summary处理 AVSpeechSynthesizer

关于ios - 实时速率和音调调整 Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55833750/

相关文章:

iOS UINavigationController 未显示在 ChildView 上

ios - 最佳方法 : Displaying a "nothing here, yet" screen instead of empty tableView cells

regex - 如果字符串包含正则表达式问题\n

iOS Objective-C/Swift 下载时读取文件

ios - 将 UISlider 值从一个 ViewController 传递到另一个 ViewController

ios - 使用 Twitter/FB 共享表时是否需要包含可达性?

iOS : Change value by scrolling

ios - Admob 奖励视频只会出现一次,然后必须重新启动应用程序

ios - 辅助功能:在画外音模式下设置 slider.value 时,不会发布 UISlider 的 UIControlEventValueChanged

ios - 从价格委托(delegate)中为 uislider 提供值