android tts 语音合成

本文介绍如何在设备上配置并使用谷歌文字转语音引擎实现语音提醒功能。包括引擎安装、设置步骤及代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近公司需求 制作语音提醒功能,

确保设备上又合成语音的引擎  我用的是  谷歌文字转语音引擎-google_18489_20160603.apk

 

注意  有些设备可能已经默认设置完成,可以先使用demo测试一下,播报失败再进行设置

设置引擎的方法如下

1、安装 谷歌文字转语音引擎-google_18489_20160603.apk
2、对设备进行设置
    1)、设备联网
    2)、设置---->无障碍---->文字转语音(TTS)输出---->首选引擎(不是设置)---->选择Google文字转语音引擎---->返回  
    3)、选择引擎语言 --->使用系统语言。
    4)、点击  播放 是否有语音播放:有语音播放----设置成功,退出设置。

有些设备的  无障碍  会隐藏到设置的其他地方,请自行寻找,不要问,因为我也不知道,

相关代码. 

public class speckutils {
    private static TextToSpeech tts;
    private static HashMap<String, String> params;
    private static String mostRecentUtteranceID;
    public static void init(Context context){

        charmap.put("0", "零,");
        charmap.put("1", "一,");
        charmap.put("2", "二,");
        charmap.put("3", "三,");
        charmap.put("4", "四,");
        charmap.put("5", "五,");
        charmap.put("6", "六,");
        charmap.put("7", "七,");
        charmap.put("8", "八,");
        charmap.put("9", "九,");
        charmap.put("a", "A,");
        charmap.put("b", "B,");
        charmap.put("c", "C,");
        charmap.put("d", "D,");
        charmap.put("e", "E,");
        charmap.put("f", "F,");
        charmap.put("g", "G,");
        charmap.put("h", "H,");
        charmap.put("i", "I,");
        charmap.put("j", "J,");
        charmap.put("k", "K,");
        charmap.put("l", "L,");
        charmap.put("m", "M,");
        charmap.put("n", "N,");
        charmap.put("o", "O,");
        charmap.put("p", "P,");
        charmap.put("q", "Q,");
        charmap.put("r", "R,");
        charmap.put("s", "S,");
        charmap.put("t", "T,");
        charmap.put("u", "U,");
        charmap.put("v", "V,");
        charmap.put("w", "W,");
        charmap.put("x", "X,");
        charmap.put("y", "Y,");
        charmap.put("z", "Z,");

        // ------------使用Google 语音转换引擎----------------------
        //Initialize TTS
        tts = new TextToSpeech(context, new TextToSpeech.OnInitListener() {
            @Override
            public void onInit(int status) {
                //TTS初始化成功
                if (status == TextToSpeech.SUCCESS) {
                    if (tts.getEngines().size() <= 0) {
                        Log.i("Log", "请安装语音引擎");
                        return;
                    }

                    //默认语言为中文
                    int result = tts.setLanguage(Locale.CHINESE);
                    if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {

                        Log.i("Log", "不支持中文");
                        //转中文失败,转英语
                        tts.setLanguage(Locale.US);
                    }


                }
            }
        });

        //改变音调和速度来改变声音效果
        tts.setPitch(0.9f);
        tts.setSpeechRate(1.0f);

        //Set unique utterance ID for each utterance
        mostRecentUtteranceID = (new Random().nextInt() % 9999999) + "";

        //Set params
        //This method will work for more devices: API 19+
        params = new HashMap<>();
        params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, mostRecentUtteranceID);

        // ------------使用Google 语音转换引擎----------------------
    }
    /**
     * 将字符串中的数字转换为汉字
     *
     * @param text 要转换的字符串
     * @return 转换后的字符串
     */
    private static Map<String, String> charmap = new HashMap<>();

    public static String format(String text) {

        StringBuffer buffer = new StringBuffer();
        for (int i = 0; i < text.length(); i++) {

            if (charmap.get(text.charAt(i) + "") == null) {
                buffer.append(text.charAt(i) + "");
            } else {
                buffer.append(charmap.get(text.charAt(i) + ""));
            }

        }


        return buffer.toString();
    }

    /**
     * 语音合成
     *
     * @param string
     */
    public static void speckstr(String string) {

        if (tts != null && !tts.isSpeaking()) {

            int code = tts.speak(format(string), TextToSpeech.QUEUE_FLUSH, params);
            Log.i("Log", code + "==code");
            Log.i("Log", format(string) + "==format(string)");
        }

    }
    public static  void stopspeck(){
        tts.stop();
    }
}

使用  首先初始化 speckutils.init(this);

其次  speckutils.speckstr("text");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值