blogTitle.png
p < .05 公式ブログ
AVSpeechSynthesizer: アメリカ英語とイギリス英語とオーストラリア英語では声が違う
Bucephalasの考察 | comments(0)
ゴルディアスの結び目(アプリ)は日本語と英語にしか対応していない。日本語環境では画面表示が日本語で行われ、それ以外の言語環境では英語で行われるようにしてある。

基本的にはNSLocalizedStringで文字を変更するだけだが、もう少し突っ込んだ処理が必要なときはNSLocaleのpreferredLanguagesを調べて分岐させる。
 

NSString *currentLang = [(NSString *)[[NSLocale preferredLanguages] objectAtIndex:0] componentsSeparatedByString:@"-"].firstObject;

    


例えば、AVSpeechSynthesizerに喋らせる言語音声の設定のは、
 

if([preferredLang0 isEqualToString:@"ja"]){

    [utterance setVoice: [AVSpeechSynthesisVoice voiceWithLanguage:@"ja-JP"]];

}else if([preferredLang0 isEqualToString:@"en"]){

    [utterance setVoice: [AVSpeechSynthesisVoice voiceWithLanguage:(NSString *)[[NSLocale preferredLanguages] objectAtIndex:0]]];// en-USとかen-UKに対応できるようにする

}else{// その他の言語はen-USで解釈する

    [utterance setVoice: [AVSpeechSynthesisVoice voiceWithLanguage:@"en-US"]];
}


のように切り替えられる。

ゴルディアスの結び目のバージョン4.1.3までは、アメリカ英語用の設定であるen-USと日本語音声のja-JPしかつかっていなかった。しかし上の様なコードを使うと、en-GBなどの別バージョンの英語音声が用意されていれば、それらの音声で喋らせることができる。

ちなみに、言語設定がアメリカ英語、カナダ英語、インド英語になっていると、どれも同じ女声で喋ることになるが、オーストラリア英語になっていると、声質がわずかに異なる女声に変わる。発音もオーストラリア風。そしてなぜかイギリス英語の場合だけ男声になる。

なぜイギリス英語のみ男声なのだろう?