N.Yamazaki's blog

主に音声合成について思ったことを書いてみようと思います。
<< 「誰だっけ?」をリリース(iPhone App.) | main | Androidで音声再生(サウンド出力) プログラム >>
AquesTalk Android β版リリース

 音声合成エンジン AquesTalkをGoogleのOSプラットフォームであるAndroidに移植しました。
現在、β版であり評価版を無償でダウンロード出来ます。downloadページ

サンプルアプリ
ライブラリと一緒に、サンプルアプリが2つ(HelloAquesTalk,AqTkApp)入っています。

  • HelloAquesTalk:
    最も単純なサンプルで、起動時に規定のメッセージを合成出力するだけのものです。
  • AqTkApp:
    GUIを持たせ、任意の音声記号列と話速を指定して音声合成するものです。

 


HelloAquesTalk AqTkApp Android

サンプルアプリの動かし方
AndroidSDK(+Eclipse)の開発環境が構築されていることが前提です。

 

 

  1. ダウンロードしたプロジェクトファイル一式を任意の場所に展開
  2. Eclipseを起動
  3. メニュー>ファイル>新規>Androidプロジェクト
  4. [外部ソースからプロジェクトを作成]を選択し、
  5. ロケーションに、プロジェクトファイルの(AndroidManifest.xmlがある)フォルダを指定
  6. あとは、実行するだけ。


AquesTalkライブラリのファイル
注意 「AquesTalk Android」の実体はネイティブコードで書いてあり、JNI経由で呼び出しています。そのため、AndroidOSであっても、ARM CPU以外では動作しません。

任意のアプリケーションで音声合成するときには、次の2つのファイルを使用します。

 

 

  • ¥libs¥armeabi¥libAquesTalk.so : AquesTalk Androidの実体(ネイティブコード)
  • ¥src¥aquestalk¥AquesTalk.java : libAquesTalk.so を呼び出すためのラッパークラス

この2つのファイルを、アプリケーションのプロジェクトに追加します。Eclipseであれば、プロジェクトディレクトリに、上のファイルをディレクトリごとコピーすればOKだと思います。このとき、アプリのディレクトリ構造は例えば次のようになっていると思います。

/<app project>
    /src
       /<アプリのソース>
       /aquestalk
           /AquesTalk.java
    /libs
       /armeabi
           /libAquesTalk.so
    /res
      .
      .

なお、呼び出しの関係は、次のようになります。

 

 

  • アプリ -> AquesTalk.java -> libAquesTalk.so

 


AquesTalkライブラリの 使用方法
任意のアプリにAquesTalkを組み込む方法をサンプルアプリのコード(AqTkApp.java)を参照しながら以下に示します。

AquesTalkのクラスをインポートします。

 

 

import aquestalk.AquesTalk;

AquesTalk.java の中を見ればわかりますが、静的メソッドと、通常のメソッドが用意されています。いまのところ、関数は1つだけなので、どちらを使っても違いはありません。
AqTkApp.javaでは、アプリ起動時のonCreate()のなかで、インスタンスを生成しています。

 

 

aquestalk = new AquesTalk();

そして、発声ボタンが押されたときに、音声記号列 と発話速度を取得して、次のように音声データをメモリ上に生成します。なお、音声記号列の文字コードはUTF-8で指定します(Androidのデフォルトのままでok)。

 

 

byte[] wav = aquestalk.syntheWav(koe, speed);

ここで得られる音声データはwavフォーマット(8KHz,Mono,Straight PCM)です。なお、音声記号列が不正な場合など生成エラーの時は、byte[]のサイズが1になり、配列の先頭にエラーコードが返されます。エラーコードは、「AquesTalkプログラミングガイド」のエラーコード表を参照ください。
現時点では、「AquesTalk Android」に直接音声を出力するメソッドは用意されていませんので、音声再生はアプリ側で記述する必要があります。MediaPlayer クラスを用いて音声出力するコードの例がAqTkApp.javaにありますので、参考にしてください。

 

 

private void PlayWav(byte[] wav)

なお、このメソッドでは、一旦ファイルに出力してから、MediaPlayerで再生しています。もし、メモリ上の音声データをファイルを経由せず再生する方法をご存知でしたら教えてください!
【解決済み】AudioTrackを使う方法を教えてもらいました。2010/05/26

お願い
もし、実機等でこのライブラリの動作を確認された場合は、動作報告に是非ともご協力くださいませ。 >掲示板

 

| AquesTalk | 12:32 | - | - |
PROFILE
Follow
CATEGORIES
LATEST ENTRIES
SEARCH THIS SITE
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND
SONY MDR-CD900ST
SONY MDR-CD900ST (JUGEMレビュー »)

普段これで開発しています。
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND