SlideShare a Scribd company logo
1 of 11
Download to read offline
AVSpeechSynthesizerとロケール
@TachibanaKaoru
2013/11/13
自己紹介
• @TachibanaKaoru
• http://www.toyship.org/
• 渋谷の genesix で働く iOSエンジニア。
• 個人的にはこんなアプリを作ったりしています。

Toy Jigsaw

• Cookpad歴 11年 ( http://cookpad.com/kitchen/18627)
AVSpeechSynthesizerとは
• iOS7から導入されたAPIが公開された音声読み上げ機能。
• 文字列を与えると読み上げをしてくれます。
• delegateを使うと、「今読んでいる単語」なども取り
出せます。
• 詳しい使い方はこちら。
• https://github.com/toyship/StoryTeller
• http://www.toyship.org/archives/1483
ロケールの設定
• 文章を正しく読ませるためには、AVSpeechSynthesizerに読み上げる文の言語
に対応したロケール(NSLocale)を設定しないと正しく読み上げてくれません。
• AVSpeechSynthesizerが文章の言語を自動判別してくれるわけではありませ
ん。
• 今のところ、36個のロケールに対応しています。
!
!
!
!
!
!
!
!
!

AVSpeechSynthesizer* mySpeechSynthesizer = [[AVSpeechSynthesizer alloc] init];
mySpeechSynthesizer.delegate = self;
NSString* targetText = @"Hello World!";
AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:targetText];
AVSpeechSynthesisVoice* englishVoice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-US"];
utterance.voice = englishVoice;
[myspeechSynthesizer speakUtterance:utterance];
でも言語判定めんどくさいよね……。
Web APIは有料だし……。
システムの挙動は……
• iOSの純正アプリ(メールなど)では選択した文章
に応じて、ちゃんと適切に言語を判断。
• 例えばiPhoneのシステムロケールを日本語にした
状態でも、英語の文章を選択すると英語の声で読
んでくれます。
探したらありました、NSStringの言語判定
• CFStringTokenizerCopyBestStringLanguageを利用

!
! CFStringRef text =
(CFStringRef)CFBridgingRetain(self.inputText.text);
! CFRange range = CFRangeMake(0, CFStringGetLength(text));
! NSString *language =
(NSString*)CFBridgingRelease(CFStringTokenizerCopyBestStringLanguage(text, range));
CFStringTokenizerCopyBestStringLanguage仕様
• 指定した文字列の言語コードを返す。判別にはおよそ200から400文字が必
要。
• 30言語を判別可能。(アラビア語、ブルガリア語、チェコ語、デンマーク
語、ドイツ語、ギリシャ語、英語、スペイン語、フィンランド語、フランス
語、ヘブライ語、クロアチア語、ハンガリー語、アイスランド語、イタリア
語、日本語、韓国語、ノルウェー語、オランダ語、ポーランド語、ポルトガ
ル語、ルーマニア語、ロシア語、スロバキア語、スウェーデン語、タイ語、
トルコ語、ウクライナ語、簡体中国語、繁体中国語)
• でも実際の判別はちょっと微妙かも……。
AVSpeechSynthesizer Tips

• AVSpeechSynthesizerを使うときには、
CFStringTokenizerCopyBestStringLanguageを使って文
章の言語判定をしましょう!
おまけその1
• なぜ、AVSpeechSynthesizerに指定するのは言語コードではなくて、ロケール
のなんでしょうか。言語だけ指定すれば読んでくれるんじゃない?という気
もしますが……。
• ヒント:「12/3/2012」をen-GB(イギリス英語)とen-US(アメリカ英
語)で読ませてみてください。
おまけその2
• AVSpeechSynthesizerに設定する「ロケール」ですが、iPhoneでは、システム
言語とシステムロケールとは別々に設定できますよね。
• 例えばシステムの言語は日本語だけど、ロケールはen-GBになっていた場合は
AVSpeechSynthesizerのロケールはどうなるでしょうか。
• ja-JPになります。
• システム言語とシステムロケールを言語を優先してAVSpeechSynthesizer
のデフォルトロケールが決定されるようです。([NSLocale currentLocale]
がAVSpeechSynthesizerのデフォルトロケールではないことに注意。)

More Related Content

More from toyship

Swift Protocol and Selector
Swift Protocol and SelectorSwift Protocol and Selector
Swift Protocol and Selectortoyship
 
What's new Swift3
What's new Swift3What's new Swift3
What's new Swift3toyship
 
Xcode7時代のアプリ配布
Xcode7時代のアプリ配布Xcode7時代のアプリ配布
Xcode7時代のアプリ配布toyship
 
My first tvOS
My first tvOSMy first tvOS
My first tvOStoyship
 
3D touch for iOS
3D touch for iOS3D touch for iOS
3D touch for iOStoyship
 
Contents blocker on iOS9
Contents blocker on iOS9Contents blocker on iOS9
Contents blocker on iOS9toyship
 
Embedded framework and so on
Embedded framework and so onEmbedded framework and so on
Embedded framework and so ontoyship
 
はじめてのWKInterfaceController
はじめてのWKInterfaceControllerはじめてのWKInterfaceController
はじめてのWKInterfaceControllertoyship
 
App extension for iOS
App extension for iOSApp extension for iOS
App extension for iOStoyship
 
サーバーからiOSアプリを変更する
サーバーからiOSアプリを変更するサーバーからiOSアプリを変更する
サーバーからiOSアプリを変更するtoyship
 
Xcode bot
Xcode botXcode bot
Xcode bottoyship
 

More from toyship (11)

Swift Protocol and Selector
Swift Protocol and SelectorSwift Protocol and Selector
Swift Protocol and Selector
 
What's new Swift3
What's new Swift3What's new Swift3
What's new Swift3
 
Xcode7時代のアプリ配布
Xcode7時代のアプリ配布Xcode7時代のアプリ配布
Xcode7時代のアプリ配布
 
My first tvOS
My first tvOSMy first tvOS
My first tvOS
 
3D touch for iOS
3D touch for iOS3D touch for iOS
3D touch for iOS
 
Contents blocker on iOS9
Contents blocker on iOS9Contents blocker on iOS9
Contents blocker on iOS9
 
Embedded framework and so on
Embedded framework and so onEmbedded framework and so on
Embedded framework and so on
 
はじめてのWKInterfaceController
はじめてのWKInterfaceControllerはじめてのWKInterfaceController
はじめてのWKInterfaceController
 
App extension for iOS
App extension for iOSApp extension for iOS
App extension for iOS
 
サーバーからiOSアプリを変更する
サーバーからiOSアプリを変更するサーバーからiOSアプリを変更する
サーバーからiOSアプリを変更する
 
Xcode bot
Xcode botXcode bot
Xcode bot
 

Recently uploaded

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成Hiroshi Tomioka
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 

Recently uploaded (9)

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 

AVSpeechSynthesizerとロケール