创建应用,下载SDK
开通语音合成地址
这里是免费的 500条/日 等到后面有一个免费提额 可以提到2w/日 开通你根据上面要你填写的你填写好啦,这个很简单就不多说了
注意
这个提醒一下注意事项,不然搞完了有一推问题
- 下面说的jar包和so文件是你要去下载的 每个人都不一样不要用别人的,否则会出现空指针问题。
- APPID那里也要注意书写正确,别删掉那个等号,否则也会出现空指针问题。
- 权限设置好,要注意动态的申请
Manifest.permission.RECORD_AUDIO
权限。
配置
将开通的时候 将科大讯飞的 jar包和jni的so文件 下载下来 集成在你的项目里面 操作如下
-
将Msc.jar和Sunflower.jar放入libs文件夹下。
-
在main文件夹下创建jniLibs文件夹,将剩余的arm64-v8a、armeabi、armeabi-v7a、mips、mips64、x86、x86_64放入其中;
使用
初始化放在你的项目中继承Application的文件里面
SpeechUtility.createUtility(APP.this, SpeechConstant.APPID + "= 你开通时获得APPID");
如果你在项目中不止一个地方调用这个语音吧 所以我这里做了一个工具类 也方便大家
TTSUtility.java
public class TTSUtility {
// 发音人
public final static String[] COLOUD_VOICERS_VALUE = {"xiaoyan", "xiaoyu", "catherine", "henry", "vimary", "vixy", "xiaoqi", "vixf", "xiaomei","xiaolin", "xiaorong", "xiaoqian", "xiaokun", "xiaoqiang", "vixying", "xiaoxin", "nannan", "vils",};
private static final String TAG = "TTSUtility";
// 语音合成对象
private static SpeechSynthesizer mTts;
//上下文
private Context mContext;
private volatile static TTSUtility instance;
/**
* 合成回掉监听
*/
private static SynthesizerListener mTtsListener = new SynthesizerListener() {
@Override
public void onSpeakBegin() {
Log.d(TAG, "开始播放");
}
@Override
public void onBufferProgress(int percent, int beginPos, int endPos, String info) {
// TODO 缓冲的进度
Log.d(TAG, "缓冲 : " + percent);
}
@Override
public void onSpeakPaused() {
Log.d(TAG, "暂停播放");
}
@Override
public void onSpeakResumed() {
Log.d(TAG, "继续播放");
}
@Override
public void onSpeakProgress(int percent, int beginPos, int endPos) {
// TODO 说话的进度
Log.d(TAG, "合成 : " + percent);
}
@Override
public void onCompleted(SpeechError error) {
if (error == null) {
Log.d(TAG, "播放完成");
} else if (error != null) {
Log.d(TAG, error.getPlainDescription(true));
}
}
@Override
public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {
}
};
/**
* 构造方法
*
* @param context 上下文
*/
private TTSUtility(Context context) {
mContext = context;
// 初始化合成对象
mTts = SpeechSynthesizer.createSynthesizer(mContext, new InitListener() {
@Override
public void onInit(int code) {
if (code != ErrorCode.SUCCESS) {
Log.d("zhs", "初始化失败,错误码:" + code);
}
Log.d("zhs", "初始化:" + code);
}
});
}
public static TTSUtility getInstance(Context context) {
if (instance == null) {
synchronized (TTSUtility.class) {
if (instance == null) {
instance = new TTSUtility(context);
}
}
}
return instance;
}
/**
* 停止语音播报
*/
public static void stopSpeaking() {
// 对象非空并且正在说话
if (null != mTts && mTts.isSpeaking()) {
// 停止说话
mTts.stopSpeaking();
}
}
/**
* 判断当前有没有说话
*
* @return
*/
public static boolean isSpeaking() {
if (null != mTts) {
return mTts.isSpeaking();
} else {
return false;
}
}
/**
* 开始合成
*
* @param text
*/
public void speaking(String text) {
if (TextUtils.isEmpty(text))
return;
int code = mTts.startSpeaking(text, mTtsListener);
Log.d("fjj", "-----" + code + "++++++++++");
if (code != ErrorCode.SUCCESS) {
if (code == ErrorCode.ERROR_COMPONENT_NOT_INSTALLED) {
Toast.makeText(mContext, "没有安装语音+ code = " + code, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(mContext, "语音合成失败,错误码: " + code, Toast.LENGTH_SHORT).show();
}
}
}
/**
* 参数设置
*
* @return
*/
private void setParam() {
// 清空参数
mTts.setParameter(SpeechConstant.PARAMS, null);
// 引擎类型 网络
mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);
// 设置发音人
mTts.setParameter(SpeechConstant.VOICE_NAME, COLOUD_VOICERS_VALUE[0]);
// 设置语速
mTts.setParameter(SpeechConstant.SPEED, "50");
// 设置音调
mTts.setParameter(SpeechConstant.PITCH, "50");
// 设置音量
mTts.setParameter(SpeechConstant.VOLUME, "100");
// 设置播放器音频流类型
mTts.setParameter(SpeechConstant.STREAM_TYPE, "3");
// mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, Environment.getExternalStorageDirectory() + "/KRobot/wavaudio.pcm");
// 背景音乐 1有 0 无
// mTts.setParameter("bgs", "1");
}
}
就这样 很简单 我也不搞胡里胡俏的 你自己接拿去用就好了
调用
在你需要的地方调用这个代码就ok了
TTSUtility.getInstance(getApplicationContext()).speaking("你好收款10元");
如果大哥们觉得小弟不错给我一个小赞,写的不多,紧张!!!