相关介绍
概念介绍
语音合成是实现人机语音交互,建立一个有听和讲能力的交互系统所必需的关键技术。随着语音技术的发展,百度自主研发了语音合成系统(TTS),功能是接受用户发送的文本,生成语音发送给用户。
对本文中将提到的概念约定如下:
语音合成:将文本合成为语音,即声音文件。
合成引擎:将文本合成为语音的核心模块。
TTS:Text To Speech,即“从文本到语音”。
BDTTSClient:语音合成 SDK 简称,详见下条。
语音合成 SDK:即本开发包,文中简称为 BDTTSClient。BDTTSClient 是一个封装了网络收发、音频播放功能的语音合成解决方案。借助 BDTTSClient 可以快速地在应用程序中集成语音合成功能。
百度语音
合成方式
1.离在线语音合成
2.在线语音合成(本文使用方式)
应用场景
我们团队的应用场景是在推送消息后,需要播放推送消息。
准备事项
1.下载Android 平台 HTML5+ SDK 。
2.注册百度开发者,创建应用,开通服务,请参考集成指南。
3.下载在线语音合成SDK_Android版。
实现步骤
1.先导入5+SDK就不多说了,参考Android平台第三方插件开发指导。
2.添加BDTTSClient到工程(将开发包中的 libs 目录整体拷贝到工程目录,libs 目录包括了各平台的 SO 库,开发者视应用需要可以进行删减。galaxy_lite.jar 是百度 Android 公共基础库。)
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.READ_PHONE_STATE" />
4.集成java代码
import org.json.JSONArray;
import com.baidu.speechsynthesizer.SpeechSynthesizer;
import com.baidu.speechsynthesizer.SpeechSynthesizerListener;
import com.baidu.speechsynthesizer.publicutility.SpeechError;
import android.media.AudioManager;
import android.util.Log;
import io.dcloud.common.DHInterface.IWebview;
import io.dcloud.common.DHInterface.StandardFeature;
import io.dcloud.common.util.JSUtil;
public class baidutts extends StandardFeature implements SpeechSynthesizerListener{
private IWebview iwv ;
private String text;
private SpeechSynthesizer speechSynthesizer;
private static final String TAG = "zlz";
public void speak(IWebview pWebview, JSONArray array)
{
iwv = pWebview;
String CallBackID = array.optString(0);
JSONArray newArray = new JSONArray();
newArray.put(array.optString(1));
//前台传过来的文本信息
text = array.optString(1);
//Log.i(TAG, text);
initialTts();
JSUtil.execCallback(pWebview, CallBackID, newArray, JSUtil.OK, false);
}
//百度TTS初始化
private void initialTts() {
speechSynthesizer = new SpeechSynthesizer(iwv.getContext(),
"holder", this);
// 此处需要将setApiKey方法的两个参数替换为你在百度开发者中心注册应用所得到的apiKey和secretKey
speechSynthesizer.setApiKey("your-apiKey", "your-secretKey");
speechSynthesizer.setAudioStreamType(AudioManager.STREAM_MUSIC);
//setVolumeControlStream(AudioManager.STREAM_MUSIC);
new Thread(new Runnable() {
@Override
public void run() {
setParams();
int ret = speechSynthesizer.speak(text);
if (ret != 0) {
Log.i(TAG,"开始合成器失败" );
}
}
}).start();
}
private void setParams() {
speechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEAKER, "0");
speechSynthesizer.setParam(SpeechSynthesizer.PARAM_VOLUME, "5");
speechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEED, "5");
speechSynthesizer.setParam(SpeechSynthesizer.PARAM_PITCH, "5");
speechSynthesizer.setParam(SpeechSynthesizer.PARAM_AUDIO_ENCODE, SpeechSynthesizer.AUDIO_ENCODE_AMR);
speechSynthesizer.setParam(SpeechSynthesizer.PARAM_AUDIO_RATE, SpeechSynthesizer.AUDIO_BITRATE_AMR_15K85);
}
@Override
public void onBufferProgressChanged(SpeechSynthesizer arg0, int arg1) {}
@Override
public void onCancel(SpeechSynthesizer arg0) {}
@Override
public void onError(SpeechSynthesizer arg0, SpeechError arg1) {}
@Override
public void onNewDataArrive(SpeechSynthesizer arg0, byte[] arg1, boolean arg2) {}
@Override
public void onSpeechFinish(SpeechSynthesizer arg0) {}
@Override
public void onSpeechPause(SpeechSynthesizer arg0) {}
@Override
public void onSpeechProgressChanged(SpeechSynthesizer arg0, int arg1) {}
@Override
public void onSpeechResume(SpeechSynthesizer arg0) {}
@Override
public void onSpeechStart(SpeechSynthesizer arg0) {}
@Override
public void onStartWorking(SpeechSynthesizer arg0) {}
@Override
public void onSynthesizeFinish(SpeechSynthesizer arg0) {}
}
5.前台javascript代码
document.addEventListener( "plusready", function()
{
var _BARCODE = 'kxdPlugins',
B = window.plus.bridge;
var kxdPlugins =
{
// 声明异步返回方法
speak : function (Argus, successCallback, errorCallback )
{
var success = typeof successCallback !== 'function' ? null : function(args)
{
successCallback(args);
},
fail = typeof errorCallback !== 'function' ? null : function(code)
{
errorCallback(code);
};
callbackID = B.callbackId(success, fail);
// 通知Native层plugintest扩展插件运行”speak”方法
return B.exec(_BARCODE, "speak", [callbackID, Argus]);
}
};
window.plus.kxdPlugins = kxdPlugins;
}, true );
使用方式
和普通的API调用方式一样:plus.kxdPlugins.speak("这是语音播放的文字内容");
注意事项
1.在/assets/data/properties.xml中添加插件权限。
2.在/assets/apps/appid/www/manifest.json 中添加对应插件权限。
3.在/AndroidManifest.xml 文件中添加对应的百度语音合成权限。
8 个评论
要回复文章请先登录或注册
FullStack
小权
FYC
1***@qq.com
学习了
阿佳
半杯可乐 (作者)
thyiad