2

https://play.google.com/store/apps/details?id=com.ivona.ttsとすべてのボイスをインストールしました。ivona tts からインストールされているすべての音声のリストをプログラムで取得するにはどうすればよいですか?

Android SDK 8 でこれを行うコマンドはありますか?

プログラムで pico tts を ivona tts に変更できますか? 私のプログラムのためだけに電話全体ではありませんか?

4

2 に答える 2

6

インストールされている TTS エンジンのリストを取得するには、com.ivona.ttsパッケージの uid を取得する必要があります:
http://developer.android.com/reference/android/content/pm/PackageManager.html#getApplicationInfo(java.lang.String,% 20int%29
次に、この uid を共有するすべてのアプリケーションについてPackageManagerに問い合わせます:
http://developer.android.com/reference/android/content/pm/PackageManager.html#getPackagesForUid(int%29

TTS エンジンを変更するには、次のメソッドを使用します:
http://developer.android.com/reference/android/speech/tts/TextToSpeech.html#setEngineByPackageName(java.lang.String%29)

(このメソッドは非推奨であり、新しい API レベルでは次のコンストラクターを使用する必要があることに注意してください:
http://developer.android.com/reference/android/speech/tts/TextToSpeech.html#TextToSpeech(android.content.Context ,%20android.speech.tts.TextToSpeech.OnInitListener,%20java.lang.String%29 )

最後に、特定の Ivona 音声を設定するには、音声パッケージ名から language/country/name を解析し、それを
http://developer.android.com/reference/android/speech/tts/TextToSpeech.html#setLanguage(java.util .Locale%29 例: com.ivona.tts.voicebeta.eng.gbr.amy を選択するには、次を使用する必要があります。

tts.setLanguage(new Locale("eng", "gbr", "amy"));

使用可能な音声を logcat に出力するサンプル アクティビティを次に示します。

package com.example.com.ivona.tts.test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import android.app.Activity;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.util.Log;

public class TTSActivity extends Activity implements TextToSpeech.OnInitListener {
    private static final String TAG = "TTSActivity";
    private TextToSpeech tts;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tts = new TextToSpeech(TTSActivity.this, TTSActivity.this);
    }

    @Override
    public void onInit(int status) {
        PackageManager pm = getPackageManager();

        ApplicationInfo ai = null;
        try {
            ai = pm.getApplicationInfo("com.ivona.tts", 0);
        } catch (NameNotFoundException e) {
            e.printStackTrace();
            return;
        }

        String[] ivonaVoices = pm.getPackagesForUid(ai.uid);

        Log.d(TAG, "Possible tts.setLanguage() usage:");
        Pattern p = Pattern.compile("^com\\.ivona\\.tts\\.voicebeta\\.([^.]+)\\.([^.]+)\\.([^.]+)$");
        for (String voice: ivonaVoices) {
            Matcher m = p.matcher(voice);
            if (m.matches())
                Log.d(TAG, String.format("tts.setLanguage(\"%s\", \"%s\", \"%s\")", m.group(1), m.group(2), m.group(3)));
        }
    }
}
于 2012-09-17T12:10:01.680 に答える