22

Is it possible to use another person's voice within the same accent?

For example, when I do AVSpeechSynthesisVoice(language: "en-US"), it automatically uses a woman's voice, but I wanted a man instead, with the same accent.

Is it possible to change the voice within the same accent or the only way is to try another voice of another accent (eg: us-AU)

(note I want to change the whole voice, not properties of it, like pitch, speed, etc)

Thank you

1
  • nvrtd frst has given the correct answer. Please make sure you always accepts the answer which is accurate.
    – Hemang
    Commented Dec 13, 2018 at 4:51

4 Answers 4

34

You can use AVSpeechSynthesisVoice(identifier: "com.apple.ttsbundle.siri_male_en-GB_compact")

The identifiers can be found when you print AVSpeechSynthesisVoice.speechVoices()

[AVSpeechSynthesisVoice 0x6080000097d0] Language: ar-SA, Name: Maged, Quality: Default [com.apple.ttsbundle.Maged-compact]
[AVSpeechSynthesisVoice 0x608000009780] Language: cs-CZ, Name: Zuzana, Quality: Default [com.apple.ttsbundle.Zuzana-compact]
[AVSpeechSynthesisVoice 0x608000009440] Language: da-DK, Name: Sara, Quality: Default [com.apple.ttsbundle.Sara-compact]
[AVSpeechSynthesisVoice 0x608000009670] Language: de-DE, Name: Anna, Quality: Default [com.apple.ttsbundle.Anna-compact]
[AVSpeechSynthesisVoice 0x6080000092e0] Language: el-GR, Name: Melina, Quality: Default [com.apple.ttsbundle.Melina-compact]
[AVSpeechSynthesisVoice 0x608000009310] Language: en-AU, Name: Karen, Quality: Default [com.apple.ttsbundle.Karen-compact]
[AVSpeechSynthesisVoice 0x6080000098d0] Language: en-GB, Name: Daniel, Quality: Default [com.apple.ttsbundle.Daniel-compact]
[AVSpeechSynthesisVoice 0x6080000094e0] Language: en-IE, Name: Moira, Quality: Default [com.apple.ttsbundle.Moira-compact]
[AVSpeechSynthesisVoice 0x6080000096b0] Language: en-US, Name: Samantha, Quality: Default [com.apple.ttsbundle.Samantha-compact]
[AVSpeechSynthesisVoice 0x608000009480] Language: en-ZA, Name: Tessa, Quality: Default [com.apple.ttsbundle.Tessa-compact]
[AVSpeechSynthesisVoice 0x6080000093d0] Language: es-ES, Name: Monica, Quality: Default [com.apple.ttsbundle.Monica-compact]
[AVSpeechSynthesisVoice 0x6080000096c0] Language: es-MX, Name: Paulina, Quality: Default [com.apple.ttsbundle.Paulina-compact]
[AVSpeechSynthesisVoice 0x608000009550] Language: fi-FI, Name: Satu, Quality: Default [com.apple.ttsbundle.Satu-compact]
[AVSpeechSynthesisVoice 0x6080000094f0] Language: fr-CA, Name: Amelie, Quality: Default [com.apple.ttsbundle.Amelie-compact]
[AVSpeechSynthesisVoice 0x608000009880] Language: fr-FR, Name: Thomas, Quality: Default [com.apple.ttsbundle.Thomas-compact]
[AVSpeechSynthesisVoice 0x608000009290] Language: he-IL, Name: Carmit, Quality: Default [com.apple.ttsbundle.Carmit-compact]
[AVSpeechSynthesisVoice 0x608000009570] Language: hi-IN, Name: Lekha, Quality: Default [com.apple.ttsbundle.Lekha-compact]
[AVSpeechSynthesisVoice 0x608000009510] Language: hu-HU, Name: Mariska, Quality: Default [com.apple.ttsbundle.Mariska-compact]
[AVSpeechSynthesisVoice 0x608000009040] Language: id-ID, Name: Damayanti, Quality: Default [com.apple.ttsbundle.Damayanti-compact]
[AVSpeechSynthesisVoice 0x6080000096a0] Language: it-IT, Name: Alice, Quality: Default [com.apple.ttsbundle.Alice-compact]
[AVSpeechSynthesisVoice 0x6080000092b0] Language: ja-JP, Name: Kyoko, Quality: Default [com.apple.ttsbundle.Kyoko-compact]
[AVSpeechSynthesisVoice 0x608000009540] Language: ko-KR, Name: Yuna, Quality: Default [com.apple.ttsbundle.Yuna-compact]
[AVSpeechSynthesisVoice 0x6080000090e0] Language: nl-BE, Name: Ellen, Quality: Default [com.apple.ttsbundle.Ellen-compact]
[AVSpeechSynthesisVoice 0x608000009380] Language: nl-NL, Name: Xander, Quality: Default [com.apple.ttsbundle.Xander-compact]
[AVSpeechSynthesisVoice 0x608000009240] Language: no-NO, Name: Nora, Quality: Default [com.apple.ttsbundle.Nora-compact]
[AVSpeechSynthesisVoice 0x6080000090f0] Language: pl-PL, Name: Zosia, Quality: Default [com.apple.ttsbundle.Zosia-compact]
[AVSpeechSynthesisVoice 0x608000009250] Language: pt-BR, Name: Luciana, Quality: Default [com.apple.ttsbundle.Luciana-compact]
[AVSpeechSynthesisVoice 0x6080000094d0] Language: pt-PT, Name: Joana, Quality: Default [com.apple.ttsbundle.Joana-compact]
[AVSpeechSynthesisVoice 0x608000009210] Language: ro-RO, Name: Ioana, Quality: Default [com.apple.ttsbundle.Ioana-compact]
[AVSpeechSynthesisVoice 0x608000009130] Language: ru-RU, Name: Milena, Quality: Default [com.apple.ttsbundle.Milena-compact]
[AVSpeechSynthesisVoice 0x608000009620] Language: sk-SK, Name: Laura, Quality: Default [com.apple.ttsbundle.Laura-compact]
[AVSpeechSynthesisVoice 0x608000009730] Language: sv-SE, Name: Alva, Quality: Default [com.apple.ttsbundle.Alva-compact]
[AVSpeechSynthesisVoice 0x608000009740] Language: th-TH, Name: Kanya, Quality: Default [com.apple.ttsbundle.Kanya-compact]
[AVSpeechSynthesisVoice 0x6080000095e0] Language: tr-TR, Name: Yelda, Quality: Default [com.apple.ttsbundle.Yelda-compact]
[AVSpeechSynthesisVoice 0x608000009010] Language: zh-CN, Name: Ting-Ting, Quality: Default [com.apple.ttsbundle.Ting-Ting-compact]
[AVSpeechSynthesisVoice 0x608000009660] Language: zh-HK, Name: Sin-Ji, Quality: Default [com.apple.ttsbundle.Sin-Ji-compact]
[AVSpeechSynthesisVoice 0x608000009860] Language: zh-TW, Name: Mei-Jia, Quality: Default [com.apple.ttsbundle.Mei-Jia-compact]
2
  • 2
    You can check all available voice using this method [AVSpeechSynthesisVoice speechVoices] Commented Jan 8, 2018 at 11:26
  • 1
    @TunvirRahmanTusher if you need the available languages AVSpeechSynthesisVoice.speechVoices().map(\.language)
    – Leo Dabus
    Commented Sep 3, 2021 at 1:21
11

As of Xcodee 8.3.2 a male voice now seems to be available

import UIKit
import AVFoundation

class ViewController: UIViewController {

    let speaker = AVSpeechSynthesizer()
    let dialogue = AVSpeechUtterance(string: "Hello I am clearly a man")

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func speakText(sender: AnyObject) {

        dialogue.rate = AVSpeechUtteranceDefaultSpeechRate;
        dialogue.voice = AVSpeechSynthesisVoice(language: "en-gb") 

        guard speaker.isSpeaking else
        {
            speaker.speak(dialogue)
            return
        }
    }
}

language en-gb speaks with a male voice

Cheers

2

Well, The voice can be set using identifier name directly, like below.

    func speak(say: String) {
        let utterance = AVSpeechUtterance(string: say)
        utterance.voice = AVSpeechSynthesisVoice(identifier: "Karen")
        utterance.rate = 0.4
        utterance.pitchMultiplier = 0.5
        utterance.preUtteranceDelay = 0
        utterance.volume = 1


        synth.speak(utterance)
    }
5
  • 3
    I assume this voice can only say "I want to talk to your manager!" Commented Jun 22, 2021 at 19:29
  • 3
    if you call it like this speak(say:"I want to talk to your manager")
    – Hope
    Commented Jun 23, 2021 at 10:10
  • That was just a joke, see Karen Meme. Commented Jun 23, 2021 at 10:25
  • Did you hear the voice with this parameters, I saw a different joke. It is almost the same anyway.
    – Hope
    Commented Jun 23, 2021 at 10:47
  • We all probably have friends named Karen, who are not karen. Let's be kind...
    – Billy
    Commented Apr 22 at 14:41
0

No you can't change voice AVSpeechSynthesisVoice(language: "en-US") here. Because it is predefine BCP-47 Code used by apple and can't be manipulated. For your reference Does in iOS 7.0 AVSpeechSynthesizer have US male voice?

And it doesn't change in ios8 and ios9

2
  • I tried this: let voice = AVSpeechSynthesisVoice(identifier: AVSpeechSynthesisVoiceIdentifierAlex) but the voice is still female... is it right?
    – Daniel
    Commented May 29, 2016 at 17:47
  • 3
    NO . Actually by default its female voice (language: "en-US"). Here is the thing..... AVSpeechSynthesisVoice(identifier: AVSpeechSynthesisVoiceIdentifierAlex) this method given by apple in ios9.0. But from ios9.1 it is not there in developer website developer.apple.com/library/ios/documentation/AVFoundation/…: . So for using AVSpeechSynthesisVoiceIdentifierAlex, it needs to be dowloaded in the device . I checked if (voice != nil) and its nil. So I think we can't use it now. Commented May 29, 2016 at 18:12

Not the answer you're looking for? Browse other questions tagged or ask your own question.