讯飞语音识别
1.到http://www.xfyun.cn/?token=838b6419-6f9c-4644-a636-56785e709db8&account_id=3588587452 讯飞官网注册然后创建应用得到appid2.下载第一个语音识别的SDK 然后解压3.解压出来之后把assets和libs里面的都复
·
1.到http://www.xfyun.cn/?token=838b6419-6f9c-4644-a636-56785e709db8&account_id=3588587452 讯飞官网注册然后创建应用
得到appid
2.下载第一个语音识别的SDK 然后解压
3.解压出来之后把assets和libs里面的都复制到你的项目中
4.然后在导入一个json解析类到时候得到字符串用到解析 链接:https://pan.baidu.com/s/1geDouS7 密码:tlbf
5.当然还要在清单文件里面配置一哈 添加权限
<!--连接网络权限,用于执行云端语音能力 -->
<uses-permission android:name="android.permission.INTERNET"/>
<!--获取手机录音机使用权限,听写、识别、语义理解需要用到此权限 -->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<!--读取网络信息状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!--获取当前wifi状态 -->
<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.READ_CONTACTS"/>
<!--外存储写权限,构建语法需要用到此权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!--外存储读权限,构建语法需要用到此权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<!--配置权限,用来记录应用配置信息 -->
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<!--手机定位信息,用来为语义等功能提供定位,提供更精准的服务-->
<!--定位信息是敏感信息,可通过Setting.setLocationEnable(false)关闭定位请求 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!--如需使用人脸识别,还要添加:摄相头权限,拍照需要用到 -->
<uses-permission android:name="android.permission.CAMERA" />
6.在项目的build.gradle里面配置
sourceSets{
main{
jniLibs.srcDirs=['libs']
}
}
7.然后在主函数里面写代码
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import com.iflytek.cloud.ErrorCode;
import com.iflytek.cloud.InitListener;
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 com.iflytek.cloud.ui.RecognizerDialog;
import com.iflytek.cloud.ui.RecognizerDialogListener;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.LinkedHashMap;
public class MainActivity extends AppCompatActivity {
private TextView tv1;
private SpeechRecognizer speechRecognizer;
private RecognizerDialog recognizerDialog;
private HashMap<String, String> hashMap= new LinkedHashMap<String, String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv1=findViewById(R.id.tv1);
// 将“12345678”替换成您申请的APPID,申请地址:http://www.xfyun.cn
// 请勿在“=”与appid之间添加任何空字符或者转义符
SpeechUtility.createUtility(this, SpeechConstant.APPID + "=这里写你的APPID 等于号别删除");
// 初始化识别对象
speechRecognizer = SpeechRecognizer.createRecognizer(this,ini);
//创建语言识别对话框
recognizerDialog = new RecognizerDialog(this, ini);
// 缓存
getSharedPreferences(getPackageName(),MODE_PRIVATE);
}
private InitListener ini=new InitListener(){
@Override
public void onInit(int i) {
if(i!= ErrorCode.SUCCESS){
Toast.makeText(MainActivity.this, "初始化失败", Toast.LENGTH_SHORT).show();
}
}
};
public void cc(View view){
switch (view.getId()) {
case R.id.but1:
// 清空参数
speechRecognizer.setParameter(SpeechConstant.PARAMS, null);
// 设置听写引擎,在线引擎.
speechRecognizer.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);
// 设置返回结果格式
speechRecognizer.setParameter(SpeechConstant.RESULT_TYPE, "json");
// 设置语言
speechRecognizer.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
// 设置语言区域
speechRecognizer.setParameter(SpeechConstant.ACCENT, "mandarin");
// 设置语音前端点:静音超时时间,即用户多长时间不说话则当做超时处理
speechRecognizer.setParameter(SpeechConstant.VAD_BOS, "4000");
// 设置语音后端点:后端点静音检测时间,即用户停止说话多长时间内即认为不再输入, 自动停止录音
speechRecognizer.setParameter(SpeechConstant.VAD_EOS, "1000");
// 设置标点符号,设置为"0"返回结果无标点,设置为"1"返回结果有标点
speechRecognizer.setParameter(SpeechConstant.ASR_PTT, "1");
// //设置云端识别使用的语法id
// String grammarId = mSharedPreferences.getString("grammar_abnf_id", null);
// speechRecognizer.setParameter(SpeechConstant.CLOUD_GRAMMAR, grammarId);
// 设置音频保存路径,保存音频格式支持pcm、wav,设置路径为sd卡请注意WRITE_EXTERNAL_STORAGE权限
// 注:AUDIO_FORMAT参数语记需要更新版本才能生效
speechRecognizer.setParameter(SpeechConstant.AUDIO_FORMAT,"wav");
speechRecognizer.setParameter(SpeechConstant.ASR_AUDIO_PATH, Environment.getExternalStorageDirectory()+"/msc/asr.wav");
tv1.setText("");
recognizerDialog.setListener(new RecognizerDialogListener() {
//识别成功的时候回调
@Override
public void onResult(RecognizerResult recognizerResult, boolean b) {
printResult(recognizerResult);
}
//识别错误的时候回调
@Override
public void onError(SpeechError speechError) {
Toast.makeText(MainActivity.this, "识别失败", Toast.LENGTH_SHORT).show();
}
});
recognizerDialog.show();//这个别忘记了 不然录音对话框出不来
// //识别监听器
// speechRecognizer.startListening(new RecognizerListener() {
// @Override
// public void onVolumeChanged(int i, byte[] bytes) {
// Toast.makeText(MainActivity.this, "正在说话中,音量大小:"+i, Toast.LENGTH_SHORT).show();
// }
//
// @Override
// public void onBeginOfSpeech() {
// Toast.makeText(MainActivity.this, "开始说话", Toast.LENGTH_SHORT).show();
//
// }
//
// @Override
// public void onEndOfSpeech() {
// Toast.makeText(MainActivity.this, "说话结束", Toast.LENGTH_SHORT).show();
// }
//
// @Override
// public void onResult(RecognizerResult recognizerResult, boolean b) {
//
// }
//
// @Override
// public void onError(SpeechError speechError) {
//
// }
//
// @Override
// public void onEvent(int i, int i1, int i2, Bundle bundle) {
//
// }
// });
break;
case R.id.but2:
break;
}
}
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();
}
hashMap.put(sn, text);
StringBuffer resultBuffer = new StringBuffer();
for (String key : hashMap.keySet()) {
resultBuffer.append(mIatResults.get(key));
}
tv1.setText(resultBuffer.toString());
}
}
8.主布局
<LinearLayout
android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="comqq.example.hasee.myapplication.MainActivity">
<TextView
android:id="@+id/tv1"
android:layout_width="match_parent"
android:layout_height="400dp" />
<Button
android:id="@+id/but1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="cc"/>
<Button
android:id="@+id/but2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="cc"/>
</LinearLayout>
9.要是还想在写文字转语言的话 只要在第二个buttton点击事件里面写下面代码
case R.id.but2:
//实例化文字转语言对象
SpeechSynthesizer syn = SpeechSynthesizer.createSynthesizer(this, ini);
// 清空参数
syn.setParameter(SpeechConstant.PARAMS,null);
// 根据合成引擎设置相应参数
if(SpeechConstant.TYPE_CLOUD.equals(SpeechConstant.TYPE_CLOUD)){
syn.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);
//设置合成语速
syn.setParameter(SpeechConstant.SPEED, "50");
//设置合成音调
syn.setParameter(SpeechConstant.PITCH, "50");
//设置合成音量
syn.setParameter(SpeechConstant.VOLUME, "50");
}else {
syn.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_LOCAL);
// 设置本地合成发音人 voicer为空,默认通过语记界面指定发音人。
syn.setParameter(SpeechConstant.VOICE_NAME, "");
/**
* TODO 本地合成不设置语速、音调、音量,默认使用语记设置
* 开发者如需自定义参数,请参考在线合成参数设置
*/
}
//设置播放器音频流类型
syn.setParameter(SpeechConstant.STREAM_TYPE, "3");
// 设置播放合成音频打断音乐播放,默认为true
syn.setParameter(SpeechConstant.KEY_REQUEST_FOCUS, "true");
// 设置音频保存路径,保存音频格式支持pcm、wav,设置路径为sd卡请注意WRITE_EXTERNAL_STORAGE权限
// 注:AUDIO_FORMAT参数语记需要更新版本才能生效
syn.setParameter(SpeechConstant.AUDIO_FORMAT, "wav");
syn.setParameter(SpeechConstant.TTS_AUDIO_PATH, Environment.getExternalStorageDirectory()+"/msc/tts.wav");
//这个就是获取到tv1控件上面的文字然后转成语言
syn.startSpeaking(tv1.getText().toString(), 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) {
}
});
break;
更多推荐



所有评论(0)