tts 文本转语音 java_TTS(Text To Speech)文字转语音简单实现

TTS实现方案

实现TTS有大体上有两种方案:

1.使用系统内置的TTS

优点:集成简单,免费,google语音引擎对于外语支持友好,中文也还不错

缺点:扩展性相对来说低一点,只用于语音合成(文字转语音),需要设备安装语音引擎并在系统设置中设置默认

2.集成第三方的SDK如百度语音、讯飞语音等

优点:随应用一起部署,功能可扩展性强(语音合成,语音听写,唤醒词)

缺点:集成相对来说复杂,收费,国际化问题,国内的一些语音方案目前对于外语的支持并不是很好

系统内置TTS集成

1.安装语音引擎并在设置为默认TTS

原生Android系统自带了一个Pico TTS引擎,但不支持中文;国产手机大部分中默认装了讯飞TTS引擎

下载安装后,打开无障碍进行设置

6b66a1fb464d

设置

6b66a1fb464d

无障碍

6b66a1fb464d

TTS输出

2.代码中集成

这里提供一个工具类TtsManager.java,直接使用或参考

public class TtsManager {

private TtsManager() {

}

private static class SingletonHoler {

public static final TtsManager INSTANCE = new TtsManager();

}

public static TtsManager getInstance() {

return SingletonHoler.INSTANCE;

}

private TextToSpeech mSpeech;

private boolean mIsInited;

private UtteranceProgressListener mSpeedListener;

public void init() {

destory();

mSpeech = new TextToSpeech(MyApp.getInstance(), status -> {

if (status == TextToSpeech.SUCCESS) {

int result = mSpeech.setLanguage(Locale.getDefault());

// mSpeech.setPitch(1.0f); // 设置音调

// mSpeech.setSpeechRate(1.5f); // 设置语速

if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {

//语音合成初始化失败,不支持语种

mIsInited = false;

} else {

mIsInited = true;

}

mSpeech.setOnUtteranceProgressListener(new UtteranceProgressListener() {

@Override

public void onStart(String utteranceId) {

//======语音合成 Start

if (mSpeedListener != null)

mSpeedListener.onStart(utteranceId);

}

@Override

public void onDone(String utteranceId) {

//======语音合成 Done

if (mSpeedListener != null)

mSpeedListener.onDone(utteranceId);

}

@Override

public void onError(String utteranceId) {

//======语音合成 Error

if (mSpeedListener != null)

mSpeedListener.onError(utteranceId);

}

});

}

});

}

public void setSpeechListener(UtteranceProgressListener listener) {

this.mSpeedListener = listener;

}

public boolean speakText(String text) {

if (!mIsInited) {

//语音合成失败,未初始化成功

init();

return false;

}

if (mSpeech != null) {

int result = mSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, null, "");

return result == TextToSpeech.SUCCESS;

}

return false;

}

public void stop() {

if (mSpeech != null && mSpeech.isSpeaking()) {

mSpeech.stop();

}

}

public boolean isSpeaking() {

if (mSpeech == null)

return false;

return mSpeech.isSpeaking();

}

public void destory() {

if (mSpeech != null) {

mSpeech.stop();

mSpeech.shutdown();

}

}

}

使用

//在应用启动时初始化一次

TtsManager.getInstance().init();

//在需要使用的地方调用

TtsManager.getInstance().speakText("需要合成的内容");

第三方SDK集成

具体集成步骤请看其官网集成文档

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值