语音合成android代码,百度 TTS 语音合成-Android

参考百度语音合成demo,MiniActivity.java 抽离代码。

初始化

mSpeechSynthesizer放在Application 中,并在Activity调用,但是无法正常播放。先贴出关键代码

Application 初始化代码:

protected String appId = "15151421";

protected String appKey = "MxIQEHVeZg2222LNs3ygUYo1";

protected String secretKey = "t0F9gzpw1111AHkGdf8GM70zdOSnlrD";

private TtsMode ttsMode = TtsMode.ONLINE;

public SpeechSynthesizer mSpeechSynthesizer;

private void initTTs() {

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

boolean isSuccess;

// 日志更新在UI中,可以换成MessageListener,在logcat中查看日志

SpeechSynthesizerListener listener = new UiMessageListener(mainHandler);

// 1. 获取实例

mSpeechSynthesizer = SpeechSynthesizer.getInstance();

mSpeechSynthesizer.setContext(this);

// 2. 设置listener

mSpeechSynthesizer.setSpeechSynthesizerListener(listener);

// 3. 设置appId,appKey.secretKey

int result = mSpeechSynthesizer.setAppId(appId);

result = mSpeechSynthesizer.setApiKey(appKey, secretKey);

// 5. 以下setParam 参数选填。不填写则默认值生效

// 设置在线发声音人: 0 普通女声(默认) 1 普通男声 2 特别男声 3 情感男声 4 情感儿童声

mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEAKER, "0");

// 设置合成的音量,0-9 ,默认 5

mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_VOLUME, "9");

// 设置合成的语速,0-9 ,默认 5

mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEED, "5");

// 设置合成的语调,0-9 ,默认 5

mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_PITCH, "5");

mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_MIX_MODE, SpeechSynthesizer.MIX_MODE_DEFAULT);

// 该参数设置为TtsMode.MIX生效。即纯在线模式不生效。

// MIX_MODE_DEFAULT 默认 ,wifi状态下使用在线,非wifi离线。在线状态下,请求超时6s自动转离线

// MIX_MODE_HIGH_SPEED_SYNTHESIZE_WIFI wifi状态下使用在线,非wifi离线。在线状态下, 请求超时1.2s自动转离线

// MIX_MODE_HIGH_SPEED_NETWORK , 3G 4G wifi状态下使用在线,其它状态离线。在线状态下,请求超时1.2s自动转离线

// MIX_MODE_HIGH_SPEED_SYNTHESIZE, 2G 3G 4G wifi状态下使用在线,其它状态离线。在线状态下,请求超时1.2s自动转离线

mSpeechSynthesizer.setAudioStreamType(AudioManager.MODE_IN_CALL);

// x. 额外 : 自动so文件是否复制正确及上面设置的参数

Map params = new HashMap<>();

// 复制下上面的 mSpeechSynthesizer.setParam参数

// 上线时请删除AutoCheck的调用

InitConfig initConfig =  new InitConfig(appId, appKey, secretKey, ttsMode, params, listener);

AutoCheck.getInstance(this.getApplicationContext()).check(initConfig, new Handler() {

@Override

/**

* 开新线程检查,成功后回调

*/

public void handleMessage(Message msg) {

if (msg.what == 100) {

AutoCheck autoCheck = (AutoCheck) msg.obj;

synchronized (autoCheck) {

String message = autoCheck.obtainDebugMessage();

print(message);

}

}

}

});

// 6. 初始化

result = mSpeechSynthesizer.initTts(ttsMode);

checkResult(result,"initTts");

}

并在onCreate()中初始化。

并在Activity调用

private SpeechSynthesizer mSpeechSynthesizer;

application = MainApplication.getInstance();

mSpeechSynthesizer = application.mSpeechSynthesizer;

int result = mSpeechSynthesizer.speak(text);

调用正常,但是无法正常播放音频,求解。个人怀疑是UI阻塞,这个如何解决

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值