资讯 社区 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

接口及调用过程

简介

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);

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