Android 文字转语音之TextToSpeech

        TextToSpeech简称 TTS,主要就是将所指定的文本转成不同语言音频输出。

        TTS engine依托于当前AndroidPlatform所支持的几种主要的语言:English、French、German、Italian和Spanish五大语言(暂时没有我们伟大的中文,至少Google的科学家们还没有把中文玩到炉火纯青的地步,先易后难也是理所当然。)TTS可以将文本随意的转换成以上任意五种语言的语音输出。与此同时,对于个别的语言版本将取决于不同的时区,例如:对于English,在TTS中可以分别输出美式和英式两种不同的版本(由此看出Google的做事风格真够细致,而正因为如此估计Google不加入中文的另外一种理由是中文的方言太多了)。

        系统自带的 TTS 功能是不支持中文的,想要支持中文的话,需要借助第三方引擎,比如常见的科大讯飞百度等。

1,初始化TTS

    // 初始化语音播报
    public static void initTTS(final Context context){
        //实例化自带语音对象
        textToSpeech = new TextToSpeech(context, new TextToSpeech.OnInitListener() {
            @Override
            public void onInit(int status) {
                if (status == textToSpeech.SUCCESS) {

                    textToSpeech.setPitch(1.0f);//方法用来控制音调
                    textToSpeech.setSpeechRate(1.0f);//用来控制语速
                    //判断是否支持下面两种语言(英文/中文)
//                    int result1 = textToSpeech.setLanguage(Locale.US);
                    int supported= textToSpeech.setLanguage(Locale.SIMPLIFIED_CHINESE);
                    if ((supported != TextToSpeech.LANG_AVAILABLE) && (supported!=TextToSpeech.LANG_COUNTRY_AVAILABLE)){
                        Log.e("TTS", "不支持 zh-CN");
                    }else{
                        Log.e("TTS", "支持 zh-CN");
                    }
                    mIsSupport = true;
                } else {
                    Toast.makeText(context, "语音不支持", Toast.LENGTH_SHORT).show();
                    mIsSupport = false;
                }

            }
        });
    }

2,播报语音

    // 开始播报语音
    public static void speakData(final Context context, final String data){
        new Thread(new Runnable() {
            @Override
            public void run() {
                TextToSpeechUtil.startTTS(context, data);
            }
        }).start();
    }

    // 播报文字
    private static void startTTS(Context context, String data){
        if (textToSpeech == null){
            Toast.makeText(context, "TTS未初始化", Toast.LENGTH_SHORT).show();
            return;
        }
        if (!mIsSupport){
            Toast.makeText(context, "语音不支持", Toast.LENGTH_SHORT).show();
            return;
        }
        if (data.isEmpty() || data=="") { // 不为空
            Toast.makeText(context, "播报内容为空", Toast.LENGTH_SHORT).show();
            return;
        }

//        //调用代码示例
//        // 语言,中文
//        textToSpeech.setLanguage(Locale.SIMPLIFIED_CHINESE);
//        // 设置音调,值越大声音越尖(女生),值越小则变成男声,1.0是常规
//        textToSpeech.setPitch(1.0f);
//        // 设置语速
//        textToSpeech.setSpeechRate(1.0f);

        //输入中文,若不支持的设备则不会读出来
        textToSpeech.speak(data, TextToSpeech.QUEUE_FLUSH,null);
        textToSpeech.getDefaultEngine();

        List<TextToSpeech.EngineInfo> listEngine = textToSpeech.getEngines();
        for (TextToSpeech.EngineInfo it:listEngine){
            textToSpeech.setEngineByPackageName(it.name);
            // Log.d("startTTS", it.name);
        }
    }

3,释放资源

    public static void releaseSpeech(){
        if (textToSpeech != null) {
            textToSpeech.stop(); // 不管是否正在朗读TTS都被打断
            textToSpeech.shutdown(); // 关闭,释放资源
        }
    }

讯飞引擎链接及提取码: sekr 

猜你喜欢

转载自blog.csdn.net/weixin_42602900/article/details/127297584