『Gletts (Glaeja Ext.)』は、Androidの「テキスト読み上げ(TextToSpeech : TTS)」機能を用いて、『Glaeja』からテキスト読み上げをおこなわせるためのエクステンションです。
システムにプリインストールされているTTSエンジン以外に、日本語対応のTTSエンジンを別途インストールすることで、日本語テキストを読み上げさせることも可能です。
インストールと簡単な使い方の解説は以下に記します。
インストール
『Gletts』の最新版は「ver. 1.0.0 (2014-02-12)」です。下のアイコンをクリックするとPlayストアにジャンプしますので、そこからインストールしてください。
インストール後は、ドロワーから『Glaeja』を起動し、[データ管理]→[エクステンションの管理]に進み、[新規登録]ボタンをクリックして『Gletts』を登録してください。
「GEXコード」の初期値は“GEX_GLETTS”ですが、お好みで変更しても構いません。
アイテム欄右端の設定アイコンをクリックするか、ドロワーから起動すると、『Gletts』の「TTSエンジン確認画面」を開くことができます。
TTSエンジン確認画面
左のスクリーンショットが「TTSエンジン確認画面」となります。
この画面には、端末にインストールされている全てのTTSエンジンとその使用可能なボイスの一覧を表示されています。
この画面の初回起動時に、端末にインストールされている全てのTTSエンジンとその使用可能なボイスをすべて検索し、『Gletts』の持つ内部データベースにそれらのパラメータが保存されます。
ですので、『Glaeja』でテキスト読み上げをおこなわせる前に「TTSエンジン確認画面」を一度は起動しておく必要があります。
また、一度パラメータを保存させた後に新しいTTSエンジンをインストールしても、自動で内部データベースのパラメータが追加されるわけではありません。新しいTTSエンジンをインストールしたら、必ず「TTSエンジン確認画面」を起動して、右上の[更新ボタン]でTTSエンジンの再検索とパラメータ保存をおこなってください。
一覧の太字で書かれているのが「TTSエンジン名」で、その前の数字が「エンジン番号」です。また1段下げて、各エンジンが持つ「ボイス名」が番号付きで表示されています。この「エンジン番号」と「ボイス番号」は、後述するオプション指定で必要になります。
『Glaeja』上での使い方
基本となる読み上げ
『Glaeja』から、
- 該当部分文字列:GEX_GLETTS@.../.../\Z@
のようなエスケープキャラクタ・シーケンスで呼び出すと、システムでデフォルト設定されているTTSエンジン・ボイスの組み合わせで「該当部分文字列」が読み上げられます。
ピッチ・速度を変える
該当部分文字列の末尾に「//(スラッシュ2つ)」で始まる「オプション指定」があると、読み上げに用いるTTSエンジン・ボイスの設定を変更することができます。
- //P[1...9]:読み上げボイスのピッチ(音の高さ)を変更する
- //S[1...9]:読み上げボイスの速度を変更する
「P5」がシステムデフォルトのピッチで、数字が小さいほど低く、大きいほど高く変化します。
「S5」がシステムデフォルトのピッチで、数字が1小さくなると「-20%」、1大きくなると「+20%」ずつ速度が変化します。
TTSエンジン・ボイスを変える
「オプション指定」で読み上げに用いるTTSエンジンとボイスを設定することもできます。
- //E[エンジン番号]:読み上げに用いるTTSエンジンを設定する
- //V[ボイス番号]:読み上げに用いるボイスを設定する
[エンジン番号]には「TTSエンジン確認画面」で確認したエンジン番号を記述します。
存在しないエンジン番号の場合にはシステムデフォルトのTTSエンジンが用いられます。
[ボイス番号]には「TTSエンジン確認画面」で確認したボイス番号を記述します。
設定されているTTSエンジンが持つボイス番号以外の数値を設定した場合にはシステムデフォルトのボイスが用いられます。
これらも「//E2V1P3S7」のように同時に指定することが可能です。
その他
OSSライセンス
『Gletts』は以下のオープンソース・ソフトウェアを利用しています。
○ GlaejaExtension_v100.jar
Copyright (c) 2014 kanitawa
ライブラリJar“GlaejaExtension_v100.jar”は、MITライセンスのもと公開されています。
http://opensource.org/licenses/mit-license.php
既知の不具合
- 初めて『Glaeja』からテキストを読み上げる際に、上手く発話がおこなわれないことがあります。これはTTSエンジンのイニシャライズが間に合わないことによるものです。2回目以降は発話できるようになっているはずです。
更新履歴
- 「Gletts」
- 2014-02-12:ver.1.0.0 公開
作例
……さて、「テキストを読み上げられるようになった」のはわかったんですが、イマイチ使いドコロがわかりませんねw
単に「テキスト」レイヤーに書いちゃうと、1分ごとに読み上げられちゃいますしね。
というわけで、以下に2つ作例を簡単に示しておきます。
押すと時刻を読み上げるボタン
要するに、「透明ボタン」をクリックしたときだけ時刻を読み上げさせたい、わけです。
この場合には、裏ワザっぽいですが「透明ボタン」の[ウィジェット変数に値を代入…]に読み上げさせるエスケープキャラクタ・シーケンスを記述します。
「透明ボタン」の[クリック時]を[ウィジェット変数に値を代入…]にし、「代入する値…」のところに読み上げさせたいテキストを含むエスケープキャラクタ・シーケンスを記述します。
こうすることで、この「透明ボタン」がクリックされたときにだけ、エスケープキャラクタ・シーケンスが解釈されてテキストが読み上げられます。
押すとアプリ名を読み上げながら起動するボタン
つまり、“Open browser”と発声しながらブラウザが起動する、というような「透明ボタン」です。
「透明ボタン」は[クリック時]の動作を1つしか設定できませんので、上で書いた方法は使えません。
そこで、ちょっと複雑になりますが、以下のようなレイヤー構成で実現します。
各レイヤーの役割ですが、①の「テキスト」レイヤーはボタンの文字ラベルとしてのものなので重要ではありません。
②から⑤の4つのレイヤーが複合的に機能することで上記機能を実現しています。
まず⑤の「透明ボタン」ですが、これは[クリック時]に「btn1」というウィジェット変数に真となる「1」を代入しています。
これにより、この「透明ボタン」がクリックされると「btn1」に「1」が代入され、このウィジェットの更新が即時開始されます。
この「透明ボタン」のレイヤー位置は、上のスクリーンショットでは一番下になっていますが、これは私の好みでして、どこにあっても構いませんw
「btn1」に「1」が代入されてからのウィジェットの更新ですが、レイヤーは上から解釈されていきますので、まず①そして②が解釈されます。
②の「アクション」レイヤーでは、ウィジェット変数「btn1」の値を監視して、それが「偽 → 真」になったときにブラウザを起動するように設定しています(「真 → 偽」のときは何もしません)。
これによって、「透明ボタン」がクリックされたらブラウザが起動する、ということを間接的に実現しているわけです。
「アクション」レイヤーでは、ウィジェット変数の変化を監視していますが、監視するだけで値を変えたりはしません。なので、この「アクション」レイヤー以降でも「btn1」は「1」のままです。
そこで③の「トリガー」レイヤーが反応することになります。
この「トリガー」レイヤーの条件式は「btn1@q@.0@P@」ですので、「btn1」が「1」ならこの「トリガー」レイヤーの効果対象が描画(つまり解釈)されます。
つまりは、④の「テキスト」レイヤーは「透明ボタン」がクリックされて「btn1」が「1」のときだけ解釈される、というわけです。
④の「テキスト」レイヤーで“Now open the browser”と発声させているんですが、その前に「0@p@btn1@Q@」というエスケープキャラクタ・シーケンスが挿入されています(この部分は結果文字列に残らないので発声されませんが)。
これは、「btn1」が「1」のままだと定時更新のたびに発声がおこなわれてしまうので、「btn1」に「0」を代入することで発声とブラウザ起動を一度きりにする、ためのものです。
※ ブラウザ起動は「アクション」レイヤーなので「真 → 真」ではおこなわれません。
この「btn1」への「0」代入は、当然②の「アクション」レイヤーより後でなければいけませんから、②③④のレイヤーはこの順番でなければいけません。
この「透明ボタン」+「アクション」+「トリガー」の組み合わせは、1つの「透明ボタン」クリックで複数の動作をおこなわせることのできるレイヤー構成で、 他にも色々な応用例が考えられるものです。
難しいかもしれませんが、理解できれば複雑な動きをするウィジェットが作れるようになります。
以上
4 件のコメント:
それは音声合成エンジンが何もインストールされていませんね。
N2ttsやGoogleテキスト読み上げエンジンがはいってます。この2つでは駄目と言うことでしょうか…ここにある通り透明ボタンでの時間読み上げをやったところ、しゃべりましたが、エンジンの番号は変えても変わらず、端末のデフォルト設定を変えたところ、日本語になったり、英語になったりしました。
当方の環境(Nexus7, XperiaSO02-FおよびPC上エミュレータ)ではすべてインストールした音声合成エンジンが正しく表示されますね。
……機種依存なんですかね?
確認画面に出ないと、エンジンを換えたりピッチや速度を変えることができないですね。
ただ、確認画面に出なくても「端末のデフォルト設定」でなら発話させることが可能なはずです。
ありがとうございます。一応発話はできるはできるので、もし、他にもこういう方がいたら、更新お願いいたします。
コメントを投稿