Jonathan Rachlin
Jonathan Rachlin

Reputation: 391

Using AVSpeechSynthesizer for Chinese pinyin

In my Swift program, I use AVSpeechSynthesizer to pronounce Chinese characters. This is my method:

static var synth = AVSpeechSynthesizer()

static func speak(string: String) 
{        
    let utterance = AVSpeechUtterance(string: string)
    utterance.voice = AVSpeechSynthesisVoice(language: "zh-CN")
    utterance.rate = 0.1

    synth.speak(utterance)
}  

Often, a single character can have multiple pronunciations. Is there a way to use AVSpeechSynthesizer to pronounce a character given the pinyin. In other words, instead of passing the character "高", we would pass the pinyin "gāo". So far, just passing the pinyin has not worked in this method.

Many thanks in advance,

Jon

Upvotes: 3

Views: 610

Answers (2)

XLE_22
XLE_22

Reputation: 5671

In my view, using the IPA notation (International Phonetic Alphabet) is the best way to reach your goal.

Put an attributedString as incoming parameter of the AVSpeechUtterance instance after declaring its appropriate attribute.

Take a look at this WWDC 2018 video detailed summary that should help to use AVSpeechSynthesizer for Chinese pinyin pronunciation : helpful implementation can be found in this answer as well.

Upvotes: 0

Jonathan Rachlin
Jonathan Rachlin

Reputation: 391

I think I've found the answer, and am posting it in case anybody else might find it useful. The pinyin should be entered in the form "gao1", not "gāo". It appears that it must be lower-case: i.e., "GAO1" doesn't seem to work, but "gao1" does.

Upvotes: 4

Related Questions