android TTS语音播放工具类

写了一个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));

    }

以上就是全部代码和使用方式,拿去吧

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值