为什么 SSML 轮廓标签不改变音频的赫兹

问题描述 投票:0回答:1

我从 w3.org 获取了此 SSML。 AVSpeechUtterance(ssmlRepresentation:) 不符合轮廓。它不会改变赫兹。它始终以相同的赫兹级别播放。我正在使用:Xcode 15.3、装有 iOS 16.7.5 的 iPhone 8 设备、Swift。

这是 ssmlRepresentation 的字符串值。带有轮廓标签的 SSML:

<?xml version="1.0"?>
<speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                 http://www.w3.org/TR/speech-synthesis11/synthesis.xsd"
       xml:lang="en-US">
  <prosody contour="(0%,90Hz) (40%,90Hz) (0%,90Hz)">
    good morning
  </prosody>
</speak>

我的代码:

override func viewDidLoad() {
    super.viewDidLoad()
    
    guard let localUtterance = AVSpeechUtterance(ssmlRepresentation: self.speechSML)         else {
        print("SML did not work.")
        return
    }
    self.utterance = localUtterance
    self.utterance.voice = self.voiceNoelle
}

self.synthesizer.speak(self.utterance)
ios contour speech-synthesis ssml iphone-8
1个回答
0
投票

嗯,轮廓被设置为 90Hz 的恒定绝对值,它应该是一个变化的、带有 +/- 前缀的相对值。此外,每对的百分比应该不同。

所以而不是这个:

<prosody contour="(0%,90Hz) (40%,90Hz) (0%,90Hz)">

它应该看起来更像这样:

<prosody contour="(0%,+20Hz) (40%,+10Hz) (80%,-10Hz)">

来自此链接

每组参数中的第一个值将音高变化的位置指定为文本持续时间的百分比。第二个值通过使用音高的相对值或枚举值来指定升高或降低音高的量(请参阅音高)。

© www.soinside.com 2019 - 2024. All rights reserved.