Android使用讯飞实现语音转文本

Android Studio+讯飞实现语音转文本详细步骤

进入讯飞开放平台注册账号https://passport.xfyun.cn/register

注册完毕后登陆账号,点击右上角“控制台”选项,进入后创建一个应用:

创建完成后,点击右边的“SDK下载”:

添加自己想要的功能:

选择“语音听写”选项,当然如果你想要语音播报功能的话,可以一并下载“在线语音合成”:

选择SDK打包下载:

解压下载后的压缩包,将libs目录下的jar包放到Android Studio工程文件app/libs中:

由于本Demo中会用到json的东西,所以还得自己去网上下一个json的jar包,一并引进去(以及加入你在项目完善过程中所需要的jar包,我这里多余的是为了完成我除了语言转文本之外的功能):

这里需要注意的是!!你可以重新build一下gradle,但为了以防万一,可以现在gradle的配置文件中写明你添加的jar包以便编译:

改过后记得刷新一下:

之后在main目录下新建一个jniLibs目录,将 SDK中 libs 目录下的armeabi 拷进去,如下图所示:

讯飞为我们提供了一套语音听写时的UI,这个需要我们先将 SDK 资源包 assets 路径下的资源文件拷贝至 Android 工程asstes 目录下(没有的话自己新建,但是一般项目都是有的):

接下来开始添加代码,首先在AndroidManifest中添加一下权限(AndroidManifest在app/src/main目录下):

<!--连接网络权限,用于执行云端语音能力 -->
<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" />

<!--SD卡读写的权限(如果需要保存音频文件到本地的话)-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

然后开始编写或者在原有的基础上更改你的MainActivity:

下面我放一个比较官方的Demo代码

package zhaoq_qiang.xunfeidemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.iflytek.cloud.RecognizerResult;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechUtility;
import com.iflytek.cloud.ui.RecognizerDialog;
import com.iflytek.cloud.ui.RecognizerDialogListener;
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button btn_click;
private EditText mResultText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_click = (Button) findViewById(R.id.btn_click);
mResultText = ((EditText) findViewById(R.id.result));
SpeechUtility.createUtility(this, SpeechConstant.APPID + "= 此处需要填写你所申请的appId");
btn_click.setOnClickListener(this);
}
@Override
public void onClick(View v) {
btnVoice();
}
//TODO 开始说话:
private void btnVoice() {
RecognizerDialog dialog = new RecognizerDialog(this,null);
dialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
dialog.setParameter(SpeechConstant.ACCENT, "mandarin");
dialog.setListener(new RecognizerDialogListener() {
@Override
public void onResult(RecognizerResult recognizerResult, boolean b) {
printResult(recognizerResult);
}
@Override
public void onError(SpeechError speechError) {
}
});
dialog.show();
Toast.makeText(this, "请开始说话", Toast.LENGTH_SHORT).show();
}
//回调结果:
private void printResult(RecognizerResult results) {
String text = parseIatResult(results.getResultString());
// 自动填写地址
mResultText.append(text);
}
public static String parseIatResult(String json) {
StringBuffer ret = new StringBuffer();
try {
JSONTokener tokener = new JSONTokener(json);
JSONObject joResult = new JSONObject(tokener);
JSONArray words = joResult.getJSONArray("ws");
for (int i = 0; i &lt; words.length(); i++) {
// 转写结果词,默认使用第一个结果
JSONArray items = words.getJSONObject(i).getJSONArray("cw");
JSONObject obj = items.getJSONObject(0);
ret.append(obj.getString("w"));
}
} catch (Exception e) {
e.printStackTrace();
}
return ret.toString();
}
}

 

最后大概就是这个样子的(我对按钮等做了改动,所以看上去会不一样,最基础的只要在activity_main.xml文件里设置一个按钮(Button)和一个文本框(TextView)即可):

Android Studio之APP项目创建

AS新手入门(一)

在Android Studio下载安装完毕后,双击打开,此处需要注意的是,如果出现以下两个错误,可以这样处理:

  • unable to access android sdk add-on list

解决方法:在自己安装的目录下找到:bin\idea.properties用文本打开这个文件,在末尾添加一行disable.android.first.run=true

  • Your Android SDK is missing, out of date, or is missing templates. You can configure your SDK via Configure | Project Defaults | Project Structure | SDKs

解决方法:按以上选项打开Project Structure后填写你下载的SDK和JDK的路径(若是还没有下载,需要下载一下;若是版本未更新,用SDK Manager.exe更新一下)

如果你没有上述问题,就在开始界面选择“Start a new Android Studio project”

出现以下配置界面:

配置项目,确定各个名称和存放项目存放路径;                                    Application name:项目名称  Company Domain:公司域名                            Package name:app打包名称  project location:存放路径

接下来设定兼容的安卓的最小版本,这依情况而定,我这里设定为安卓4.0.3版本(如果不确定各个版本的区别,可以点击“help me choose”,在打开的窗口中介绍了各个安卓版本的功能)。

点击“Next”,初始化组件:

再次点击“Next”,进入选择项目的活动类型界面,这里有很多现成的模板可以使用,新手选择默认即可。

接下来设定活动名称,界面布局的名称,点击finish完成项目的创建:

创建完后,在项目名->app->src->main->res->layout下双击xml文件就是打开活动界面设计窗口了:

若出现以上报错,更改gradle.propertiesorg.gradle.jvmargs=-Xmx512m即可:

然后重新打开就没有问题了!可以去学习编写完善APP啦!