ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
App内でシームレスな音声体験を作成する
音声合成を使い、Appのアクセシビリティ体験を拡張しましょう:音声APIを入れる最適な時間と場所を見つけ、Appを利用する全員がメリットを得られるようにします。AVSpeechSynthesizerをどう使うとVoiceOverのような支援テクノロジーを補完することができるかを学び、代替APIを実行するのはいつがいいのかもお伝えします。適切なソースに音声をルーティングし、必要な人、欲しい人全員にシームレスに音声を統合するAppを作成する方法もお見せします。 このセッションを最大限に活用するには、AVFoundationと音声合成の基本を知っていることが求められます。概略は"AVSpeechSynthesizer: Making iOS Talk"をご覧ください。
リソース
関連ビデオ
WWDC23
WWDC19
-
ダウンロード
こんにちは WWDCへようこそ
“アプリケーション内で シームレスな音声体験を作成する” こんにちは 私はダンです 今日はシームレスな音声体験を― アプリケーションに提供する 方法についてお伝えします
こちらでは いつ AVSpeechSynthesizerを活用すべきか― また いつ 他のAPIの活用を 検討すべきかについて説明します まずは APIの基本について 確認していきましょう その後 発信中に音声案内をする方法や アプリケーション使用中に 他のオーディオを停止する方法をお伝えします では 読み上げ機能を使用するケースを いくつか見ていきましょう 読み上げ機能をつけるなら AVSpeechSynthesizerを使うといいでしょう 皆さんのアプリケーションは 画面を見ずに 使えるように設計されているでしょう ルートを音声案内するマップの アプリケーションのようにね
しかし 音声案内をする対象を 利用者全員ではなく アシスティブ・テクノロジーを使用している人に 絞りたいケースもあると思います その場合 AVSpeechSynthesizerは 適していないかもしれません 我々のデバイスにはすべて VoiceOverや 読み上げソフトなどの機能が組み込まれており AVSpeechSynthesizerを適用させれば 独自の読み上げソフトを作る必要はありません そこで 代わりにUIAccessibility APIを用い 使いやすいものにしましょう 詳しくお知りになりたい方は 過去のWWDCでの講演をご覧ください 例えば直前に発生したイベントの説明を 不定期に読み上げる設定をVoiceOverに 追加したい場合は 通知機能を使いましょう UIAccessibility.postの設定で notificationの種類に“announcement”を入力し stringには読み上げてほしい文字を 代入します するとVoiceOverに読み上げ機能を デリゲートするので これで管理できます 読み上げ機能を中心とした アプリケーションを作りたい方もいますよね その場合 AVSpeechSynthesizerを使えば さらにフレキシブルにでき― アシスティブ・テクノロジーと 組み合わせて使うことも可能になります Augmentative Alternative Communication またはAACと呼ばれるアプリケーションは― 読み上げ機能に特化した体験を 提供する例の1つです 例えば Proloquo2Goという すばらしいAACアプリケーションがあります コミュニケーション能力に 障害がある人向けのツールで 絵やビジュアルアイコンを使い 文章の組み立てをサポートします 作った文章はAVSpeechSynthesizerを介して 大音量で読み上げられるため ユーザーは周囲と コミュニケーションを取れます
目の不自由な人向けに設計された アプリケーションは 読み上げ機能を中心に さまざまな体験を提供します Seeing AIは周囲の状況を説明し 視覚世界にアクセスするアプリケーションです Seeing AIはVoiceOverと完全に連携しており 操作は簡単です AVSpeechSynthesizerは カメラで写した物体を説明する際に活躍し 読み上げるタイミングや方法の制御も行います AVSpeechSynthesizerの使い方の説明は以上です 次はAPIの話に移りましょう 始め方は簡単で 必要となるのは AVSpeechSynthesizerオブジェクトだけです 読み上げが終わるまで このオブジェクトの値が 保持されているかを確認してください 次にAVSpeechUtteranceの設定のために 読み上げたい文字をstringに代入します 最後にsynthesizerに 先ほどのutteranceを代入します これで完了です もし基本的な読み上げ機能をつけたいなら これだけで大丈夫です 仕様でAVSpeechSynthesizerは アクセシビリティの読み上げコンテンツを使い utteranceを構築できるようになっています Siriの声は読み上げコンテンツで設定できますが AVSpeechSynthesizer APIでは設定できないので ご注意ください Siriの声を設定した場合 自動的に― その設定と同じ言語コードに合う フォールバック音声をutteranceに構成します VoiceOverなどのアシスティブ・ テクノロジーを使っている利用者は 多くの場合 そのテクノロジー用に 読み上げ機能を特別に構成しています 今までは 読み上げコンテンツにある設定を AVSpeechSynthesizerに引き継げませんでした 今年はそれを変更し― prefersAssistiveTechnologySettings APIを 使って引き継げるようにしました AVSpeechUtteranceの値をtrueにすると AVSpeechSynthesizerが 現在利用中のアシスティブ・テクノロジー用の 設定をutteranceに適用します これは声の選択や話すスピード ピッチといった 読み上げのプロパティも含みます 重要なポイントは これらのプロパティが utteranceに明示的に設定した値よりも 優先されるという点です アシスティブ・テクノロジー用に 設定をしていない場合は 読み上げコンテンツの設定か utterenceの設定値を利用します
utteranceを設定しておくことを おすすめします VoiceOverなどとアプリケーションと 一緒に使う際 特に必要となる設定です しかし AACアプリケーションのように このAPIが適さないものもあります そのため ご自身のケースに合わせて 判断してください では APIが読み上げ機能に どのように作用するか見てみましょう このアプリケーションでは― 各ボタンをタップすると“Hello, world”という 文字列が読み上げられます 1つ目のボタンは初期値の設定です 一方で 2つ目のボタンは prefersAssistiveTechnologySettings APIを 使用しています このデバイスではVoiceOver機能の声を変更し 読み上げる速度を上げています どのように読み上げるか聞いてみましょう
“Hello, worldボタンを読み上げる” “Hello, world” “Hello, worldボタンを読み上げる” “Hello, world” 2つ目の読み上げの方は VoiceOverと同じ声と速さに設定されており 読み上げ機能がVoiceOverと シームレスに調和しています 他方 1つ目のボタンは 文字列を全く違う風に読み上げており これは 利用者が期待する動きでは ないかもしれません 読み上げ機能をアプリケーションに合わせて カスタマイズしたい場合 AACアプリケーションを使えば 声を選択でき 他の読み上げ機能のプロパティも変更可能です こうすることで 自分にあった音声を 作り出すことができるのです 言語コードか識別子を使えば utteranceに音声を設定できます システムで利用可能な音声の一覧は AVSpeechSynthesisVoiceの Speech Voicesメソッドを使えば取得できます この一覧は アクセシビリティで 新しい音声をダウンロードすると更新されます 読み上げ機能をさらにカスタマイズするには AVSpeechUtteranceのプロパティに 設定を追加します 例えば 読み上げの速度やピッチ 音量などが設定可能です WWDC2018では AVSpeechSynthesizerの すべてのプロパティに関して説明しています 詳細を確認したい方は そちらをご覧ください
読み上げ機能に特化した アプリケーションを作りたいなら mixToTelephonyUplinkプロパティという APIが便利です AVSpeechSynthesizerで このプロパティをtrueに設定すると 音声電話やFaceTimeの発信中でも 音声案内をします 発信中でない場合は 初期値のオーディオルートに従い読み上げます AACのようなアプリケーションには 非常に役に立つAPIです コミュニケーション能力に障害がある人でも 従来の方法で コミュニケーションを取れるからです 読み上げ機能を中心とした体験を 提供するアプリケーションを作る場合や 別の音声機能を複数使う場合は usesApplicationAudioSession APIが便利です 仕様ではAVSpeechSynthesizerの値は trueになっているので 読み上げ機能は アプリケーションの 共有オーディオセッションを使用します 設定をfalseにした場合― 読み上げ機能のオーディオセッション制御を システムにデリゲートします こうすることで 音声の割り込みの制御や オーディオセッションのアクティブ・ 非アクティブの設定も可能になります 読み上げ機能は 他のオーディオを停止したり 同時に再生させたりすることもできます そのため 効果音や音楽 動画などが割り込んでくる心配はありません
以上 AVSpeechSynthesizer APIの概要を お話ししました AVSpeechSynthesizerはUIAccessibility APIの 代わりにはならないという点を お忘れなく ただ 最高の体験を作り出したい場合は これらのAPIを組み合わせてお使いください “prefersAssistiveTechnologySettings API”を使えば AVSpeechSynthesizerが 利用中のアシスティブ・テクノロジーから 読み上げ設定を取得しutteranceに適用させます 読み上げ機能に特化した体験を 作りたい方もいますよね その場合は mixToTelephonyUplinkか usesApplicationAudioSession APIを使えば 利用者の体験価値を 向上させられるでしょう
読み上げ機能は― アシスティブ・テクノロジーの利用者にとって 強力なツールです 読み上げ機能をアプリケーションに どう組み込むかを考え 利用者にすばらしい体験を提供してください ご視聴ありがとうございました この後もWWDCをお楽しみください
-
-
1:25 - Post an Announcement to the Running Assistive Technology
UIAccessibility.post(notification: .announcement, argument: "Hello World")
-
2:55 - Getting Started with AVSpeechSynthesizer
self.synthesizer = AVSpeechSynthesizer() let utterance = AVSpeechUtterance(string: "Hello World") self.synthesizer.speak(utterance)
-
4:08 - Respecting the Currently Running Assistive Technology's Speech Settings
self.synthesizer = AVSpeechSynthesizer() let utterance = AVSpeechUtterance(string: "Hello World") utterance.prefersAssistiveTechnologySettings = true self.synthesizer.speak(utterance)
-
5:42 - Customizing Speech - Choosing a Voice
let utterance = AVSpeechUtterance(string: "Hello World") // Choose a voice using a language code utterance.voice = AVSpeechSynthesisVoice(language: "en-US") // Choose a voice using an identifier utterance.voice = AVSpeechSynthesisVoice(identifier: AVSpeechSynthesisVoiceIdentifierAlex) // Get a list of installed voices let voices = AVSpeechSynthesisVoice.speechVoices()
-
6:16 - Customizing Speech - Pitch and Rate
let utterance = AVSpeechUtterance(string: "Hello World") // Choose a rate between 0 and 1, 0.5 is the default rate utterance.rate = 0.75 // Choose a pitch multiplier between 0.5 and 2, 1 is the default multiplier utterance.pitchMultiplier = 1.5 // Choose a volume between 0 and 1, 1 is the default value utterance.volume = 0.5
-
6:34 - Mix Speech With an Outgoing Call
self.synthesizer = AVSpeechSynthesizer() self.synthesizer.mixToTelephonyUplink = true
-
7:02 - Opting Speech Out of Application's Audio Session
self.synthesizer = AVSpeechSynthesizer() self.synthesizer.usesApplicationAudioSession = false
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。