android 语音提醒,文字转语音播放
2018-08-20 22:59
846 查看
版权声明: https://blog.csdn.net/xu_coding/article/details/81879338
android本身具有文字转语音播放的TTS,一些第三方的sdk,想百度语音,科大讯飞语音等等都提供了文字转语音播放的功能,但这些第三方sdk大都收费,还挺贵的。
这里推荐两种方法:1、android自带的TTS,适合播放量比较大的文本。部分手机不支持中文播放。声音比较难听
2、MediaPlayer播放语音,就类似支付宝语音到账的提醒等,不适合播放大量的文本,声音可以定制,可以由声优的录音播放。
下面介绍一下两种播放的代码。 代码地址
第一种播放方式 TTS
public class MyTTS extends UtteranceProgressListener { private TextToSpeech tts; private boolean isSupportCN = true; private static MyTTS instance; public static MyTTS getInstance(Context context){ if(instance == null){ synchronized(MyTTS.class){ instance = new MyTTS(context.getApplicationContext()); } } return instance; } private MyTTS(final Context context){ tts = new TextToSpeech(context , new TextToSpeech.OnInitListener() { @Override public void onInit(int status) { if(status==TextToSpeech.SUCCESS){ int result = tts.setLanguage(Locale.CHINA); tts.setPitch(1.0f); tts.setSpeechRate(1.0f); tts.setOnUtteranceProgressListener(MyTTS.this); if(result == TextToSpeech.LANG_NOT_SUPPORTED || result ==TextToSpeech.LANG_MISSING_DATA){ isSupportCN = false; Toast.makeText(context,"抱歉,不支持中文播放",Toast.LENGTH_SHORT).show(); } } } }); } @Override public void onStart(String utteranceId) { Log.d("xulc","onStart---utteranceId--->"+utteranceId); } @Override public void onDone(String utteranceId) { Log.d("xulc","onDone---utteranceId--->"+utteranceId); } @Override public void onError(String utteranceId) { Log.d("xulc","onError---utteranceId--->"+utteranceId); } public TextToSpeech getTts() { return tts; } public boolean isSupportCN() { return isSupportCN; } }
第二种 Mediaplayer播放的方法
public class VoicePlayer { private ConcurrentLinkedQueue<VoiceUnit> voiceUnitList; private int index = 0; //播放的下标位置 private MediaPlayer mediaPlayer; private Context mcontext; private boolean isPlaying = false; private static VoicePlayer instance; public static VoicePlayer getInstance(Context context){ if(instance==null){ synchronized (VoicePlayer.class){ instance = new VoicePlayer(context.getApplicationContext()); } } return instance; } private VoicePlayer(Context context){ voiceUnitList = new ConcurrentLinkedQueue<>(); mcontext = context; } public void addVoiceUnit(VoiceUnit unit){ voiceUnitList.add(unit); } public void play(){ //调动播放 if(isPlaying){ //正在播放 }else{ isPlaying = true; playVoice(); } } private void playVoice(){ if(mediaPlayer==null){ mediaPlayer = new MediaPlayer(); } VoiceUnit voiceUnit = voiceUnitList.peek(); if(voiceUnit!=null) { //内容不为空,播放当前信息 if (index < voiceUnit.getVoices().length) { //当前信息未播放完成。播放下一条 final Uri uri = Uri.parse("android.resource://"+mcontext.getApplicationContext().getPackageName()+"/" +voiceUnitList.peek().getVoices()[index]); try { mediaPlayer.setDataSource(mcontext, uri); mediaPlayer.prepare(); mediaPlayer.start(); mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { Log.d("xulc", "播放了一个音频(index = ):"+index+" "+uri.getPath()); mediaPlayer.reset(); index++; playVoice(); } }); } catch (IOException e) { e.printStackTrace(); } }else{ //播放下一项 Log.d("xulvcheng","播放下一项...."); handler.postDelayed(new Runnable() { @Override public void run() { voiceUnitList.poll(); index = 0; playVoice(); } },2000); //确定是否会造成 内存泄漏 //200ms 读取下一条 } }else{ isPlaying = false; //播放完成 index = 0; Log.d("xulvcheng","播放完成的状态...."); } } private Handler handler = new MyHnadler(); private static class MyHnadler extends Handler {} public void destory(){ if (mediaPlayer != null) { mediaPlayer.stop(); mediaPlayer.release(); mediaPlayer = null; } if(handler!=null){ handler.removeCallbacksAndMessages(null); } } }阅读更多
相关文章推荐
- 微信5.2 for iPhone 全体验:新增图片墙、语音转文字,可搜索聊天记录,群聊被@会收到提醒
- android 轻松实现在线即时聊天【图片、语音、表情、文字】等!含源码!
- Android webview 播放视频、文字复制
- Android TTS 中文 文字转语音 使用TextToSpeech Svox
- Android语音录制和播放
- 【Android】媒体——利用MediaPlayer实现对讲语音播放
- Android进阶:Google自带语音播放功能实现
- js将文字转语音播放
- Android 文字转语音功能
- android 轻松实现在线即时聊天【图片、语音、表情、文字】等!含源码!
- 【android开发】实现语音数据实时采集/播放
- Android实现语音播放与录音功能
- Android-文件及字符流方式的语音保存播放功能
- Android--状态栏的图标和文字提醒/NotificationManager与Notification对象的应用
- Android中使用TTS(TextToSpeech)将文字转为语音
- 语音消息以及未读提醒连续播放
- Android仿微信语音录制和播放
- Android--状态栏的图标和文字提醒/NotificationManager与Notification对象的应用
- 客服小妹是如何泡到手的——C#定时提醒·语音录制·语音播放·文件转录Demo源码——倾情奉献!
- android语音录制与播放