分享一个好用的Android文字转语音的三方库

962 阅读1分钟

一.当前TTS现状分析

基于第三方的TTS SDK,如百度、思必驰、讯飞等; 自研Native的TTS引擎+模型; 基于云端的TTS方案; 使用手机自带的TTS引擎。

二.好用的免费三方库

  • 使用方式
  1. 在app的build.gradle中引入框架
dependencies {
    implementation 'com.github.yangLos:EasyTTS:1.0.0'
}
  1. 在项目的或者setting.gradle中加入仓库
maven { url 'https://jitpack.io' }

3.简单的使用

public class DemoActivity extends AppCompatActivity {
    private static final String DEFAULT_INPUT_TEXT = "北国风光,千里冰封,万里雪飘。望长城内外,惟余莽莽;大河上下,顿失滔滔。山舞银蛇,原驰蜡象,欲与天公试比高。须晴日,看红装素裹,分外妖娆。江山如此多娇,引无数英雄竞折腰。惜秦皇汉武,略输文采;唐宗宋祖,稍逊风骚。一代天骄,成吉思汗,只识弯弓射大雕。俱往矣,数风流人物,还看今朝。";
    private View speakBtn;
    private RadioGroup speedGroup;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ttsdemo);

        TtsManager.getInstance().init(this); //初始化

        TtsStateDispatcher.getInstance().addListener(new OnTtsStateListener() {
            @Override
            public void onTtsReady() {
         
                speakBtn.setEnabled(true);
            }

            @Override
            public void onTtsStart(String text) {
            }

            @Override
            public void onTtsStop() {
            }
        });

        EditText input = findViewById(R.id.input);
        input.setHint(DEFAULT_INPUT_TEXT);

        speedGroup = findViewById(R.id.speed_chooser);
        speedGroup.check(R.id.normal);

        speakBtn = findViewById(R.id.start);
        speakBtn.setEnabled(false);
        speakBtn.setOnClickListener(v ->
                ThreadPoolManager.getInstance().execute(() -> {
                    float speed;
                    switch (speedGroup.getCheckedRadioButtonId()) {
                        case R.id.fast:
                            speed = 0.8F;
                            break;
                        case R.id.slow:
                            speed = 1.2F;
                            break;
                        case R.id.normal:
                        default:
                            speed = 1.0F;
                            break;
                    }

                    String inputText = input.getText().toString();
                    if (TextUtils.isEmpty(inputText)) {
                        inputText = DEFAULT_INPUT_TEXT;
                    }
                    TtsManager.getInstance().speak(inputText, speed, true);
                }));

        findViewById(R.id.stop).setOnClickListener(v ->
                TtsManager.getInstance().stopTts());
    }
}

三.结语

手机虽然自带了TTS,但是并不是所有的都支持中文,如果你想支持中文,推荐上面免费的三方框架。