こんにちは。kimukimuです。
折角Android4.0のSDKが公開されたので、
Googleで公開されているサンプルを動かしてみます!
と、ただその前に最近のAndroidニュースを。
1.最近のAndroidニュース
正直な話、Android4.0登場が大きすぎて他のAndroidニュースは霞んでいます^^;
ですが、面白いな、と思ったのは下記です。
ソニー・エリクソンは2011年発売したXperiaシリーズにAndroid4.0を提供予定
今年登場したXperiaシリーズ。。。Xperia Arc、Xperia Acroとかでしょうか。
に、Android4.0が提供されるとのことです。
GoogleもNexus SにAndroid4.0を提供予定と発表し、
「Android2.3が動く機体であれば、Android4.0は動作可能」とコメントしています。
もしかすると、来年は今年発売されたAndroid2.3スマートフォンの
Android4.0へのバージョンアップラッシュが来るのかもしれませんね。
2.Android4.0用のサンプルプロジェクト一覧
Android Developerサイトのサンプルコードを確認してみると、
新しいサンプルプロジェクトは下記でした。
Spell Checker(入力時のスペルチェック)
Voicemail Provider(ボイスメール作成)
Wi-Fi Direct Demo(Wi-Fi Directデモ)
3.Androidプロジェクトの中身を確認してみます
では、早速新しいAndroidプロジェクトを作成し、そこにサンプルコードの中身を落とし込みます。
尚、ここではソースの抜粋しか紹介しないため、実際のファイルはこちらで。TextSpeech.zip
プロジェクトのAndroidSDKバージョンは当然4.0で作成します。
マニフェストファイルは下記の通りです。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="jp.gr.t3.android.textspeech" android:versionCode="1" android:versionName="1.0" > <!-- ★Android4.0を利用している宣言★ --> <uses-sdk android:minSdkVersion="14" /> <uses-permission android:name="android.permission.INTERNET" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <service android:label="@string/app_name" android:name=".RobotSpeakTtsService" > <intent-filter > <!-- ★テキスト読みあげサービスとしてインストールする宣言★ --> <action android:name="android.intent.action.TTS_SERVICE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <meta-data android:name="android.speech.tts" android:resource="@xml/tts_engine" /> </service> <!-- ★画面を持たない=単体アプリとして起動できない事を宣言★ --> <activity android:name=".CheckVoiceData" android:theme="@android:style/Theme.NoDisplay" > <intent-filter > <action android:name="android.speech.tts.engine.CHECK_TTS_DATA" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> </application> </manifest>
今回は特定の画面を持つアプリではなく、
「Androidの既存のサービスを差し替える」目的のアプリになります。
そのため、メインの画面は持たずに、差し替えるための定義としてインストールする形になります。
テキスト読みあげを実際に行っている箇所は下記のようです。
RobotSpeakTtsService.java
protected synchronized void onSynthesizeText(SynthesisRequest request, SynthesisCallback callback) { int load = onLoadLanguage(request.getLanguage(), request.getCountry(), request.getVariant()); // 言語サポート確認 if (load == TextToSpeech.LANG_NOT_SUPPORTED) { callback.error(); return; } // 16bit PCM monoオーディオとしてコールバックを生成 callback.start(SAMPLING_RATE_HZ, AudioFormat.ENCODING_PCM_16BIT, 1); // 1文字ごとに読みあげを行う final String text = request.getText().toLowerCase(); for (int i = 0; i < text.length(); ++i) { char value = normalize(text.charAt(i)); // 文字読みあげを行う(オーディオデータのバイト配列から該当部分を読み出す) if (!generateOneSecondOfAudio(value, callback)) { callback.error(); return; } } // 読みあげ完了 callback.done(); }
他の個所も読んだところ、大まかな流れは下記のようになっていました。
1.オーディオ定義ファイル(*.freq)を読み出す
2.テキスト読みあげコールバックをスタート
3.1文字ごとに小文字に変換し、コールバックにオーディオデータとインデックスを渡す
4.要求された文字数分「3」を繰り返す
そんなわけで、オーディオ定義ファイルの中身を確認してみたところ、下記のようになっていました。
eng-USA.freq(英語音声読み上げ定義ファイル。。。と思われる)
a:2 b:4 c:8 d:16 e:32 f:64 g:128 h:160 i:320 j:400 k:640 l:800 m:1600 n:3200 o:4000 p:8000 q:20 r:40 s:80 t:125 u:250 v:500 w:1000 x:2000 y:5 z:10
オーディオデータの定義のはずなんですが、中身はさっぱりです。
これでどうやって音声を表現できるんだろう。。。。
ともあれ、気にしていても仕方ないため、実際にインストールしてみます。
4.実際に動かしてみると・・・?
では、実際にインストールしてみます。
インストールの手順はこれまでのAndroidと同じです。
インストールしても、単体で起動できないアプリのため、特に画面は切り替わりません。
まずは、アプリ一覧を表示します。
今回インストールしたアプリが「TextToSpeechEngine」として
表示されているため、使用するエンジンをアプリのものに変更します。
・・・・!?
えーと、何でしょうか。
ファミコン時代のチープな音と、
モデムの「ピーガーガー」の音が混ざったような音が流れます。。。。
とりあえず、差し替えは出来たものの、実際に意味のある
読みあげとするにはきちんとしたデータ設定が必要なようです。。。
5.何が嬉しいの?
データがきちんと設定できたなら、の前提で書きます。
言うまでもなく、Androidのテキスト読みあげの音声を
自分の好みに差し替えられるということですね!
例えば・・・
・・・
・・・
・・・
とりあえず、普通に書いて公開できないようなイメージばかり浮かんだので詳細は割愛します。
ともあれ、読みあげエンジンを自分で設定できるのは面白いですね。
より自分好みの端末に出来るよう仕上がっているみたいです。Android4.0は。