AquesTalkのサンプルアプリを使用し読み上げアプリを作ったら動かない
- 評価
- クリップ 0
- VIEW 1,306
質問タイトル通りです。急いでLogを見ようと思っていますがまだ見れません。
x86(実機はx86)に対応していないのかもしれません。でも元のアプリは動いたので…
AquesTalk
package sample.aquest.solarand;
import android.app.Activity;
import android.os.Bundle;
import android.media.MediaPlayer;
import android.util.Log;
import android.widget.TextView;
import java.io.*;
import aquestalk2.AquesTalk2;
import android.widget.*;
import android.view.View.*;
import android.view.*; // AquesTalk2クラス 別途libAquesTalk2.soが必要
public class HelloAquesTalk2 extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Button b=(Button) findViewById(R.id.Click);
b.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View p1){
String koe = "";
int speed = 90; // 発話速度 50-300 default:100
int phontResID = R.raw.aq_robo; // 声種
try {
// リソースからPhontデータを読み込み (デフォルトのPhontを使用するときは不要)
InputStream in = getResources().openRawResource(phontResID);
int size = in.available(); // リソースのデータサイズ
byte[] phontDat = new byte[size];
in.read(phontDat);
// 音声合成
AquesTalk2 aquestalk2 = new AquesTalk2();
byte[] wav = aquestalk2.syntheWav(koe, speed, phontDat);
if(wav.length==1){//生成エラー時には,長さ1で、先頭にエラーコードが返される
Log.v("AQTKAPP", "AquesTalk2 Synthe ERROR:"+wav[0]);
}
else {
PlayWav(wav);//音声データを再生出力
}
}catch (IOException e) {
}
TextView textView = (TextView) findViewById(R.id.mainTextView);
textView.setText("音声記号列:"+koe
+" speed:"+speed
+" phont:"+getResources().getResourceEntryName(phontResID));
setContentView(textView);
}
});
}
private void PlayWav(byte[] wav) {
// 一旦ファイルに出力してから、MediaPlayerで再生
String tmpfilename = "tmp_hello.wav";
String packagename = removeSuffix(this.getClass().getName());
try {
FileOutputStream fileOutputStream = openFileOutput(tmpfilename, MODE_WORLD_READABLE);//MODE_PRIVATEはNG!
fileOutputStream.write(wav);
fileOutputStream.close();
} catch (IOException e) {
Log.e("AQTKAPP", "ERR: FileOutputStream");
}
try {
MediaPlayer mp = new MediaPlayer();
// mp.reset(); // MediaPlayerインスタンスを複数回使うときは必要
mp.setDataSource("/data/data/"+packagename+"/files/"+tmpfilename);
mp.prepare(); //<<忘れると動かない (-38,0)のようなエラーがでる
mp.start();
} catch (IOException e) {
}
}
public static String removeSuffix(String fileName) {
if (fileName == null)
return null;
int point = fileName.lastIndexOf(".");
if (point != -1) {
return fileName.substring(0, point);
}
return fileName;
}
/*byte[] wav = aquestalk2.syntheWav(koe, speed, null); //< デフォルトのPhontを使用する場合
byte[] wav = AquesTalk2.synthe(koe, speed, phontDat); //< 静的メソッドもOK*/
}
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.35%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる