开放能力
开发平台
行业应用
生态合作
开发与教学
资讯 社区 控制台
技术能力
语音技术
图像技术
文字识别
人脸与人体识别
视频技术
AR与VR
自然语言处理
知识图谱
数据智能
场景方案
部署方案
行业应用
智能教育
智能医疗
智能零售
智能工业
企业服务
智能政务
智能农业
信息服务
智能园区
智能硬件
语音技术

    接口及调用过程

    简介

    DEMO在SDK的基础上,封装了调用逻辑,您可以直接使用SDK,或者使用DEMO封装好SDK接口的类。也可以对比参考DEMO中对SDK的调用封装。

    使用SDK方式的话,比较底层,开发者需要自行实现一部分逻辑。

    • SDK方式调用请参考MiniActivity
    • DEMO方式调用请参考SynthActivity

    本文仅描述SDK的调用方式。

    初始化

    获取 SpeechSynthesizer 实例

    SpeechSynthesizer mSpeechSynthesizer = SpeechSynthesizer.getInstance();

    SpeechSynthesizer.getInstance(); 建议每次只使用一个实例。release方法调用后,可以使用第二个。

    设置当前的Context

    mSpeechSynthesizer.setContext(this); // this 是Context的之类,如Activity

    注意 setContext只要在SpeechSynthesizer.getInstance();设置一次即可,不必切换Context时重复设置。

    设置合成结果的回调

    如合成成功后,SDK会调用用户设置的SpeechSynthesizerListener 里的回调方法

    mSpeechSynthesizer.setSpeechSynthesizerListener(listener); //listener是SpeechSynthesizerListener 的实现类,需要实现您自己的业务逻辑。SDK合成后会对这个类的方法进行回调。

    设置 App Id和 App Key 及 App Secret

    在语音官网或者百度云网站上申请语音合成的应用后,会有appId、appKey、appSecret及android包名 4个鉴权信息

    mSpeechSynthesizer.setAppId("8535996"/*这里只是为了让Demo运行使用的APPID,请替换成自己的id。*/);
    mSpeechSynthesizer.setApiKey("MxPpf3nF5QX0pnd******cB",         "7226e84664474aa09********b2aa434"/*这里只是为了让Demo正常运行使用APIKey,请替换成自己的APIKey*/);
    
    
    
    ### 设置合成参数
    
    具体参数请参见 “输入参数和输出回调”一节
    
    可以在初始化设置,也可以在合成前设置。
    示例:
    
    ```java
    mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEAKER, "0"); // 设置发声的人声音,在线生效

    初始化合成引擎

    设置合成的参数后,需要调用此方法初始化

    mSpeechSynthesizer.initTts(TtsMode.ONLINE); // 初始化在线模式

    控制接口

    合成及播放接口

    如果需要合成后立即播放的请调用speak方法,如果只需要合成请调用synthesize方法。

    该接口线程安全,可以快速多次调用。内部采用排队策略,调用后将自动加入队列,SDK会按照队列的顺序进行合成及播放。

    注意需要合成的每个文本text不超过120的GBK字节,即60个汉字或英文字母数字。超过请自行按照句号问号等标点切分,调用多次合成接口。

    返回结果不为0,表示出错。错误码请参见“错误码及解决方法”一节

    speak方法示例:

     int speak(String text);
     int speak(String text, String utteranceId); // utteranceId在SpeechSynthesizerListener 相关事件方法中回调
    
    speechSynthesizer.speak("百度一下");

    synthesize方法示例:

    int synthesize(String text);
    int synthesize(String text, String utteranceId); // utteranceId在SpeechSynthesizerListener 相关事件方法中回调
    
    speechSynthesizer.synthesize("百度一下");

    调用这两个方法后,SDK会回调SpeechSynthesizerListener中的onSynthesizeDataArrived方法。 音频数据在byte[] audioData参数中,采样率16K 16bits编码 单声道。连续将audioData写入一个文件,即可作为一个可以播放的pcm文件(采样率16K 16bits编码 单声道)。

    批量合成并播放接口

    效果同连续调用speak 方法。推荐连续调用speak方法,sdk内部有队列缓冲。

    该接口可以批量传入多个文本并进行排队合成并播放(如果没有设置utteranceId,则使用list的索引值作为utteranceId)。

    注意需要合成的每个文本text不超过120的GBK字节,即60个汉字或英文字母数字。超过请自行按照句号问号等标点切分,放入多个SpeechSynthesizeBag

    int batchSpeak(java.util.List<SpeechSynthesizeBag> speechSynthesizeBags)

    以下为批量调用示例

    List<SpeechSynthesizeBag> bags = new ArrayList<SpeechSynthesizeBag>();
    bags.add(getSpeechSynthesizeBag("123456", "0"));
    bags.add(getSpeechSynthesizeBag("你好", "1"));
    bags.add(getSpeechSynthesizeBag("使用百度语音合成SDK", "2"));
    bags.add(getSpeechSynthesizeBag("hello", "3"));
    bags.add(getSpeechSynthesizeBag("这是一个demo工程", "4"));
    int result = mSpeechSynthesizer.batchSpeak(bags);
     
     private SpeechSynthesizeBag getSpeechSynthesizeBag(String text, String utteranceId) {
            SpeechSynthesizeBag speechSynthesizeBag = new SpeechSynthesizeBag();
            //需要合成的文本text的长度不能超过120个GBK字节。
            speechSynthesizeBag.setText(text);
            speechSynthesizeBag.setUtteranceId(utteranceId);
            return speechSynthesizeBag;
        }
     

    返回结果不为0,表示出错。错误码请参见“错误码及解决方法”一节

    播放过程中的暂停及继续

    仅speak方法调用后有效。可以使用pause暂停当前的播放。pause暂停后,可使用resume进行播放。

    int result = mSpeechSynthesizer.pause();
    int result = mSpeechSynthesizer.resume();

    返回结果不为0,表示出错。错误码请参见“错误码及解决方法”一节

    停止合成并停止播放

    取消当前的合成。并停止播放。

    int result = mSpeechSynthesizer.stop();

    返回结果不为0,表示出错。错误码请参见“错误码及解决方法”一节

    其它接口

    打开调试日志(重要)

    LoggerProxy.printable(true); // 日志打印在logcat中

    开启成功后会看见bdtts-开头的tag日志,建议上线后完全没问题再由服务端控制关闭。

    释放资源

    不再使用后,请释放资源,并将mSpeechSynthesizer设为null。如果需要再次使用,可以通过SpeechSynthesizer.getInstance() 获取,并重复上述流程。

    int result = mSpeechSynthesizer.release();

    返回结果不为0,表示出错。错误码请参见“错误码及解决方法”一节

    设置音量

    该接口用来设置播放器的音量,即使用speak 播放音量时生效。范围为[0.0f-1.0f]。

    int result = mSpeechSynthesizer.setStereoVolume (leftVolume, rightVolume);

    此接口与PARAM_VOLUME参数的设置不同,PARAM_VOLUME设置的是服务器合成音频时的音量,而该接口设置的是播放时Android系统的音量。

    返回结果不为0,表示出错。错误码请参见“错误码及解决方法”一节

    音频流类型

       public int setAudioAttributes(int usage, int contentType)

    该接口用来设置播放器的音频流类型,默认值为AudioAttributes.USAGE_MEDIA, AudioAttributes.CONTENT_TYPE_MUSIC,指的是用与音乐播放的音频流。

    具体可以参考android官方文档 https://source.android.google.cn/devices/audio/attributes

    授权检验接口(测试使用,上线可以忽略)

    一般情况下,不需要使用该方法。

    测试您的AppId,AppKey AppSecret填写正确,语音合成服务是否开通。

    mSpeechSynthesizer.auth(TtsMode.ONLINE);  // 纯在线

    SpeechSynthesizerListener回调方法

     // @param engineType  0:音频数据由在线引擎(百度服务器)合成。
    
     void onSynthesizeDataArrived(String utteranceId, byte[] bytes, int progress, int engineType);

    其它回调方法请参见 “输入参数和输出回调”一节

    上一篇
    集成指南
    下一篇
    输入参数和输出回调