基于Aispeech的智能对话APP(四)--外部TTS引擎以及语音播报,设置发音人,设置语速等功能

基于Aispeech的智能对话APP(四)--外部TTS引擎以及语音播报,设置发音人,设置语速等功能

  • 一.问题以及解决办法
  • 二.外部TTS引擎
    • 2.1 TTS引擎
    • 2.2 语音播报优先级
    • 2.3 停止播报
    • 2.4 设置TTS引擎
    • 2.5 设置发音人
    • 2.6 设置语速
    • 2.7 设置音量
    • 2.8 设置TTS播报的通道
    • 2.9 设备抢焦点
    • 2.10 设置TTS人设
    • 2.11 获取合成音信息
    • 2.12 设置TTS结束后延迟时间
  • 三.代码下载

本篇博文是我自己在学习Aispeech的过程中,分享我遇到的问题以及如何解决。在文章的最后我会上传其代码。感兴趣的小伙伴,请自行下载。

一.问题以及解决办法

首先还是分享下,我在实现本次功能时,遇到的问题。
报错:import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;

import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;

基于Aispeech的智能对话APP(四)--外部TTS引擎以及语音播报,设置发音人,设置语速等功能_第1张图片解决方法:

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

基于Aispeech的智能对话APP(四)--外部TTS引擎以及语音播报,设置发音人,设置语速等功能_第2张图片

二.外部TTS引擎

2.1 TTS引擎

如果使用第三方的TTS引擎,可以通过以下方法来将第三方TTS引擎注册到DDS中。

 public void setTTSListener() {
        try {
            DDS.getInstance().getAgent().getTTSEngine().setListener(new TTSEngine.Callback() {
                /**
                 * 开始合成时的回调
                 * @param ttsId 当前TTS的id, 对话过程中的播报ttsid默认为0,通过speak接口调用的播报,ttsid由speak接口指定。
                 */
                @Override
                public void beginning(String ttsId) {
                    Log.d(TAG, "TTS开始播报 ttsId = " + ttsId);
                }

                /**
                 * 合成的音频数据的回调,可能会返回多次,data长度为0表示音频结束
                 * @param data 音频数据
                 */
                @Override
                public void received(byte[] data) {
                    Log.d(TAG, "收到音频,此方法会回调多次,直至data为0,音频结束 data = " + data.length);
                }

                /**
                 * TTS播报完成的回调
                 * @param status 播报结束的状态。
                 *               正常播报结束为0
                 *               播报中途被打断结束为1
                 */
                @Override
                public void end(String ttsId, int status) {
                    Log.d(TAG, "TTS播报结束 status = " + status + ", ttsId = " + ttsId);
                }

                /**
                 * 合成过程中出现错误的回调
                 * @param error 错误信息
                 */
                @Override
                public void error(String error) {
                    Log.d(TAG, "出现错误," + error);
                }
            });
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

2.2 语音播报优先级

语音播报优先级代码:

public void speakTextWithPriorityOne() {

        try {
            DDS.getInstance().getAgent().getTTSEngine().speak("hello, nice to meet you", 1, "10001", AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK);
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

    public void speakTextWithPriorityTwo() {

        try {
            DDS.getInstance().getAgent().getTTSEngine().speak("人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。", 2, "10002", AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK);
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

    public void speakTextWithPriorityThree() {

        try {
            DDS.getInstance().getAgent().getTTSEngine().speak("用来研究人工智能的主要物质基础以及能够实现人工智能技术平台的机器就是计算机,人工智能的发展历史是和计算机科学技术的发展史联系在一起的。除了计算机科学以外,人工智能还涉及信息论、控制论、自动化、仿生学、生物学、心理学、数理逻辑、语言学、医学和哲学等多门学科。人工智能学科研究的主要内容包括:知识表示、自动推理和搜索方法、机器学习和知识获取、知识处理系统、自然语言理解、计算机视觉、智能机器人、自动程序设计等方面。", 3, "10003", AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK);
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }
    public void speakSSML() {
        //SSML播报
        String test1 = "\n" +
                "\n" +
                "    思必驰成立于2007年英国剑桥高新区,创始人均来自剑桥,2008年回国落户苏州。\n" +
                "    \n" +
                "     \n" +
                "        " +
                "是拥有人机对话技术,国际上极少数拥有自主产权、中英文综合语音技术(语音识别、语音合成、自然语言理解、智能交互决策、声纹识别、性别及年龄识别、情绪识别等)的公司之一,\n" +
                "     \n" +
                "     \n" +
                "    \n" +
                "    其语音识别、声纹识别、口语对话系统等技术曾经多次在美国国家标准局、美国国防部、国际研究机构评测中夺得冠军,\n" +
                "    \n" +
                "    \n" +
                "        代表了技术的国际前沿水平,\n" +
                "    \n" +
                "    \n" +
                "    \n" +
                "        被中国和英国政府评为高新技术企业。\n" +
                "    \n" +
                "    \n" +
                "";

        try {
            DDS.getInstance().getAgent().getTTSEngine().speak(test1, 1, "ssml");
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

2.3 停止播报

停止播报代码:

public void shupWithTTSId() {

        try {
            DDS.getInstance().getAgent().getTTSEngine().shutup("10001");
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }

    }

    public void shupWithZero() {
        try {
            DDS.getInstance().getAgent().getTTSEngine().shutup("0");
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

    public void shupWithNULL() {
        try {
            DDS.getInstance().getAgent().getTTSEngine().shutup("");
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

2.4 设置TTS引擎

设置TTS引擎代码:

public void setLocal() {

        try {
            DDS.getInstance().getAgent().getTTSEngine().setMode(TTSEngine.LOCAL);
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

    public void setCloud() {

        try {
            DDS.getInstance().getAgent().getTTSEngine().setMode(TTSEngine.CLOUD);
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

2.5 设置发音人

设置发音人代码:


    public void setSpeaker1() {

        try {
            DDS.getInstance().getAgent().getTTSEngine().setSpeaker("zhilingf");
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

    public void setSpeaker2() {

        try {
            DDS.getInstance().getAgent().getTTSEngine().setSpeaker("gdgm");
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

    public void setSpeaker3() {

        try {
            DDS.getInstance().getAgent().getTTSEngine().setSpeaker("feyinf");
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

    public void setSpeaker4() {
        try {
            DDS.getInstance().getAgent().getTTSEngine().setSpeaker("boy");
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

    public void setSpeaker5() {
        try {
            DDS.getInstance().getAgent().getTTSEngine().setSpeaker(null);
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

    public void setCustomSpeaker() {
        //设置发音人
        try {
            DDS.getInstance().getAgent().getTTSEngine().setSpeaker("geyou", "sdcard/geyoum_common_back_ce_local.v2.1.0.bin");
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

2.6 设置语速

设置语速代码:

 public void setSpeed() {

        try {
            DDS.getInstance().getAgent().getTTSEngine().setSpeed(0.8f);
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

    public void setSpeed1() {

        try {
            DDS.getInstance().getAgent().getTTSEngine().setSpeed(1.5f);
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

2.7 设置音量

设置音量代码:

public void setVolume() {
        try {
            DDS.getInstance().getAgent().getTTSEngine().setVolume(10);
            toMain();
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

    public void setVolume1() {
        try {
            DDS.getInstance().getAgent().getTTSEngine().setVolume(1);
            toMain();
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

    public void setVolume2() {
        try {
            DDS.getInstance().getAgent().getTTSEngine().setVolume(50);
            toMain();
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

2.8 设置TTS播报的通道

设置TTS播报的通道代码:

public void setStreamType() {
        try {
            DDS.getInstance().getAgent().getTTSEngine().setStreamType(AudioManager.STREAM_RING);
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

    public void setStreamType1() {
        try {
            DDS.getInstance().getAgent().getTTSEngine().setStreamType(AudioManager.STREAM_MUSIC);
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

    public void setStreamType2() {
        try {
            DDS.getInstance().getAgent().getTTSEngine().setStreamType(AudioManager.STREAM_ALARM);
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

2.9 设备抢焦点

设备抢焦点代码:

public void enableFocus() {
        try {
            DDS.getInstance().getAgent().getTTSEngine().enableFocus(true);
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

    public void disableFocus() {
        try {
            DDS.getInstance().getAgent().getTTSEngine().enableFocus(false);
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

2.10 设置TTS人设

设置TTS人设代码:

public void setStyle() {
        /**
         * 设置TTS人设
         * @param style 风格,humor:幽默;calm:沉稳;common:普通;简短:short;
         */
        try {
            DDS.getInstance().getAgent().getTTSEngine().setStyle("humor");
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

    public void removeStyle() {
        try {
            DDS.getInstance().getAgent().getTTSEngine().removeStyle();
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

2.11 获取合成音信息

获取合成音信息代码:

//返回String 当前使用的合成音类型,如:"zhilingf",获取失败返回null
    public void getSpeaker() {
        try {
            String speaker = DDS.getInstance().getAgent().getTTSEngine().getSpeaker();
            Log.d(TAG,"speaker:"+speaker);
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

    //返回float 当前合成音语速,返回值0.5-2.0,0.5语速最快,2.0语速最慢,获取失败返回 0
    public void getSpeed() {
        try {
            float speed = DDS.getInstance().getAgent().getTTSEngine().getSpeed();
            Log.d(TAG,"speed:"+speed);
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

    //返回int 当前合成音音量,返回值1-100,获取失败返回 0
    public void getVolume() {
        try {
            int volume = DDS.getInstance().getAgent().getTTSEngine().getVolume();
            Log.d(TAG,"volume:"+volume);
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

    //返回List 当前自定义播报音频的列表
    public void getCustomAudio() {
        try {
            List customAudio =  DDS.getInstance().getAgent().getTTSEngine().getCustomAudio();
            Log.d(TAG,"customAudio:"+customAudio);
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

2.12 设置TTS结束后延迟时间

设置TTS结束后延迟时间代码:

public void setPlayAfterTime() {

        //v1.2.3.1
        try {
            DDS.getInstance().getAgent().getTTSEngine().setPlayAfterTime(2000);
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

    public void setPlayAfterTime1() {

        //v1.2.3.1
        try {
            DDS.getInstance().getAgent().getTTSEngine().setPlayAfterTime(0);
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

三.代码下载

如果有问题无法解决或者对代码有兴趣的小伙伴,可以直接下载DUIdemo2.4.zip。

你可能感兴趣的:(基于Aispeech的智能对话APP(四)--外部TTS引擎以及语音播报,设置发音人,设置语速等功能)