科大讯飞语音
官网:https://www.xfyun.cn/
1注册,2登录,3创建应用,4下载SDK
导入jar包
同时将libs中的文件夹全都复制到自己创建的jniLibs目录中
出错的话,根据提示信息调错
权限设置
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
初始化
//初始化
SpeechUtility.createUtility(this, SpeechConstant.APPID+"=5ce3afbf");//填自己应用的APPID
MainActivity
package com.example.xfyun;
import android.os.IBinder;
import android.os.RemoteException;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import com.iflytek.cloud.RecognizerListener;
import com.iflytek.cloud.RecognizerResult;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechRecognizer;
import com.iflytek.cloud.SpeechUtility;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.LinkedHashMap;
public class MainActivity extends AppCompatActivity {
private TextView tv_content;
private HashMap<String,String> nIatResults=new LinkedHashMap<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化
SpeechUtility.createUtility(this, SpeechConstant.APPID+"=5ce3afbf");
tv_content=findViewById(R.id.textView_content);
}
public void startSpeechClick(View v){
//初始化识别无UI识别对象
//使用SpeechRecognizer对象,可根据回调消息自定义界面;
SpeechRecognizer mIat = SpeechRecognizer.createRecognizer(this, null);
//设置语法ID和 SUBJECT 为空,以免因之前有语法调用而设置了此参数;或直接清空所有参数,具体可参考 DEMO 的示例。
mIat.setParameter( SpeechConstant.DOMAIN, "iat" );//应用领域
//设置语音输入语言,zh_cn为简体中文
mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
//设置结果返回语言,普通话
mIat.setParameter(SpeechConstant.ACCENT, "mandarin");
mIat.setParameter(SpeechConstant.ENGINE_TYPE,SpeechConstant.TYPE_CLOUD);
//设置返回结果格式
mIat.setParameter(SpeechConstant.RESULT_TYPE,"json");
//设置语音前端点:静音超时时间,单位ms,即用户多长时间不说话则当做超时处理
//取值范围{1000~10000}
mIat.setParameter(SpeechConstant.VAD_BOS, "4000");
//设置语音后端点:后端点静音检测时间,单位ms,即用户停止说话多长时间内即认为不再输入,
//自动停止录音,范围{0~10000}
mIat.setParameter(SpeechConstant.VAD_EOS, "1000");
//设置标点符号,设置为"0"返回结果无标点,设置为"1"返回结果有标点
mIat.setParameter(SpeechConstant.ASR_PTT,"1");
//设置听写的动态修正
mIat.setParameter(SpeechConstant.ASR_DWA,"0");
//开始识别,并设置监听器
mIat.startListening(mRecoListener);
}
//听写监听器
private RecognizerListener mRecoListener=new RecognizerListener(){
//音量值0-30
@Override
public void onVolumeChanged(int i, byte[] bytes) {
}
//开始录音
@Override
public void onBeginOfSpeech() {
}
//结束录音
@Override
public void onEndOfSpeech() {
}
//返回结果
@Override
public void onResult(RecognizerResult recognizerResult, boolean b) {
System.out.println(recognizerResult.getResultString());
printResult(recognizerResult);
}
@Override
public void onError(SpeechError speechError) {
}
@Override
public void onEvent(int i, int i1, int i2, Bundle bundle) {
}
};
private void printResult(RecognizerResult results){
String text=JsonParser.parseGrammarResult(results.getResultString());
String sn=null;
//读取json结果中的sn字段
try {
JSONObject resultJson=new JSONObject(results.getResultString());
sn=resultJson.optString("sn");
} catch (JSONException e) {
e.printStackTrace();
}
nIatResults.put(sn,text);
StringBuffer resultBuffer=new StringBuffer();
for (String key:nIatResults.keySet()){
resultBuffer.append(nIatResults.get(key));
}
tv_content.setText(resultBuffer.toString());
}
}
语音合成
package com.example.xfyun;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechSynthesizer;
import com.iflytek.cloud.SpeechUtility;
import com.iflytek.cloud.SynthesizerListener;
public class Main2Activity extends AppCompatActivity {
private EditText editText_content;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
SpeechUtility.createUtility(this, SpeechConstant.APPID +"=5ce3afbf");
editText_content=findViewById(R.id.editText_content);
}
public void startClick(View view){
//创建SpeechSynthesizer
SpeechSynthesizer mTts=SpeechSynthesizer.createSynthesizer(this,null);
//合成参数
mTts.setParameter(SpeechConstant.VOICE_NAME,"xiaoyan");
mTts.setParameter(SpeechConstant.SPEED,"50");//语速
mTts.setParameter( SpeechConstant.VOLUME, "80");//音量
mTts.setParameter( SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD );
//保存路径
// mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH,"./sdcard/iflutek.pcm");
//合成
String content=editText_content.getText().toString();
mTts.startSpeaking(content,mSynListener);
}
//合成监听器
private SynthesizerListener mSynListener=new SynthesizerListener() {
@Override
public void onSpeakBegin() {
}
@Override
public void onBufferProgress(int i, int i1, int i2, String s) {
}
@Override
public void onSpeakPaused() {
}
@Override
public void onSpeakResumed() {
}
@Override
public void onSpeakProgress(int i, int i1, int i2) {
}
@Override
public void onCompleted(SpeechError speechError) {
}
@Override
public void onEvent(int i, int i1, int i2, Bundle bundle) {
}
};
}