zoukankan      html  css  js  c++  java
  • Android文字转语音

    虽然视觉上的反馈通常是给用户提供信息最快的方式,但这要求用户把注意力设备上。当用户不能查看设备时,则需要一些其他通信的方法。Android提供了强大的文字转语音Text-to-Speech,TTS API。使开发者能够在应用中添加语音通知和其他语音反馈功能,而不要求用户看着屏幕。


    下面的代码展示了如何使用TTS API:

    public class TextToSpeechDemo implements TextToSpeech.OnInitListener {
        private final TextToSpeech mTextToSpeech;//TTS对象
        private final ConcurrentLinkedQueue<String> mBufferedMessages;//消息队列
        private Context mContext;
        private boolean mIsReady;//标识符


        public TextToSpeechDemo(Context context){
            this.mContext=context;//获取上下文
            this.mBufferedMessages=new ConcurrentLinkedQueue<String>();//实例化队列
            this.mTextToSpeech=new TextToSpeech(this.mContext,this);//实例化TTS
        }

    //初始化TTS引擎
        @Override
        public void onInit(int status) {
            Log.i("TextToSpeechDemo",String.valueOf(status));
            if(status==TextToSpeech.SUCCESS){
                int result = this.mTextToSpeech.setLanguage(Locale.CHINA);//设置识别语音为中文
                synchronized (this){
                    this.mIsReady=true;//设置标识符为true
                    for(String bufferedMessage : this.mBufferedMessages){
                        speakText(bufferedMessage);//读语音
                    }
                    this.mBufferedMessages.clear();//读完后清空队列
                }
            }
        }
    //释放资源
        public void release(){
            synchronized (this){
                this.mTextToSpeech.shutdown();
                this.mIsReady=false;
            }
        }

    //更新消息队列,或者读语音
        public void notifyNewMessage(String lanaugh){
            String message=lanaugh;
            synchronized (this){
                if(this.mIsReady){
                    speakText(message);
                }else{
                    this.mBufferedMessages.add(message);
                }
            }
        }

    //读语音处理
        private void speakText(String message){
            Log.i("liyuanjinglyj",message);
            HashMap<String,String> params=new HashMap<String,String >();
            params.put(TextToSpeech.Engine.KEY_PARAM_STREAM,"STREAM_NOTIFICATION");//设置播放类型(音频流类型)
            this.mTextToSpeech.speak(message, TextToSpeech.QUEUE_ADD, params);//将这个发音任务添加当前任务之后
            this.mTextToSpeech.playSilence(100,TextToSpeech.QUEUE_ADD,params);//间隔多长时间
        }
    }

       当然一般手机是不支持中文的可以百度下载讯飞TTS引擎后在测试。见最后附图。


    由于TTS引擎的初始化是异步的,所以在执行实际的文字转语音之前需要把消息放到队列中。


    可以给TTS引擎发送多个参数。前面展示了如何决定口语消息使用的音频流。在这种情况下,通知声音也使用相同的音频流。


    最后,如果处理连续多个消息,最好在每个消息结束后暂停一会在播放下一个消息。这样做会清楚的告诉用户消息的结束和开始。

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    MQTT协议的简单介绍和服务器的安装
    Scrollview 嵌套 RecyclerView 及在Android 5.1版本滑动时 惯性消失问题
    gradle 命令
    git 命令学习
    PHP、JAVA、C#、Object-C 通用的DES加密
    JS中树形对象与数组之间的相互转换
    Javascript中的类型转换
    Javascript中的基本数据类型,如何判断数据类型,作用域链的理解
    前端面试题集锦(二)之CSS部分
    前端面试题集锦(一)之HTML部分
  • 原文地址:https://www.cnblogs.com/liyuanjinglyj/p/4656553.html
Copyright © 2011-2022 走看看