Androidに日本語をしゃべらせる(音声合成)アプリケーションとライブラリです。

サンプルアプリケーションを試す

Androidの 設定→アプリケーション→提供不明のアプリ にチェック。 以下のQRコードまたは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秒はかかります。
  • 入力内容はすべてサーバに送られます。
  • サーバが落ちていたりして失敗する場合があります。エラーが出る場合はしばらくしてから再度試してください。

ライブラリを使う

  • 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?クラス メソッド一覧

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);
    }
    
}

ソースコード

android-jatts - Github

JaTTSDemoがサンプルアプリケーション、JaTTSLibがライブラリです。それぞれEclipseのプロジェクトファイルになっています。ライセンスは修正BSDライセンスです。

仕組み

サーバ側でGalatea Talk (デモ)というものを動かして、音声ファイルに変換したものをAndroidで再生しているだけです。

http://gimite.net/speech?format=wav&speaker=female01&text=こんにちは

みたいなURLでwavファイルを取得できるので、他の用途で使いたい人はご自由にどうぞ。落ちたりするかもしれませんが。

ライセンス

サーバはGalatea Talkのライセンスに基づいて提供しています。ライブラリのライセンスは修正BSDライセンスです。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-06-07 (水) 22:16:46 (76d)