Android开发中用的根据文字使用Speech进行语音播报

前言

本篇文章主要讲解的有关Android开发中用的根据文字使用Speech进行语音播报,下面具体讲一下使用方法和注意事项。


文章目录

  • 前言
    • @[TOC](文章目录)
  • 一、添加语音权限
    • 1.在清单文件AndroidManifest.xml添加
  • 二、主要方法
    • 1.TextToSpeech的接口剖析
  • 三、使用方法
    • 1.主要使用步骤
    • 2.封装的工具类
  • 总结

下面主要讲解具体的使用方法

一、添加语音权限

1.在清单文件AndroidManifest.xml添加

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

二、主要方法

1.TextToSpeech的接口剖析

构造方法有三个:
TextToSpeech(Context context, OnInitListener listener)
TextToSpeech(Context context, OnInitListener listener, String engine)
TextToSpeech(Context context, OnInitListener listener, String engine,String packageName, boolean useFallback)
看代码我们用的是第三个

三、使用方法

1.主要使用步骤

1、新建一个类(内部类也是可以的),实现OnInitListener接口,重写onInit()方法,通常是判断TTS引擎初始化的状态:
 private class TTSListener implements OnInitListener {
        @Override
        public void onInit(int status) {
            // TODO Auto-generated method stub
            if (status == TextToSpeech.SUCCESS) {
                Log.i(TAG, "onInit: TTS引擎初始化成功");
            }
            else{
                Log.i(TAG, "onInit: TTS引擎初始化失败");
            }
        }
    }
 2、获取TTS引擎
    mSpeech = new TextToSpeech(MainActivity.this, new TTSListener());
    
 3、在使用的时候,如果有需要可以调整TTS引擎参数,包括上面说的语速,语调,语言等等(当然,当前不支持中文,使用的话,先下载上面提到的服务或者应用并安装,然后在“设置”--》“语音与输入”--》“文本转语音输出”--》选择你安装中文TTS就可以了)
	mSpeech.setLanguage(SharedData.languageList.get(choosedLanguage));
	mSpeech.setSpeechRate(SharedData.voice_speed);
	mSpeech.setPitch(SharedData.voice_pitch);

2.封装的工具类

public class SpeechUtils {
    private Context context;

    private static final String TAG = "SpeechUtils";
    private static volatile SpeechUtils singleton;

    private TextToSpeech textToSpeech; // TTS对象

    public static SpeechUtils getInstance(Context context) {
        if (singleton == null) {
            synchronized (SpeechUtils.class) {
                if (singleton == null) {
                    singleton = new SpeechUtils(context);
                }
            }
        }
        return singleton;//
    }


    public SpeechUtils(Context context) {
        this.context = context;
        speakText(null);
    }


    /**
     * 关闭 语音合成
     */
    public void shutdown() {
        if (textToSpeech != null) {
            textToSpeech.stop();
            textToSpeech.shutdown();
            textToSpeech = null;
        }//
    }


    /**
     * 第二个参数queueMode用于指定发音队列模式,两种模式选择
     * (1)TextToSpeech.QUEUE_FLUSH:该模式下在有新任务时候会清除当前语音任务,执行新的语音任务
     * (2)TextToSpeech.QUEUE_ADD:该模式下会把新的语音任务放到语音任务之后,
     *
     * @param text
     */
    public void speakText(String text) {
        if (textToSpeech == null) {
            textToSpeech = new TextToSpeech(context, new TextToSpeech.OnInitListener() {
                @Override
                public void onInit(int i) {
                    if (i == TextToSpeech.SUCCESS) {
                        int result = textToSpeech.setLanguage(Locale.CHINA);
                        textToSpeech.setPitch(1.0f);// 设置音调,值越大声音越尖(女生),值越小则变成男声,1.0是常规
                        textToSpeech.setSpeechRate(1.0f);
                    }
                }
            });
        }else {
            if (!TextUtils.isEmpty(text)) {
                textToSpeech.speak(text, TextToSpeech.QUEUE_ADD, null);
            }
        }
    }

}

总结

以上就是今天要讲的内容,本文仅仅简单介绍了Android中的Speech的使用,而Android提供了大量能使我们快速便捷地处理的函数和方法。

你可能感兴趣的:(android)