最近在做一个项目,其中有一个功能是需要将文本转换成语音并播放出来。像那种语音来订单播报一样
好了,明确了需求那就开始着手做
第一步先去讯飞开放平台注册自己账号什么的-----https://www.xfyun.cn/
第二步,创建自己的应用,然后下载集成所需要的sdk开发包
第三步,开始集成android集成,导入sdk,加权限,初始化,混淆------https://doc.xfyun.cn/msc_android/index.html
(这个是下载所需要的sdk的jar包和jniLibs的位置)
然后开始写你的逻辑,我的是简单的一些功能,(就一个文字转语音,后期添加什么自己写逻辑)
上代码
/**
* 文字转声音
*/
private void textToVoice() {
//1.创建 SpeechSynthesizer 对象, 第二个参数: 本地合成时传 InitListener
SpeechSynthesizer mTts = SpeechSynthesizer.createSynthesizer(getActivity(), null);
//2.合成参数设置,详见《 MSC Reference Manual》 SpeechSynthesizer 类
//设置发音人(更多在线发音人,用户可参见 附录13.2
mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan"); //设置发音人
mTts.setParameter(SpeechConstant.SPEED, "50");//设置语速
mTts.setParameter(SpeechConstant.VOLUME, "100");//设置音量,范围 0~100
mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD); //设置云端
//设置合成音频保存位置(可自定义保存位置),保存在“./sdcard/iflytek.pcm”
//保存在 SD 卡需要在 AndroidManifest.xml 添加写 SD 卡权限
//仅支持保存为 pcm 和 wav 格式, 如果不需要保存合成音频,注释该行代码
mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, "./sdcard/iflytek.pcm");
//3.开始合成
mTts.startSpeaking(tvRefuseTxtovoice.getText().toString().trim(), mSynListener);
}
//合成监听器
private SynthesizerListener mSynListener = new SynthesizerListener() {
//会话结束回调接口,没有错误时, error为null
public void onCompleted(SpeechError error) {
Log.e("TAG", "合成监听器onCompleted----error------"+error);
}
//缓冲进度回调
//percent为缓冲进度0~100, beginPos为缓冲音频在文本中开始位置, endPos表示缓冲音频在
//文本中结束位置, info为附加信息。
public void onBufferProgress(int percent, int beginPos, int endPos, String info) {
}
//开始播放
public void onSpeakBegin() {
}
//暂停播放
public void onSpeakPaused() {
}
//播放进度回调
//percent为播放进度0~100,beginPos为播放音频在文本中开始位置, endPos表示播放音频在文
//本中结束位置.
public void onSpeakProgress(int percent, int beginPos, int endPos) {
}
//恢复播放回调接口
public void onSpeakResumed() {
}
//会话事件回调接口
public void onEvent(int arg0, int arg1, int arg2, Bundle arg3) {
}
};
这个是语音转文字
private void voiceToText() {
//1.创建RecognizerDialog对象
RecognizerDialog mDialog = new RecognizerDialog(this, new MyInitListener());
//2.设置accent、 language等参数
mDialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn");//中文
mDialog.setParameter(SpeechConstant.ACCENT, "mandarin");//普通话
//若要将UI控件用于语义理解,必须添加以下参数设置,设置之后onResult回调返回将是语义理解
//结果
// mDialog.setParameter("asr_sch", "1");
// mDialog.setParameter("nlp_version", "2.0");
//3.设置回调接口
mDialog.setListener(new MyRecognizerDialogListener());
//4.显示dialog,接收语音输入
mDialog.show();
}
class MyRecognizerDialogListener implements RecognizerDialogListener {
/**
* 返回的结果
*
* @param recognizerResult
* @param b 是否说话结束
*/
@Override
public void onResult(RecognizerResult recognizerResult, boolean b) {
String result = recognizerResult.getResultString();
printResult(recognizerResult);
Log.e("TAG", "result==" + result);
// Toast.makeText(MainActivity.this, "result=="+result, Toast.LENGTH_SHORT).show();
}
/**
* 出错的回调
*
* @param speechError
*/
@Override
public void onError(SpeechError speechError) {
}
}
class MyInitListener implements InitListener {
@Override
public void onInit(int i) {
if (i != ErrorCode.SUCCESS) {
Toast.makeText(MainActivity.this, "初始化失败了", Toast.LENGTH_SHORT).show();
}
}
}
private void printResult(RecognizerResult results) {
String text = JsonParser.parseIatResult(results.getResultString());
String sn = null;
// 读取json结果中的sn字段
try {
JSONObject resultJson = new JSONObject(results.getResultString());
sn = resultJson.optString("sn");
} catch (JSONException e) {
e.printStackTrace();
}
mIatResults.put(sn, text);
StringBuffer resultBuffer = new StringBuffer();
for (String key : mIatResults.keySet()) {
resultBuffer.append(mIatResults.get(key));
}
String reuslt = resultBuffer.toString().replace("。", "");
et_input.setText(reuslt);
et_input.setSelection(et_input.length());
}
以上就是简单的文字转语音,语音转文字
科大讯飞网址---https://www.xfyun.cn/