TextToSpeech项目应用
- 文字转语音
- 官网简介
- 项目前景
- 项目实战
- 真机调试
- 结尾
文字转语音
从文本合成语音以立即播放或创建声音文件。即TextToSpeech(以下简称TTS)
TTS是语音合成应用的一种,它将储存于电脑中的文件,如帮助文件或者网页,转换成自然语音输出。
TTS不仅能帮助有视觉障碍的人阅读计算机上的信息,更能增加文本文档的可读性。现在的TTS应用包括语音驱动的邮件以及声音敏感系统,并常与声音识别程序一起使用。TextToSpeech必须再被实例化之后才能使用.实现TextToSpeech.OnInitListener方法来获取实例化结果的提醒。当你已经使用完TextToSpeech实例之后, 应该调用shutdown()方法来释放TextToSpeech所使用的本地资源。
官网简介
具体详情可以去参考 链接地址:TextToSpeech
项目前景
最近在项目应用到了语音播报功能
。由于近期业务中,物联网蓝牙连接设备过程中,光有toast
,客户感觉无感操作,故新增了语音播报功能。
语音播报功能应用场景也很多的,所以我们从其中找符合自己的就可。
项目实战
在这里我单独拉出来一个项目,供各位老板参考一下,共同学习!
当初在遇到语音播报的时候,不知道应用哪个好,开发周期比较紧张,所以引用了TextToSpeech
,研发简单、简便。
在研发过程中,遇到一个问题,第一次运行,语音播报正常。等活动页运行销毁后,第二次调起语音播报异常,无法播报的情况,这个问题已解决。
具体代码如下:
/*** @author 拉莫帅* @date 2022/8/15* @address* @Desc 语音播报监听开始、结束*/
public interface SpeakListener {void startSpeak(String text);void stopSpeak();
}
/*** @author 拉莫帅* @date 2022/8/15* @address* @Desc 语音播报工具类*/
public class SpeechUtils extends UtteranceProgressListener implements SpeakListener, TextToSpeech.OnUtteranceCompletedListener{private Context mContext;private static SpeechUtils singleton;private TextToSpeech mTextToSpeech; // 系统语音播报类private boolean isSuccess = true;/*** 单例模式* @param context* @return*/public static SpeechUtils getInstance(Context context) {if (singleton == null) {synchronized (SpeechUtils.class) {if (singleton == null) {singleton = new SpeechUtils(context);}}}return singleton;}private SpeechUtils(Context context) {this.mContext = context.getApplicationContext();mTextToSpeech = new TextToSpeech(mContext, new TextToSpeech.OnInitListener() {@Overridepublic void onInit(int i) {//系统语音初始化成功if (i == TextToSpeech.SUCCESS) {//操作成功int result = mTextToSpeech.setLanguage(Locale.CHINA);mTextToSpeech.setPitch(1.0f);// 设置音调,值越大声音越尖(女生),值越小则变成男声,1.0是常规mTextToSpeech.setSpeechRate(1.0f);mTextToSpeech.setOnUtteranceProgressListener(SpeechUtils.this);mTextToSpeech.setOnUtteranceCompletedListener(SpeechUtils.this);// TextToSpeech.LANG_MISSING_DATA:表示语言的数据丢失// TextToSpeech.LANG_NOT_SUPPORTED:不支持if (result == TextToSpeech.LANG_MISSING_DATA|| result == TextToSpeech.LANG_NOT_SUPPORTED) {//系统不支持中文播报isSuccess = false;}}}});}/*** 开始播报* @param text*/@SuppressLint("NewApi")@Overridepublic void startSpeak(String text) {if (!isSuccess) {Toast.makeText(mContext, "系统不支持中文播报", Toast.LENGTH_SHORT).show();return;}if (mTextToSpeech != null) {// QUEUE_ADD:该模式下会把新的语音任务放到语音任务之后,等前面的语音任务执行完了才会执行新的语音任务。// QUEUE_FLUSH:该模式下在有新任务时候会清除当前语音任务,执行新的语音任务mTextToSpeech.speak(text,TextToSpeech.QUEUE_ADD, null, null);}}/*** 结束播报*/@Overridepublic void stopSpeak() {if (mTextToSpeech != null) {mTextToSpeech.stop();}}/*** 语音播报完成回调* @param utteranceId*/@Overridepublic void onUtteranceCompleted(String utteranceId) {}@Overridepublic void onStart(String utteranceId) {}@Overridepublic void onDone(String utteranceId) {}@Overridepublic void onError(String utteranceId) {}
}
/*** @author 拉莫帅* @date 2022/8/15* @address* @Desc 主功能(TTS)*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener {private SpeechUtils speechUtils;private EditText editText;private ImageView speakButton;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}/*** 初始化控件*/private void initView() {speechUtils = SpeechUtils.getInstance(MainActivity.this);editText = findViewById(R.id.editText);speakButton = findViewById(R.id.btn);speakButton.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn:String speakText = editText.getText().toString().trim();boolean empty = StrUtils.isEmpty(speakText);if (empty) {//执行播报speechUtils.startSpeak("请您输入要播报的内容");Toast.makeText(MainActivity.this, "请您输入要播报的内容", Toast.LENGTH_SHORT).show();return;} else {speechUtils.startSpeak(speakText);Toast.makeText(MainActivity.this, speakText, Toast.LENGTH_SHORT).show();}break;}}/*** 销毁*/@Overrideprotected void onDestroy() {super.onDestroy();//结束播报speechUtils.stopSpeak();}
}
真机调试
语音播报,本人应用多版本真机进行了测试,目前没有发现什么问题,欢迎大家来补充!
真机分别:红米手机、华为手机、华为平板、华为鸿蒙系统手机、vivo手机,以上机型实测有效。
真机版本如下:
今天拿朋友的Android 4、7小米平板真机调试,系统不支持中文播放
![](https://img-blog.csdnimg.cn/95ec9ecd34f6405d93b5cad878e3d7f2.jpeg)
![](https://img-blog.csdnimg.cn/08792570ec1640d6bf013a932fa732e7.jpeg)
结尾
欢迎各位老板光临寒舍,共同学习,留言探讨!
项目地址:Android 语音播报功能之项目实战