文章目录

  • 前期准备
  • 运行官方demo
  • 自己项目中集成

前期准备

申请 key 和创建应用的步骤这里不再赘述,可以参考:在线合成Android-SDK介绍 官方文档

运行官方demo

1、下载 在线语音合成Android SDK

离线语音合成SDK只能免费使用 在线合成功能,纯离线和在线离线混合模式是需要收费的。所以我们直接使用 在线语音合成。

2、修改官方 demo 运行

打开 main/assets/auth.properties填入自己 appId、appKey、secretKey、applicationId。

修改 app/build.gradle中的 applicationId,改为自己的包名。

如果运行不了需要根据报错修改,可能需要修改:
1、local.properties 文件中
删掉 的 ndk.dir
修改 sdk.dir
2、修改 gradle-wrapper.properties 中 gradle 版本 和 整个项目的 build.gradle 的 gradle tools 版本,改成和自己项目相同的版本

整个项目的 build.gradle 的 repositories 改为和自己项目相同的仓库

运行程序,我们测试纯在线语音合成:

自己项目中集成

1、将官方 demo 中的 libs 文件夹下的 jar 包放入自己 libs 目录下
确保 build.gradle 中对这个 jar 包进行了引用

可以引入libs下所有的 jar

implementation fileTree(include: ['*.jar'], dir: 'libs')

或单独引入这个 jar

implementation files("libs/com.baidu.tts_2.6.2.2.20200629_44818d4.jar")

2、将 jinLibs中自己用到的架构文件复制到自己相应的文件夹中

例如我的 build.gradle 文件中只指定了两个 abi,我就只需要复制两个文件夹即可:

3、AndroidManifest.xml 中增加权限

 <uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

4、按照官方 demo 中的 MySyntherizer 进行修改,改为符合自己业务需求的工具类
例如我的项目中有一个试听音效的功能,我就把 MySyntherizer 复制过来增加了一个播放状态speakStatus 字段,实现了 SpeechSynthesizerListener 的方法,在播放开始和结束时改变这个字段,以便在用户重复点击播放按钮的时候进行判断,如果在播放中则提示用户“播放中,请等待试听结束”。

同学们使用时需要将类中的 BD_APP_KEY 、BD_APP_SECRET_KEY 、BD_APP_ID 改为自己申请的值。

/*** 该类是对SpeechSynthesizer的封装* 百度语音在线合成 工具类*/public class MySyntherizer implements SpeechSynthesizerListener {protected SpeechSynthesizer mSpeechSynthesizer;protected Context context;private static final String TAG = "MySyntherizer";private static volatile MySyntherizer instance = null;/*** 当前播放状态 0 未播放 或播放已结束 1 播放中*/private int speakStatus = 0;//修改为自己的 appId、appKey、secretKeyprivate static final String BD_APP_KEY = "nBrxIoewW0XFj2oqeqsiDdjpGTBubTMS";private static final String BD_APP_SECRET_KEY = "aVW3OkCqRDjxFtIPPnawykiGIjVKo0ic";private static final String BD_APP_ID = "9582183";public static MySyntherizer getInstance() {if (instance == null) {synchronized (MySyntherizer.class) {if (instance == null) {instance = new MySyntherizer();}}}return instance;}/*** 注意该方法需要在新线程中调用。且该线程不能结束。详细请参见NonBlockSyntherizer的实现** @return 是否初始化成功*/public boolean init(Context context) {this.context = context;mSpeechSynthesizer = SpeechSynthesizer.getInstance();mSpeechSynthesizer.setContext(context);mSpeechSynthesizer.setSpeechSynthesizerListener(this);mSpeechSynthesizer.setAppId(BD_APP_ID);mSpeechSynthesizer.setApiKey(BD_APP_KEY, BD_APP_SECRET_KEY);// 初始化tts 纯在线模式int result = mSpeechSynthesizer.initTts(TtsMode.ONLINE);if (result != 0) {Log.d(TAG, "【error】initTts 初始化失败 + errorCode:" + result);return false;}// 设置播放的音频流类型,具体参数和组合见AudioAttributes,https://source.android.google.cn/devices/audio/attributes// mSpeechSynthesizer.setAudioAttributes(AudioAttributes.USAGE_MEDIA,AudioAttributes.CONTENT_TYPE_MUSIC);return true;}/*** 合成并播放** @param text 小于1024 GBK字节,即512个汉字或者字母数字* @return =0表示成功*/public void speak(String text) {int result = mSpeechSynthesizer.speak(text);if (result != 0) {Log.i(TAG, "speak text:" + text + ";error,please look up error code =" + result + "in https://ai.baidu.com/ai-doc/SPEECH/qk844cpcs");}}/*** 合成并播放** @param text        小于1024 GBK字节,即512个汉字或者字母数字* @param utteranceId 用于listener的回调,默认"0"* @return =0表示成功*/public void speak(String text, String utteranceId) {int result = mSpeechSynthesizer.speak(text, utteranceId);if (result != 0) {Log.i(TAG, "speak text:" + text + ";error,please look up error code =" + result + "in https://ai.baidu.com/ai-doc/SPEECH/qk844cpcs");}}/*** 只合成不播放* 音频流保存为文件的方法可以参见官方demo SaveFileActivity及FileSaveListener** @param text 合成的文本* @return =0表示成功*/public void synthesize(String text) {int result = mSpeechSynthesizer.synthesize(text);if (result != 0) {Log.i(TAG, "speak text:" + text + ";error,please look up error code =" + result + "in https://ai.baidu.com/ai-doc/SPEECH/qk844cpcs");}}public void synthesize(String text, String utteranceId) {int result = mSpeechSynthesizer.synthesize(text, utteranceId);if (result != 0) {Log.i(TAG, "speak text:" + text + ";error,please look up error code =" + result + "in https://ai.baidu.com/ai-doc/SPEECH/qk844cpcs");}}/*** 批量播放*/public int batchSpeak(List<Pair<String, String>> texts) {List<SpeechSynthesizeBag> bags = new ArrayList<SpeechSynthesizeBag>();for (Pair<String, String> pair : texts) {SpeechSynthesizeBag speechSynthesizeBag = new SpeechSynthesizeBag();speechSynthesizeBag.setText(pair.first);if (pair.second != null) {speechSynthesizeBag.setUtteranceId(pair.second);}bags.add(speechSynthesizeBag);}return mSpeechSynthesizer.batchSpeak(bags);}public int speakStatus() {return speakStatus;}public int pause() {return mSpeechSynthesizer.pause();}public int resume() {return mSpeechSynthesizer.resume();}public int stop() {speakStatus = 0;return mSpeechSynthesizer.stop();}/*** 设置播放音量,默认已经是最大声音* 0.0f为最小音量,1.0f为最大音量** @param leftVolume  [0-1] 默认1.0f* @param rightVolume [0-1] 默认1.0f*/public void setStereoVolume(float leftVolume, float rightVolume) {mSpeechSynthesizer.setStereoVolume(leftVolume, rightVolume);}public void release() {mSpeechSynthesizer.stop();mSpeechSynthesizer.release();mSpeechSynthesizer = null;}//一些回调@Overridepublic void onSynthesizeStart(String s) {}@Overridepublic void onSynthesizeDataArrived(String s, byte[] bytes, int i, int i1) {}@Overridepublic void onSynthesizeFinish(String s) {}@Overridepublic void onSpeechStart(String s) {speakStatus = 1;}@Overridepublic void onSpeechProgressChanged(String s, int i) {}@Overridepublic void onSpeechFinish(String s) {speakStatus = 0;}@Overridepublic void onError(String s, SpeechError speechError) {}
}

5、初始化

在自己项目的 Application 中初始化

         //百度语音new Thread() {@Overridepublic void run() {MySyntherizer.getInstance().init(CommonApplication.this);}}.start();

6、使用

MySyntherizer.getInstance().speak("您有新订单,请及时处理");

Android 百度语音合成手把手教学相关推荐

  1. Android 百度语音合成 (含离线、在线、API合成方式,详细步骤+源码)

    百度语音合成 声明 前言 正文 一.创建项目 二.离线语音合成 1. 配置AndroidManifest.xml 2. 配置SDK 3. 离线SDK初始化 4. 导包 5. 运行 三.在线语音合成 - ...

  2. 百度语音合成 android,百度语音合成播放

    Android ASR SDK 集成合成****DEMO****中 (一) 简介: 本文针对遇见集成Android识别DEMO 有困难的用户,以android合成SDK作为示例,给出的步骤. 本文将集 ...

  3. android 百度语音合成接入和使用技巧

    参考网址: http://blog.csdn.net/fengyuzhengfan/article/details/45053177 顺便贴上讯飞的使用: https://www.baidu.com/ ...

  4. android通过百度语音合成实现文字转换成语音(TTS)详细教程?

    android实现百度语音合成 1.使用TextToSpeech朗读文字 2.百度语音合成 1.创建应用 1.在百度开发者平台实现注册,并进行实名认证 2.点击语音技术 3.点击创建应用 4.创建细节 ...

  5. Android 开发 框架系列 百度语音合成

    Android 开发 框架系列 百度语音合成 官方文档:http://ai.baidu.com/docs#/TTS-Android-SDK/6d5d6899 官方百度语音合成控制台:https://c ...

  6. 百度语音合成(Android简单实现)

    1 简介 百度开发文档 https://ai.baidu.com/docs#/TTS-Android-SDK/top 本文实现了1种离线语言合成和多种在线语音合成. 百度语音合成需要经过以下几个步骤, ...

  7. 百度语音合成(TTS) 在Android的使用方法

    百度语音合成(TTS) 在Android的使用方法 标签: android语音合成 2016-07-29 16:41 640人阅读 评论(2) 收藏 举报  分类: 语音识别 Android(3)  ...

  8. 文字转语音百度 android视频教程,【案例】免费文字转语音:运用百度语音合成智能朗读...

    价值成果 基于百度语音合成技术,可以解决用户制作语音难题,用户不需任何技术仅输入文字即可制作出个性化语音.适用于商场店铺广告促销配音.英语听力音频制作.有声朗读.影视配音.视频配音.课件文本配音等多种 ...

  9. 集成Android免费语音合成功能(在线、离线、离在线融合),有这一篇文章就够了(离线)

    原址 集成Android免费语音合成功能(在线.离线.离在线融合),有这一篇文章就够了(在线) 集成Android免费语音合成功能(在线.离线.离在线融合),有这一篇文章就够了(离在线融合)     ...

  10. 百度语音合成Rest API使用

    TIP:这是RestApi使用,实际在web使用中java SDK方式使用较好,本文为测试使用,包括maven搭建运行springmvc的所有代码,实际代码可直接跳到publicutil.java和s ...

最新文章

  1. JavaUtils - 文件操作
  2. .Net 中接口应用的知识点(排序)
  3. IP地址的分类——a,b,c 类是如何划分的
  4. 关于tomcat那些事情 - tomcat6.0 配置ip地址访问不用加端口和项目名
  5. JDK8 有关集合部分常用的语法
  6. python爬虫 图片验证码_python爬取验证码图片(待识别)
  7. kali 安装 google 浏览器
  8. vss备份,使用批处理,每次只能备份当前打开的项目,怎么才能备份所有的项目呢...
  9. Numpy的各种下标操作
  10. 统计学习方法——最小二乘法及其具体实现
  11. android 手写笔,微软 Surface Duo 安卓机手写笔功能曝光:自然体验,手势操作
  12. 错误解决方案:FATAL: Error inserting cmemk (/lib/modules/2.6.37/kernel/drivers/dsp/cmemk.ko): Bad address
  13. 打不开Eclipse,Eclipse闪退(已解决)
  14. php中import什么意思,Thinkphp中import的几个用法详细介绍
  15. 关于CMake的使用介绍
  16. PPT: 解决“很抱歉 powerpoint 无法读取“的问题
  17. mysql 的delete from 子查询限制
  18. 使用PLSQL远程连接Oracle
  19. 系统架构_软件架构风格概述
  20. 企业股权激励疑难问题的最全解答

热门文章

  1. 31道Java核心面试题(不会的都看过来啦)
  2. Java课程设计--飞翔的小鸟
  3. 制作QQ背景音乐链接
  4. c语言pwm调光实训报告心得体会,LED调光实验报告
  5. [视频教程]MAME画质优化hq3x
  6. ARM base instruction -- orr
  7. 空气质量等级c语言编程,关于SDS011模块(空气中pm2.5及pm10)单片机c程序实现(链接附源码)...
  8. 中职计算机vb听课记录,《高级语言程序设计VB》听课笔记:12
  9. 2015中国企业500强名单
  10. 边际递减,边际成本,边际收益,边际效益