700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Android使用TextToSpeech实现语音播报-及默认不支持中文的方案

Android使用TextToSpeech实现语音播报-及默认不支持中文的方案

时间:2021-04-27 06:46:06

相关推荐

Android使用TextToSpeech实现语音播报-及默认不支持中文的方案

对TextToSpeech的介绍就不多说了,直接在下面的连接里面看,很详细

点击查看Android官网对TextToSpeech的介绍

这里直接介绍使用方法,一看就会

首先实例化TextToSpeech语音对象

//实例化自带语音对象textToSpeech = new TextToSpeech(this, new TextToSpeech.OnInitListener() {@Overridepublic void onInit(int status) {if (status == textToSpeech.SUCCESS) { //判断是否支持下面两种语言(英文/中文)int result1 = textToSpeech.setLanguage(Locale.US);int result2 = textToSpeech.setLanguage(Locale.SIMPLIFIED_CHINESE);boolean a = (result1 == TextToSpeech.LANG_MISSING_DATA || result1 == TextToSpeech.LANG_NOT_SUPPORTED);boolean b = (result2 == TextToSpeech.LANG_MISSING_DATA || result2 == TextToSpeech.LANG_NOT_SUPPORTED);Log.i("TTS", "US是否支持?--》" + a + "\nzh-CN是否支持?--》" + b);} else {Toast.makeText(MainActivity.this, "数据丢失或不支持", Toast.LENGTH_SHORT).show();}}});

可以写一个调用方法,直接把要朗读的内容带进去在需要朗读的地方调用

private void startTTS(String data) {// 设置音调,值越大声音越尖(女生),值越小则变成男声,1.0是常规textToSpeech.setPitch(0.1f);// 设置语速textToSpeech.setSpeechRate(1.5f);//输入中文,若不支持的设备则不会读出来textToSpeech.speak(data,TextToSpeech.QUEUE_FLUSH, null);}

最后就是使用了,直接在需要朗读的地方调用

startTTS("床前明月光,疑是地上霜,举头望明月,低头思故乡。");

别忘记在使用完之后关闭释放资源

@Overrideprotected void onStop() {super.onStop();textToSpeech.stop(); // 不管是否正在朗读TTS都被打断textToSpeech.shutdown(); // 关闭,释放资源}

下面是完整的代码用来参考

public class MainActivity extends AppCompatActivity {private Button mLook;private TextToSpeech textToSpeech = null;//创建自带语音对象@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mLook = findViewById(R.id.look);initTTS();mLook.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {startTTS("床前明月光,疑是地上霜,举头望明月,低头思故乡。");}});}private void initTTS() {//实例化自带语音对象textToSpeech = new TextToSpeech(this, new TextToSpeech.OnInitListener() {@Overridepublic void onInit(int status) {if (status == textToSpeech.SUCCESS) {textToSpeech.setPitch(1.0f);//方法用来控制音调textToSpeech.setSpeechRate(1.0f);//用来控制语速//判断是否支持下面两种语言(英文/中文)int result1 = textToSpeech.setLanguage(Locale.US);int result2 = textToSpeech.setLanguage(Locale.SIMPLIFIED_CHINESE);boolean a = (result1 == TextToSpeech.LANG_MISSING_DATA || result1 == TextToSpeech.LANG_NOT_SUPPORTED);boolean b = (result2 == TextToSpeech.LANG_MISSING_DATA || result2 == TextToSpeech.LANG_NOT_SUPPORTED);Log.i("TTS", "US是否支持?--》" + a + "\nzh-CN是否支持?--》" + b);} else {Toast.makeText(MainActivity.this, "数据丢失或不支持", Toast.LENGTH_SHORT).show();}}});}private void startTTS(String data) {// 设置音调,值越大声音越尖(女生),值越小则变成男声,1.0是常规textToSpeech.setPitch(0.1f);// 设置语速textToSpeech.setSpeechRate(1.5f);//输入中文,若不支持的设备则不会读出来textToSpeech.speak(data,TextToSpeech.QUEUE_FLUSH, null);}@Overrideprotected void onStop() {super.onStop();textToSpeech.stop(); // 不管是否正在朗读TTS都被打断textToSpeech.shutdown(); // 关闭,释放资源}}

但是TTS系统默认是不支持中文的,只能进行英文发音,当然也不是没有解决办法,只要在本地安装一个支持中文发音的语音包插件就ok了

科大讯飞语音包

下载上面的语音包,解压出来是个apk文件,安装到手机上即可

实现短促音效请看Android点击按钮触发音效

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。