ivona tts以及如何以编程方式获取所有已安装语音的列表?

mbr*_*brc 2 android text-to-speech

我安装了https://play.google.com/store/apps/details?id=com.ivona.tts和他们所有的声音.如何以编程方式从ivona tts获取所有已安装语音的列表?

在android SDK 8中有没有这个命令?

我能以编程方式更改ivona tts的pico tts吗?仅适用于我的程序的整个手机?

Mic*_*zuk 6

要获取已安装的TTS引擎列表,您应该获得com.ivona.tts包的uid :
http://developer.android.com/reference/android/content/pm/PackageManager.html#getApplicationInfo ( java.lang.String , % 20int%29
,然后向PackageManager询问共享此uid的所有应用程序: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语音,您必须从语音包名解析语言/国家/名称并将其传递给:
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"));
Run Code Online (Sandbox Code Playgroud)

这是示例活动,它将可用语音打印到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)));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)