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引擎发送多个参数。前面展示了如何决定口语消息使用的音频流。在这种情况下,通知声音也使用相同的音频流。


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

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

  • 相关阅读:
    js当地天气调用
    js 3D旋转效果
    js 格林威治时间转正常格式并兼容ios
    vue中使用百度地图,悬浮窗搜索功能
    js 百度地图定位
    高德地图坐标与百度地图坐标相互转换
    js高德地图手机定位
    数据循环处理重组2
    数据循环处理重组1
    百度地图搜索框在弹框中不显示
  • 原文地址:https://www.cnblogs.com/liyuanjinglyj/p/4656553.html
Copyright © 2011-2022 走看看