一.当前TTS现状分析
基于第三方的TTS SDK,如百度、思必驰、讯飞等; 自研Native的TTS引擎+模型; 基于云端的TTS方案; 使用手机自带的TTS引擎。
二.好用的免费三方库
- 使用方式
- 在app的build.gradle中引入框架
dependencies {
implementation 'com.github.yangLos:EasyTTS:1.0.0'
}
- 在项目的或者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,但是并不是所有的都支持中文,如果你想支持中文,推荐上面免费的三方框架。