120 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package com.example.mangowalking.utils;
 | |
| 
 | |
| import android.annotation.SuppressLint;
 | |
| import android.content.Context;
 | |
| import android.speech.tts.TextToSpeech;
 | |
| import android.speech.tts.UtteranceProgressListener;
 | |
| 
 | |
| import java.util.Locale;
 | |
| 
 | |
| @SuppressLint("NewApi")
 | |
| public class SystemTTS extends UtteranceProgressListener implements TTS, TextToSpeech.OnUtteranceCompletedListener {
 | |
| 
 | |
|     private Context mContext;
 | |
|     private static SystemTTS singleton;
 | |
|     private TextToSpeech textToSpeech; // 系统语音播报类
 | |
|     private boolean isSuccess = true;
 | |
| 
 | |
|     ICallBack callBack = null;
 | |
| 
 | |
|     public static SystemTTS getInstance(Context context) {
 | |
|         if (singleton == null) {
 | |
|             synchronized (SystemTTS.class) {
 | |
|                 if (singleton == null) {
 | |
|                     singleton = new SystemTTS(context);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         return singleton;
 | |
|     }
 | |
| 
 | |
|     private SystemTTS(Context context) {
 | |
|         this.mContext = context.getApplicationContext();
 | |
|         textToSpeech = new TextToSpeech(mContext, new TextToSpeech.OnInitListener() {
 | |
|             @Override
 | |
|             public void onInit(int i) {
 | |
|                 //系统语音初始化成功
 | |
|                 if (i == TextToSpeech.SUCCESS) {
 | |
|                     int result = textToSpeech.setLanguage(Locale.CHINA);
 | |
|                     textToSpeech.setPitch(1.0f);// 设置音调,值越大声音越尖(女生),值越小则变成男声,1.0是常规
 | |
|                     textToSpeech.setSpeechRate(1.0f);
 | |
|                     textToSpeech.setOnUtteranceProgressListener(SystemTTS.this);
 | |
|                     textToSpeech.setOnUtteranceCompletedListener(SystemTTS.this);
 | |
|                     if (result == TextToSpeech.LANG_MISSING_DATA
 | |
|                             || result == TextToSpeech.LANG_NOT_SUPPORTED) {
 | |
|                         //系统不支持中文播报
 | |
|                         isSuccess = false;
 | |
|                     }
 | |
|                 }
 | |
| 
 | |
|             }
 | |
|         });
 | |
|     }
 | |
| 
 | |
|     @Override
 | |
|     public void onUtteranceCompleted(String utteranceId) {
 | |
| 
 | |
|     }
 | |
| 
 | |
|     @Override
 | |
|     public void onStart(String utteranceId) {
 | |
| 
 | |
|     }
 | |
| 
 | |
|     @Override
 | |
|     public void onDone(String utteranceId) {
 | |
| 
 | |
|     }
 | |
| 
 | |
|     @Override
 | |
|     public void onError(String utteranceId) {
 | |
| 
 | |
|     }
 | |
| 
 | |
|     @Override
 | |
|     public void init() {
 | |
| 
 | |
|     }
 | |
| 
 | |
|     @Override
 | |
|     public void playText(String playText) {
 | |
|         if(!isSuccess){
 | |
|             return;
 | |
|         }
 | |
|         if(textToSpeech != null)
 | |
|         {
 | |
|             textToSpeech.speak(playText,
 | |
|                     TextToSpeech.QUEUE_ADD,null,null);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override
 | |
|     public void stopSpeak() {
 | |
|         if(textToSpeech != null)
 | |
|         {
 | |
|             textToSpeech.stop();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override
 | |
|     public void destroy() {
 | |
|         stopSpeak();
 | |
|         if(textToSpeech != null)
 | |
|         {
 | |
|             textToSpeech.shutdown();
 | |
|         }
 | |
|         singleton = null;
 | |
|     }
 | |
| 
 | |
|     @Override
 | |
|     public boolean isPlaying() {
 | |
|         return textToSpeech.isSpeaking();
 | |
|     }
 | |
| 
 | |
| 
 | |
|     @Override
 | |
|     public void setCallback(ICallBack callback) {
 | |
|         callBack = callback;
 | |
|     }
 | |
| }
 |