#freeze Androidに日本語をしゃべらせる(音声合成)アプリケーションとライブラリです。 #contents * サンプルアプリケーションを試す [#o9d82e96] Androidの 設定→アプリケーション→提供不明のアプリ にチェック。 以下のQRコードまたは[[JaTTSDemo-0.0.2.apk:http://gimite.net/archive/JaTTSDemo-0.0.2.apk]]からダウンロード。 http://chart.apis.google.com/chart?chs=150x150&cht=qr&chl=http://gimite.net/archive/JaTTSDemo-0.0.2.apk&ext=.png 注意: - サーバで音声に変換する方法なので、ネットワークに繋がっていないと使えません。 - 少し時間がかかります。ネットワークやサーバの状態によりますが、しゃべり始めるまでにだいたい3〜5秒はかかります。 - 入力内容はすべてサーバに送られます。 - サーバが落ちていたりして失敗する場合があります。エラーが出る場合はしばらくしてから再度試してください。 * ライブラリを使う [#h642486e] - [[android-jatts-0.0.2.jar:http://gimite.net/archive/android-jatts-0.0.2.jar]] をダウンロードしてAndroidアプリケーションのプロジェクトに追加。 - AndroidManufest.xmlにINTERNETパーミッションを追加。 <manifest> ... <uses-permission android:name="android.permission.INTERNET"></uses-permission> </manifest> JapaneseTextToSpeechというクラスが、だいたいAndroid標準のTextToSpeechクラスと同じように使えます。一部のメソッドしか実装されてないですが…。 基本的な使い方: import net.gimite.jatts.JapaneseTextToSpeech; import android.speech.tts.TextToSpeech; // ActivityやService内で JapaneseTextToSpeech tts = new JapaneseTextToSpeech(this, null); tts.speak("こんにちは", TextToSpeech.QUEUE_FLUSH, null); speak()の第2引数は TextToSpeech.QUEUE_FLUSH のみです。 QUEUE_ADD には未対応です。 speak()の第3引数で細かい設定ができます。 HashMap<String, String> params = new HashMap<String, String>(); // notificationとして再生。 params.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_NOTIFICATION)); // utterance idを設定。 params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "1"); // 声色を変える。JapaneseTextToSpeech独自オプション。 // "male01", "female01", "male02"の3種類。 params.put(JapaneseTextToSpeech.KEY_PARAM_SPEAKER, "female01"); tts.speak("こんにちは", TextToSpeech.QUEUE_FLUSH, params); TextToSpeechクラスと同様、JapaneseTextToSpeech#setOnUtteranceCompletedListener()が使えます。また、追加でsetOnStateChangedListener()、setOnErrorListener()というのがあります。使い方はサンプルアプリケーションのMainActivity.javaを見てください。 * JapaneseTextToSpeechクラス メソッド一覧 [#od1dfaa5] public class JapaneseTextToSpeech { // TextToSpeechクラス互換: public JapaneseTextToSpeech(Context context, TextToSpeech.OnInitListener listener); // ロード中も true になります。 public boolean isSpeaking(); public void setOnUtteranceCompletedListener( TextToSpeech.OnUtteranceCompletedListener listener); // queueModeは TextToSpeech.QUEUE_FLUSH のみ対応。 public synchronized void speak( String text, int queueMode, HashMap<String, String> params); public void stop(); // ロードに時間がかかるので、サブスレッド内での呼び出しを推奨。 public int synthesizeToFile(String text, HashMap<String, String> params, String filename); // 独自: public void setOnStateChangedListener(OnStateChangedListener listener); public void setOnErrorListener(OnErrorListener listener); public State getState(); public enum State { IDLE, LOADING, SPEAKING, } public interface OnStateChangedListener { public void onStateChanged(State state, String utteranceId); } public interface OnErrorListener { public void onError(Exception exception, String utteranceId); } } * ソースコード [#se8d28a4] [[android-jatts - Github:https://github.com/gimite/android-jatts]] JaTTSDemoがサンプルアプリケーション、JaTTSLibがライブラリです。それぞれEclipseのプロジェクトファイルになっています。ライセンスは修正BSDライセンスです。 * 仕組み [#n4d0f803] サーバ側で[[Galatea Talk:http://hil.t.u-tokyo.ac.jp/~galatea/index-jp.html]] ([[デモ:http://www.sp.nitech.ac.jp/demo/open_jtalk/]])というものを動かして、音声ファイルに変換したものをAndroidで再生しているだけです。 http://gimite.net/speech?format=wav&speaker=female01&text=こんにちは みたいなURLでwavファイルを取得できるので、他の用途で使いたい人はご自由にどうぞ。落ちたりするかもしれませんが。 * ライセンス [#qba11838] サーバは[[Galatea Talk:http://hil.t.u-tokyo.ac.jp/~galatea/regist-jp.html]]のライセンスに基づいて提供しています。ライブラリのライセンスは修正BSDライセンスです。 * コメント [#e1cc9d30] -動いてない? -- [[aki]] &new{2013-12-20 18:09:23 (金)}; #comment