音声読み上げ機能を活用
2011年に登場したiOS 5から、今ではおなじみの音声アシスタント「Siri」が搭載されました。ご存じのとおり、Siriは時計の読み上げからレストランやガソリンスタンドの検索まで、日常生活のあらゆる場面を声でサポートしてくれる便利な存在です。そして今年6月にアップルが開催した開発者向け会議「WWDC 2016」において、Mac用次期OS「macOSシエラ」でのSiri対応が発表されました。
実は、2003年に登場したMac OS X 10.3から、音声アシスタントではありませんが、「音声読み上げ」の機能がサポートされていました。Siriのように場所を検索したりする機能はついていませんが、かなり聞き取りやすい声で、プログラマーが指定した文字列を読み上げてくれます。
今回は、筆者が自作して日常的に使っているソフトの第2弾ということで、時計に音声読み上げの機能を組み込んだ、分単位・秒単位で現在時刻を知らせてくれるソフトの作り方を教えたいと思います。
【STEP 1】ソフトの基本部分を作ろう
まずXcodeで新しいMacソフトのためのプロジェクトを作ります。Xcodeで新しいソフトのためのプロジェクトを作ります。メニューから[File]→[New]→[Project]と選択して、左側のリストから[OS X]の[Application]を選び、右側の一覧から[Cocoa Application]を選択します。
次の設定画面では、[Product Name]には「Voice Clock」、[Organization Name]に自分の名前、[Organization Identifier]に「mytest」と入力して、[Language]には「Swift」を選択します。その下にチェックボックスがいくつか並んでいますが、図のように[Use Storyboards]のチェックだけオンにして、他のチェックは外しておいてください。最後に[Next]ボタンを押し、その次の画面で[Create]ボタンを押して、プロジェクトの作成を完了させましょう。
ウインドウ左のプロジェクトナビゲータから、[Main.storyboard]を選択して、ソフトの見た目を編集します。iPhoneアプリと同じように、開発手順は「見た目の準備」→「動きの実装」となります。
【STEP 2】見た目の準備
画面右下の[ライブラリ領域]から、[Label]をドラッグしてビューに貼り付けます。図のように、「00:00:00」という文字列を入力して、画面の中央に配置しておきましょう。画面の中央に配置した部品の周りには、青い点線が上下左右に表示されます。
追加したラベルを選択して、画面右上の[インスペクタ領域]で、テキストの見た目を設定します。[Alignment]と[Font]を右のように設定してください。時間表示のフォントは大きめに40ポイントで設定にしておきます。また、実行時にラベルが中央に配置されるように、制約の設定を行います。ラベルをクリックし、メニューから[Editor]→[Resolve Auto Layout Issues]→[Reset to Suggested Constraints]を実行します。
【STEP 3】ソフトの動きを実装する
画面左側のファイル一覧から[ViewController.swift]を選択して、上のように「音声合成」の変数宣言を書きます。またviewDidLoad()メソッドの中に、その変数を初期化するためのコードと、10秒おきにメソッドを呼び出すためのタイマーを作成するコードを書いてください。また起動直後にタイマーのメソッドを1度呼び出すためのコードも書いておきます。
viewDidLoad()メソッドのすぐ下に、右のようなタイマーの実装コードを追加します。ここでは現在時刻を取得して、そこから時・分・秒の3つの数値を取り出しています。それを元に「◯時◯分◯秒です」という文字列を作って、読み上げのためのstartSpeakingString()メソッドに渡すことで、時刻が読み上げられるようになります。
ここまで実装できたら、時刻読み上げの実装は完了です。「システム環境設定」の[音声入力と読み上げ]で[システムの声]を[Kyoko]に設定してから、Xcodeに戻って[実行]ボタンを押して、実行してみてください。時刻読み上げが始まります。
時刻の読み上げには10秒ごとに呼ばれるタイマーを使いましたが、画面に表示する文字は1秒ごとに更新されないと、時計としておかしく見えてしまいます。1秒ごとに呼ばれるタイマーを左のように追加します。
2つ目のタイマーのメソッド実装を、ViewController.swiftに追加します。このメソッドでは、現在時刻を取得して、時・分・秒を表す文字列に変換して、ラベルに表示しています。
以上で完成です。[実行]ボタンを押して実行してみましょう! 図のようにウインドウが表示されて、時間が表示されるのと同時に、10秒おきに時間が読み上げられます。10秒おきだと速すぎる場合には、60秒おきに変更してみましょう。
【まとめ】
今回もOS Xの機能を活用して、日常で使える実用的なソフトを作ってみました。音声読み上げの機能は、ほかにもいろいろな使い道があると思います。ぜひ皆さんも気軽にプログラミングの世界に触れてみてください。
次回のテーマ
考え中…。
今回のサンプルデータは以下よりダウンロードください。
●サンプルコードURL●
http://bit.ly/298z27c
【冒険記】
アップルが、スウィフトの次期メジャーバージョンとなる「スウィフト3.0」のリリースまでの過程を「Swift公式ブログ」の記事で説明しています。正式リリースは2016年後半の予定です。【URL】https://swift.org/blog/
【冒険記】
米国時間6月13日にWWDC 2016が開催されます。WWDC 2016のWEBサイトを見てみると、なにやら黒い背景にコードがいくつも並んでいますね。私も現地に行って参加する予定なので、どんな発表があるのか楽しみで仕方ありません。
Dr.さざめき(aka.沼田哲史)
1978年1月生まれ。某大学でプログラミングを教えつつ、ふらっとヨーロッパ旅行に出かけて美味しいものを食べ歩いたり、時折、iOSプログラミングの本を出したり。Mac歴16年。いつかアメリカ西海岸でお昼から美味しいIPAビールを飲みながらプログラミングするのが夢です。Twitter @sazameki