N2 TTS で日本語読み上げ

N2 TTS で日本語読み上げ

まず
N2 TTS のパッケージ名を使うので
これを定数に格納する

private static final String N2TTS =”jp.kddilabs.n2tts”;

同様に
TextToSpeechオブジェクトを格納する変数
private TextToSpeech tts;

TextToSpeech エンジン初期化完了フラグ
private boolean ttsInit;

次に、onCreate() の中へ
TextToSpeechオブジェクトを作成

tts = new TextToSpeech(this, this, N2TTS);
とする

引数の意味は
最初の this が
オブジェクトを利用するときの context
通常は this

次の this が
オブジェクトの初期化が完了したことを示す
OnInitListener オブジェクト

N2TTS
が使用するスピーチエンジン
これは、先に定数で指定したもの
そのときのソースが
private static final String N2TTS =”jp.kddilabs.n2tts”;

そして SpeechEngineが完了したときに呼ばれるメソッドは
onInit()

これを使うには
implements OnInitListener する必要があるので

implements OnClickListener

implements OnClickListener,OnInitListener {
とする

これで 右クリックで
source > override /implements

onInit() を追記できるので
ここに処理を書く
ここへは
読み上げ実行処理の有効化を書く

今回、判定を入れてあるのは
リスト項目をタップしたら
という条件があるから
この判定にフラグを使っている

if(status == TextToSpeech.SUCCESS){
は初期化が正しく成功したかの判定
処理が正しく成功したのなら
TextToSpeech.SUCCESS
となる

これで後はフラグである ttsinit を true にするだけ

次に
音声読み上げ処理の実装

音声読み上げで内部では
キュー構造が用意されていて
読み上げ処理は
そのキューに投入された順に実行される

キューを操作する場合
TextToSpeechクラスに定義された2つの定数を使う
定数は
QUEUE_ADD
新しく読み上げリクエスト追加

QUEUE_DELETE
現在のキュー内容を破棄し
直ちに読み上げリクエストを実行

この定数は
TextToSpeecオブジェクトで
何らかの読み上げリクエストを使うすべてのメソッドで使える

今回は リスト項目のクリック時にスピーチ実行する

このActivity はActivity クラスに
ListView オブジェクトの機能が統合された
ListActivity クラスをベースにしているので
onListItemClick() を
overrideするだけでList をクリックした時の動作を実装できる

中の処理には
if(ttsInit){
tts.speak(listAdapter.getItem(position), TextToSpeech.QUEUE_ADD, null);
}
を追加

onListItemClick() のパラメータの説明は
ListView l,
クリックされたlistview オブジェクト

View v,
クリックされたリストの項目ビューオブジェクト

int position,
クリックされたリスト項目のインデックス

long id
クリックされたリスト項目のID
となる

今回はAdapter Object のgetItem() から文字列を取得して
speack() に設定している

tts.speak(listAdapter.getItem(positi on), TextToSpeech.QUEUE_ADD, null);
で音声の読み上げ

この speak() のパラメータは
listAdapter.getItem(position)
が読み上げたい文字列

TextToSpeech.QUEUE_ADD
が処理をキューに追加する方法の指定
今回は QUEUE_ADD

null

読み上げ処理の追加パラメータ
今回は使わないので null
ここでは読み上げIDとかステレオ設定などをする

ここでキューに登録された文字列は
キューに格納され
読み上げ可能なタイミングになると読み上げられる

これで、アプリを起動してリストをタップすると
音声で文字列が読み上げられる

これを応用すれば twitter とかルート案内とかでもできる

とりあえず日本語読み上げはできたので
今後は Edit Text で入力し
それを喋らせるようにしてみよう

さすがに音声入力だと精度があまりよくないようだ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です