【问题标题】:AVSpeechSynthesizer Voice not changingAVSpeechSynthesizer 声音不变
【发布时间】:2020-01-07 17:56:42
【问题描述】:

我正在使用**AVSpeechSynthesizer**,以下是向**AVSpeechSynthesizer** 传递文本的代码。

func speakOutText(_ textToRead:String ){
    let audioSession = AVAudioSession.sharedInstance()
    do {
        try audioSession.setCategory(AVAudioSessionCategoryPlayback)
        try audioSession.setMode(AVAudioSessionModeDefault)
        try audioSession.setActive(true, with: .notifyOthersOnDeactivation)
    } catch {
        print("audioSession properties weren't set because of an error.")
    }
    let speakUtterance = AVSpeechUtterance.init(string: textToRead);
    speakUtterance.voice  = AVSpeechSynthesisVoice(language: "en-IN")
    speakUtterance.pitchMultiplier = 1.2
    speakUtterance.rate   = 0.5
    speechSynthesizer.speak(speakUtterance)

}

它以女性的声音正确地朗读文本。

但如果我在设置 -> Siri 和搜索 -> Siri 语音 -> 性别(男性) 中更改男性声音。再次调用speakOutText 方法,它只用女性语音朗读文本,而不是男性语音。

谁能告诉我原因,为什么它没有变成男声

【问题讨论】:

    标签: ios swift avspeechsynthesizer


    【解决方案1】:

    谁能告诉我原因,为什么它没有变成男声?

    SiriAVSpeechSynthesizer 声音不同,并且在设置中位于不同位置(iOS 13.3)

    • Siri设置Siri 和搜索语言Siri 语音。李>
    • AVSpeechSynthesizer设置辅助功能语音内容语音

    但如果我在设置 -> Siri 和搜索 -> Siri 语音 -> 性别(男)中更改男声...它只会以女声而不是男声说话。

    AVSpeechSynthesisVoiceGender 属性只是一个吸气剂,无法帮助您改变性别声音。
    为此,您必须通过设置(请参阅上面的要点) 或在需要时以编程方式指定要使用的确切语音:注意当前语言代码 (AVSpeechSynthesisVoice.currentLanguageCode ()) 在您的应用中使用,因为如果您不从字面上更改话语声音,它将被视为默认值。

    以后写代码(iOS 13, Swift 5.1):

    let allVoices =  AVSpeechSynthesisVoice.speechVoices()
        
    var index = 0
    for theVoice in allVoices {
        print("Voice[\(index)] = \(theVoice)\n")
        index += 1
    }
    

    ... 将在您的设备上显示所有可用的声音:

    在此列表中指明语音发音以获得适当的语音性别

    结论:更改 AVSpeechSynthesizer 语音与 Siri 无关,即使它可以在将适应当前语言代码的设置中完成,除非一切都以编程方式指定。

    【讨论】:

      【解决方案2】:
      private let synthesizer = AVSpeechSynthesizer()
      
      var Rate: Float = AVSpeechUtteranceDefaultSpeechRate
      var USMaleVoice = AVSpeechSynthesisVoice(language: "en-US")
      
      func Say(_ phrase: String)
      {
          let Utterance = AVSpeechUtterance(string: phrase)
      
          Utterance.rate = Rate
      
          Utterance.voice = AVSpeechSynthesisVoice(language: "en-US")
      
          synthesizer.speak(Utterance)
      }
       //Print all voices ↓  
      func GetVoices()
         {
          AVSpeechSynthesisVoice.speechVoices().forEach({ print($0)})
         }
      

      【讨论】:

        【解决方案3】:

        使用这个

          AVSpeechSynthesisVoiceGender.male
        

        如果您有任何疑问,请关注appleLink

        【讨论】:

        • 感谢您的回复!根据设置,我必须更改。我不想将静态值赋予男性或女性。有没有可能?
        • 你用过吗? . AVSpeechSynthesisVoiceGender.male
        • 我必须在哪个属性中使用它?
        • 我必须在哪里声明,AVSpeechSynthesisVoiceGender.male?你能告诉我吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-29
        相关资源
        最近更新 更多