写了一个TTS播放语音的工具类,希望能帮助用的上的人。
直接上代码吧。
package com.XXX.utils;
import android.car.media.CarAudioAttribute;
import android.content.Context;
import android.media.AudioAttributes;
import android.media.AudioFocusRequest;
import android.os.Handler;
import android.speech.tts.TextToSpeech;
import java.util.HashMap;
import java.util.Locale;
import android.os.Handler;
import android.os.Looper;
import android.media.AudioManager;
import android.speech.tts.UtteranceProgressListener;
import android.util.Log;
/**
* @Created on 2022/12/1 9:34
* author : CrazyDong
* description :TTS语音播放类
*/
public class PlayerTtsHelp {
private static final String TAG = "PlayerTtsHelp";
private TextToSpeech textToSpeech;
private Handler handler;
private Context context;
private static final int TTS_INIT_DELAY = 3000;
private HashMap<String, String> map;
private int speechStatus = -1;
private AudioAttributes mFocus1Attribute;
private AudioFocusRequest mFocusRequest1;
private AudioManager mAudioManager;
public PlayerTtsHelp(Context context) {
this.context = context;
handler = new Handler(Looper.myLooper());
handler.post(ttsInitRunnable);
map = new HashMap<>();
map.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_NOTIFICATION));
map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "utterance");
mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
mFocus1Attribute = CarAudioAttribute.createPlayAudioAttributes(CarAudioAttribute.USAGE_ASSISTANCE_SUPER_TTS);
mFocusRequest1 = new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT)
.setAudioAttributes(mFocus1Attribute)
.setOnAudioFocusChangeListener(new AudioManager.OnAudioFocusChangeListener() {
@Override
public void onAudioFocusChange(int i) {
}
})
.build();
}
private final Runnable ttsInitRunnable = new Runnable() {
@Override
public void run() {
textToSpeech = new TextToSpeech(context.getApplicationContext(), ttsInitListener);
}
};
private final TextToSpeech.OnInitListener ttsInitListener = new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
Log.d(TAG, "TextToSpeech.OnInitListener : " + status);
speechStatus = status;
if (status == TextToSpeech.SUCCESS) {
// int result = textToSpeech.setLanguage(Locale.CHINA);
textToSpeech.setOnUtteranceProgressListener(new UtteranceProgressListener() {
@Override
public void onStart(String s) {
//开始播报
Log.d(TAG, "onStart == " + s);
}
@Override
public void onDone(String s) {
//完成播报
Log.d(TAG, "onDone == " + s);
//释放焦点
mAudioManager.abandonAudioFocusRequest(mFocusRequest1);
}
@Override
public void onError(String s) {
//播报出错
Log.d(TAG, "onError == " + s);
}
});
} else {
Log.e(TAG, "TextToSpeech.OnInitListener fail , will try in 3s later");
handler.postDelayed(ttsInitRunnable, TTS_INIT_DELAY);//初始化失败后,3S后再次初始化
}
}
};
//播放语音
public void playTTS(String str) {
Log.d(TAG, "playTTS == " + str + " speechStatus == " + speechStatus);
if (speechStatus == TextToSpeech.SUCCESS) {
if (textToSpeech.isSpeaking()) {
Log.d(TAG, "playTTS isSpeaking ");
textToSpeech.stop();
}
//申请焦点
int result = mAudioManager.requestAudioFocus(mFocusRequest1);
Log.d(TAG, "playTTS result == " + result);
textToSpeech.speak(str, TextToSpeech.QUEUE_FLUSH, map);
}
}
}
使用方式很简单
private PlayerTtsHelp playerTtsHelp;//语音TTS播放类
@Override
public void onCreate() {
super.onCreate();
LogUtils.d(TAG, "onCreate");
playerTtsHelp = new PlayerTtsHelp(this);
playerTtsHelp.playTTS(getString(R.string.test_tts));
}
以上就是全部代码和使用方式,拿去吧