Android 文字转语音之TextToSpeech

时间:2025-01-31 07:07:41

        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 () {
            @Override
            public void onInit(int status) {
                if (status == ) {

                    (1.0f);//方法用来控制音调
                    (1.0f);//用来控制语速
                    //判断是否支持下面两种语言(英文/中文)
//                    int result1 = ();
                    int supported= (Locale.SIMPLIFIED_CHINESE);
                    if ((supported != TextToSpeech.LANG_AVAILABLE) && (supported!=TextToSpeech.LANG_COUNTRY_AVAILABLE)){
                        ("TTS", "不支持 zh-CN");
                    }else{
                        ("TTS", "支持 zh-CN");
                    }
                    mIsSupport = true;
                } else {
                    (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() {
                (context, data);
            }
        }).start();
    }

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

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

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

        List<> listEngine = ();
        for ( it:listEngine){
            ();
            // ("startTTS", );
        }
    }

3,释放资源

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

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