public class MyTextToSpeech implements TextToSpeech.OnInitListener { /** * 语音 */ private TextToSpeech mTextToSpeech;//TTS对象 private ConcurrentLinkedQueue mBufferedMessages;//消息队列 private boolean mIsReady;//标识符 private Context context; private String text; public MyTextToSpeech(Context context, String text) { mBufferedMessages = new ConcurrentLinkedQueue();//实例化队列 mTextToSpeech = new TextToSpeech(context, this);//实例化TTS this.context = context; this.text = text; } @Override public void onInit(int status) { Log.i("TextToSpeechDemo", String.valueOf(status)); if (status == TextToSpeech.SUCCESS) { int result = this.mTextToSpeech.setLanguage(Locale.CHINA);//设置识别语音为中文 if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) { Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); long l[] = {100, 500, 100, 500}; vibrator.vibrate(l, -1); Toast.makeText(context, "数据丢失或不支持", Toast.LENGTH_SHORT).show(); } synchronized (this) { this.mIsReady = true;//设置标识符为true // for (String bufferedMessage : this.mBufferedMessages) { // speakText(bufferedMessage);//读语音 // } speakText(text);//读语音 this.mBufferedMessages.clear();//读完后清空队列 } } } //释放资源 public void release() { synchronized (this) { this.mTextToSpeech.shutdown(); this.mIsReady = false; } } //更新消息队列,或者读语音 public void notifyNewMessage(String lanaugh) { String message = lanaugh; synchronized (this) { if (this.mIsReady) { speakText(message); } else { this.mBufferedMessages.add(message); } } } //读语音处理 private void speakText(String message) { Log.i("BloodPressureBluetooth1", message); HashMap params = new HashMap(); params.put(TextToSpeech.Engine.KEY_PARAM_STREAM, "STREAM_NOTIFICATION");//设置播放类型(音频流类型) this.mTextToSpeech.speak(message, TextToSpeech.QUEUE_ADD, params);//将这个发音任务添加当前任务之后 this.mTextToSpeech.playSilence(100, TextToSpeech.QUEUE_ADD, params);//间隔多长时间 } }
Android 实现语音
最新推荐文章于 2023-12-06 14:28:56 发布