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

Android ASR SDK 集成合成****DEMO****中

(一) 简介:

本文针对遇见集成Android识别DEMO 有困难的用户,以android合成SDK作为示例,给出的步骤。
本文将集成ActivityRecog至官方android合成demo项目。
android合成demo,可以将文本合成为音频并且播放。
我们添加的功能为:识别成功后,将识别出来的文本,合成之后播放出来。
前提: 将官方demo的源代码通过android studio在android真机上运行起来并且测试成功。Demo暂不支持模拟器。
目标用户:Android初学者或者想立即集成的用户。

|

Android Studio

|

3.0.1

|

|

官方Demo

|

3.0.6

|

| | |

|

测试机型

|

OPPO R7 - ColorOS 1.4

Android 4.3

|

(二) 官网新建一个应用

从合成demo中,我们得知项目的包名是com.baidu.tts.sample,定义在build.gradle中。

在官网中新建一个应用,开通语音识别和语音合成能力。填写包名为com.baidu.tts.sample。也可以使用本文示例的应用,测试成功上线前替换。

efded1a55b58?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

efded1a55b58?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

修改合成demo的appId appKey secretKey,并且测试是否有效****。

efded1a55b58?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

(三) 复制 AndroidManifest.xml

从官方demo的AndroidManifest.xml中找到如下信息,然后复制到您自己的同名文件中。

此处需要您复制a)权限 b) 官网申请的应用信息 c) SDK的Service

efded1a55b58?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

紫色的请替换成您自己的申请的应用信息。

红色是您需要的添加的部分

(四) 识别初始化,复制识别jar库

在 ActivityRecog中可以发现如下初始化代码:

efded1a55b58?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

我们暂时不需要离线的,在SynthActivity中添加如下代码:

efded1a55b58?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

这个时候MyRecognizer类没有引用,识别的jar包也没有。

将识别的app\libs\bdasr_V3_20171108_9800a2a.jar复制到合成的同名目录。

复制缺少的JAVA类,解决编译问题

efded1a55b58?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

efded1a55b58?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

注意此时底层****SO****库还没有集成,开始识别的时候会发生报错。

(五) 集成,准备识别。

我们需要集成的逻辑是识别出文字后然后合成音频播放。

因此第一步是识别出文字,第二步在识别的成功的回调中播放音频。

先准备一个回调Listener:extends StatusRecogListener
  public class TtsRecogListener extends StatusRecogListener { private MySyntherizer synthesizer; private final static String TAG = "TtsRecogListener"; public TtsRecogListener(MySyntherizer synthesizer) { this.synthesizer = synthesizer;

} @Override public void onAsrFinalResult(String[] results, RecogResult recogResult) { super.onAsrFinalResult(results, recogResult);

String msg = "****识别成功:" + results[0];

Log.*i*(***TAG***, msg);

} @Override public void onAsrFinishError(int errorCode, int subErrorCode, String errorMessage, String descMessage, RecogResult recogResult) { super.onAsrFinishError(errorCode, subErrorCode, errorMessage, descMessage, recogResult);

String msg = "****错误码是:" + errorCode;

Log.i(TAG, msg);

}

}

还记得之前的IRecogListener listener = null;么?

efded1a55b58?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

把合成demo中的“使用说明”按钮复用下,改为”开始识别”按钮

efded1a55b58?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

我们看见识别demo中是这样开始识别的:myRecognizer.start(params);

efded1a55b58?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

点击“使用说明”按钮,会发现如下保存。(还记得底层so文件没有复制么?)

{"sub_error":5001,"error":5,"origin_result":{"sub_error":5001,"error":5,"sn":"","desc":"Can not load so library"},"desc":"Can not load so library"}

(六) 复制jni库的so文件

由于缺少so****文件,点击开始后,有如下报错:

:{"sub_error":5001,"error":5,"origin_result":{"sub_error":5001,"error":5,"sn":"","desc":"Can not load so library"},"desc":"Can not load so library"}

我们继续修改项目:

复制官方demo****中 app\src\main\jniLibs 至项目的同名目录,如果对android studio不熟悉,这一步可以在windows 资源管理器操作

由于原先合成demo项目已经有了5个架构目录,因此此时只要合并即可。

efded1a55b58?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

如果假设,合成demo项目有6个架构目录,然而合成只有5个,那么两者目录取交集,最终只留下同名的5个。如果假设,合成demo项目只有一个armeabi目录,那么删除识别项目额外的4个架构目录,最终只留下同名的armeabi目录。

(七) 测试识别及自定义参数:

启动app,正常情况可以看见

public void onAsrFinalResult(String[] results, RecogResult recogResult) { super.onAsrFinalResult(results, recogResult);

String msg = "****识别成功:****" + results[0];

Log.i(TAG, msg);

}

这个方法被执行。

打开demo,这里以“在线识别”界面为例。 进入界面后,点击“设置”按钮。

经过一轮测试,准备选择“保存音频文件”及VAD时长2000ms作为在线识别的参数。

efded1a55b58?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

点击开始录音后,可以看见如下输入参数:

efded1a55b58?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

这个json在logcat中也可以找到。

“vad.endpoint-timeout” 是定义在SpeechConstant中的常量。

项目中填写同样的参数,生成一样的json。

efded1a55b58?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

(八) 集成合成播放

我们修改下TtsRecogListener中的回调

efded1a55b58?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

正常的话,会听见合成的女声。

(九) 代码下载

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值