在线情感tts


1. 概述

随着语音合成技术的进步,一个有情感的声音,可以让车主感受有温度的语音交互。

思必驰在线情感tts已对外开放,支持的情感如下:

情感 芊芊(hqqiaf) 楚楚(chuxif)
中性
开心
难过 -
致歉 -
惊讶 - -
愤怒 - -
恐惧 - -
关心 - -
喜爱 - -

2. API说明

2.1 初始化

初始化引擎并实现 AITTSListener 回调接口,监听引擎合成和播报的状态。

AICloudTTSEngine mEngine = AICloudTTSEngine.createInstance();
mEngine.init(new AICloudTTSConfig.Builder()
                .setUseStopCallback(true) //设置是否在stop之后回调 onSpeechFinish ,默认是true 回调
                .setUseCache(false)
                .build(), 
new AIEmotionTTSListener(){
            @Override
            public void onInit(int status) {
                Log.d(TAG, "onInit()");
                if (status == AIConstant.OPT_SUCCESS) {
                    Log.i(Tag, "初始化成功!");
                } else {
                    Log.i(Tag, "初始化失败!");
                }
            }

            @Override
            public void onError(String utteranceId, AIError error) {
//                tip.setText("onError: "+utteranceId+","+error.toString());
                Log.e(TAG, "onError: " + utteranceId + "," + error.toString());
            }

            @Override
            public void onReady(String utteranceId) {
                Log.e(TAG, "onReady: " + utteranceId);
            }

            @Override
            public void onCompletion(String utteranceId) {
                Log.e(TAG, "onCompletion: " + utteranceId);
                tip.setText("播报完毕!");
            }

            @Override
            public void onProgress(int currentTime, int totalTime, boolean isRefTextTTSFinished) {
                Log.e(TAG, "onProgress: " + currentTime);
                showTip("当前:" + currentTime + "ms, 总计:" + totalTime + "ms, 可信度:" + isRefTextTTSFinished);
            }

            @Override
            public void onSynthesizeStart(String utteranceId) {
                // 子线程
                Log.d(TAG, "onSynthesizeStart: " + utteranceId);
            }

            @Override
            public void onSynthesizeDataArrived(String utteranceId, byte[] audioData) {
                // 子线程
                // mp3 音频数据,audioData.length 为 0 说明合成结束
                Log.d(TAG, "onSynthesizeDataArrived: " + utteranceId + " " + audioData.length);
            }

            @Override
            public void onSynthesizeFinish(String utteranceId) {
                // 子线程
                Log.d(TAG, "onSynthesizeFinish: " + utteranceId);
                tip.post(new Runnable() {
                    @Override
                    public void run() {
                        tip.setText("合成完成");
                    }
                });
            }

            @Override
            public void onEmotion(String emotion) {
                Log.d(TAG, "onEmotion() called with: emotion = [" + emotion + "]");
            }
        });
输入 输出
AICloudTTSConfig 初始化、合成、播放状态
AITTSListener 音频数据、播放音频

2.2 开始合成

构建引擎启动参数,并调用合成方法:

AICloudTTSIntent cloudTTSIntent = new AICloudTTSIntent();
cloudTTSIntent.setTextType("text");
cloudTTSIntent.setServer("https://tts.dui.ai/facade/runtime/v3/synthesize");//访问云端合成服务器地址,默认为该地址
cloudTTSIntent.setRealBack(true);//设置是否实时反馈,默认为实时反馈为true
cloudTTSIntent.setSpeed(1.0f);//设置语速
cloudTTSIntent.setAudioType(AIConstant.TTS_AUDIO_TYPE_MP3);//设置合成音频类型,默认为mp3
cloudTTSIntent.setMp3Quality(AIConstant.TTS_MP3_QUALITY_HIGH);//设置云端合成mp3码率,支持low和high,默认为low
cloudTTSIntent.setSampleRate(24000);
cloudTTSIntent.setEmotion("default") //中性:default 难过:sad 开心:happy 致歉:sorry
cloudTTSIntent.setSpeaker("hqqiaf");

mEngine.synthesize(content.getText().toString(), "1025",cloudTTSIntent);
输入 输出
text -
utteranceId -
AICloudTTSIntent 见初始化回调合成的音频数据

更多启动参数如下:

方法名 取值 说明 默认值
setServer url 设置请求地址,情感必须:https://tts.dui.ai/facade/runtime/v3/synthesize DEFAULT_CLOUD_TTS_SERVER
setSampleRate(int sampleRate) 16000、24000 设置采样率,情感必须24000 16000
setMp3Quality(String mp3Quality) low、high 设置音频质量,情感必须为high low
setAudioType(String audioType) mp3、wav、pcm、wav.alaw、opus 音频格式 mp3
setEmotion(String emotion) default、happy、sorry、sad 指定情感合成 为空,不启用情感,普通tts合成
setSpeed(float speed) (0.5,2] 设置语速(0.5表示语速快,2.0表示语速慢) 1
setPitchChange(String pitchChange) (-60,60] 设置语调 0
setVolume(int volume) (1,100] 设置音量(1表示音量小,100表示音量大) 50
setSpeaker(String speaker) 请参考发音人列表 设置发音人 zhilingf
setSaveAudioPath(String saveAudioPath) 音频路径 保存音频 不设置默认不保存
setRealBack(boolean realBack) true、false 设置是否实时反馈 true

2.3 开始播放

调用speak方法合成并播放,需要指定音频通道(其他参数同合成):

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    cloudTTSIntent.setAudioAttributes(new AudioAttributes.Builder()
                    .setUsage(AudioAttributes.USAGE_MEDIA)
                    .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                    .build());
} else {
   cloudTTSIntent.setStreamType(AudioManager.STREAM_MUSIC);//设置合成音播放的音频流,默认为音乐流
}

mEngine.speak(content.getText().toString(), "1025",cloudTTSIntent);

开发者需要区分speak与synthesize接口的区别:

  • synthesize,仅合成接口

  • speak,合成后,内部会创建播放器播放合成音频数据

2.4 停止合成

mEngine.stop()

2.5 暂停播放

mEngine.pause();

2.6 恢复播放

mEngine.resume();

2.7 销毁引擎

mEngine.release();

3. 错误码

4. 常见问题

results matching ""

    No results matching ""