N2TTS Debug
使い方:
新規プロジェクトを立ち上げ、自動生成されたMainActivityの1行目を残し、以下のコードを丸々コピペしてください。
Android Studioが出すエラーを一つずつ解決してください(基本的にはライブラリのimportだけのはず)
以前はimport文も載せてましたが、Androidのライブラリがどんどん更新されていくため、このようなエラー解決をしてもらうことにしました
使用条件:
N2TTSをインストールしてください。
N2TTSの音声アドオンをすべて入れてください。
概要
N2TTSの各種音声動作確認をします。
RadioGroupとRadioButtonをすべてコードで生成するサンプルでもあります。
表示されたリストをクリックすると、TTSの初期化完了を待ってから、しゃべります。
コードは最適化されていません。ゴミがあるかもしれません。
音声はNotificationを使用しています。
もし音がならないようなら、コード内の_caseに1をセットしてください。Musicを使う設定に変わります。
public class MainActivity extends AppCompatActivity {
private SharedPreferences sp = null;
private String voice = "";
private TextToSpeech mTts = null;
private boolean tts_ok = false;
private Handler handler = new Handler(Looper.getMainLooper());
private Runnable runnable = null;
private Bundle myBundle = null;
private boolean onoff = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(sp==null){
sp = getSharedPreferences("setting", MODE_PRIVATE);
}
RadioGroup rg = new RadioGroup(this);
rg = genRadioButton(rg, "default");
rg = genRadioButton(rg, "ma001");
rg = genRadioButton(rg, "ma002");
rg = genRadioButton(rg, "ma003");
rg = genRadioButton(rg, "ma004");
rg = genRadioButton(rg, "ma005");
rg = genRadioButton(rg, "mb001");
rg = genRadioButton(rg, "mb002");
rg = genRadioButton(rg, "mb003");
rg = genRadioButton(rg, "mb004");
rg = genRadioButton(rg, "mb005");
rg = genRadioButton(rg, "fa001");
rg = genRadioButton(rg, "fa002");
rg = genRadioButton(rg, "fa003");
rg = genRadioButton(rg, "fa004");
rg = genRadioButton(rg, "fa005");
rg = genRadioButton(rg, "fb001");
rg = genRadioButton(rg, "fb002");
rg = genRadioButton(rg, "fb003");
rg = genRadioButton(rg, "fb004");
rg = genRadioButton(rg, "fb005");
setContentView(rg);
String TAG = "DEBUG";
int _case = 0;
if(myBundle==null){
myBundle = new Bundle();
if(_case == 0){
myBundle.putString("KEY_PARAM_STREAM", String.valueOf(AudioManager.STREAM_NOTIFICATION));
Log.d(TAG, "myBundle : NOTIFICATION");
}else{
myBundle.putString("KEY_PARAM_STREAM", String.valueOf(AudioManager.STREAM_MUSIC));
Log.d(TAG, "myBundle : MUSIC");
}
myBundle.putString("KEY_PARAM_VOLUME", String.valueOf(1.0f));
myBundle.putString("KEY_PARAM_PAN", String.valueOf(0.0f));
}
rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
RadioButton rb = (RadioButton) findViewById(checkedId);
/*Toast.makeText(getApplicationContext(),
String.format("checked -> %s", rb.getText().toString()),
Toast.LENGTH_SHORT).show();*/
voice = rb.getText().toString();
mTts = new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener(){
@Override
public void onInit(int status){
if(status==TextToSpeech.SUCCESS){
if(mTts.isLanguageAvailable(Locale.JAPAN) >= TextToSpeech.LANG_AVAILABLE ||
mTts.isLanguageAvailable(Locale.JAPANESE) >= TextToSpeech.LANG_AVAILABLE){
if(voice.equals("default")){
mTts.setLanguage(Locale.JAPANESE);
}else{
Locale locale = new Locale(Locale.JAPAN.getLanguage(),
Locale.JAPAN.getCountry(), voice);
mTts.setLanguage(locale);
}
tts_ok = true;
onoff = true;
}
}
}
}, "jp.kddilabs.n2tts");
}
});
runnable = new Runnable() {
@Override
public void run() {
if(tts_ok && onoff){
if(Build.VERSION.SDK_INT >= 21){
mTts.speak("今日も一日お疲れ様ですぅ。", TextToSpeech.QUEUE_FLUSH, myBundle, "1");
onoff = false;
}
}
handler.removeCallbacks(runnable);
handler.postDelayed(runnable, 500);
}
};
handler.postDelayed(runnable, 500);
}
public RadioGroup genRadioButton(RadioGroup rg, String name){
RadioButton rb = new RadioButton(this);
rb.setText(name);
rg.addView(rb);
return rg;
}
}