我对Android可以说是完全零基础,因为老师要求做口语对话系统,所以开始从头一点点看。目前完成了一个非常简单界面很粗糙的语音识别Demo,因为网上现有的代码都太老了,或者问题很多,给像我这样的新手带来很大的困扰,所以决定写个从零开始的心得体会,大酒神不是有从零单排嘛,咱也来个从零单排(愚笨想不出好名来。。)先晒一下我最简单的代码,后续会贴出性能更好界面更完善的来。
利用科大讯飞语音包的话还是比较简单的,网上有个iflyDemo的例子,但是他用的MSC的jar包太老了,现在都不能使用,所以还是得自己去科大讯飞的官网上注册下载。
这里是网址:http://open.voicecloud.cn/
1.点开发入口后完成注册,注册完填一下个人信息,项目介绍什么的,它会给你一个appid,这个很有用必须要有。然后进sdk下载,android有两个包,都下下来。这次我们主要用的是Msc.jar包,就是那个较小的压缩文件。
2.解压缩后里面有个sample,那个就是个demo,但不能直接用打开全是错,估计就是做个示范教你怎么用的。还有一个apk文件下到adt中竟然是个闹铃、秒表的app,太坑爹了吧!比较有用的是doc下的开发手册,好好看看那个。
3.开发手册里写的很清楚怎么搭建自己的工程,并添加它给的jar包,还有插图,我就不赘述了
4.它的mscdemo中又很多java文件,因为它能实现语音识别,合成,语义理解等多种功能,我们这次只演示语音听写
5.先把一下内容添加到自己的Manifest.xml文件中
6.布局很简单,一个edittext框显示内容,一个button点击开始说话。main.xml如下
7.string也很简单,就几句话,要注意app_id填你自己的id
Hello World, MainActivity!
_iflyDemo
1234567
登录失败
9.activity代码如下
package barry.android.ifly.ui;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.text.TextUtils;
import com.iflytek.cloud.speech.RecognizerResult;
import com.iflytek.cloud.speech.SpeechError;
import com.iflytek.cloud.speech.SpeechListener;
import com.iflytek.cloud.speech.SpeechRecognizer;
import com.iflytek.cloud.speech.SpeechConstant;
import com.iflytek.cloud.speech.RecognizerListener;
import com.iflytek.cloud.speech.SpeechUser;
import barry.android.ifly.utils.JsonParser;
public class MainActivity extends Activity {
private Button startButton = null;
private SpeechRecognizer iatRecognizer;
//set engine,iat means dictation
private String engine="iat";
//set frequency,8000 or 16000
private String rate="16000";
//识别结果显示
private EditText mResultText = null;
// Tip
private Toast mToast;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mToast = Toast.makeText(this, "", Toast.LENGTH_LONG);
//用户登录
SpeechUser.getUser().login(MainActivity.this, null, null
, "appid=" + getString(R.string.app_id), listener);
mResultText = (EditText) findViewById(R.id.editText);
startButton = (Button) findViewById(R.id.button_start);
startButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showIatinvisble();
}
});
}
protected void showIatinvisble() {
iatRecognizer=SpeechRecognizer.createRecognizer(this);
//获取引擎参数
iatRecognizer.setParameter(SpeechConstant.DOMAIN, engine);
iatRecognizer.setParameter(SpeechConstant.SAMPLE_RATE, rate);
//clear myResulttext
mResultText.setText(null);
iatRecognizer.startListening(myrecognizerListener);
}
/*
* 识别回调监听
*/
private RecognizerListener myrecognizerListener=new RecognizerListener(){
@Override
public void onBeginOfSpeech() {
showTip("开始说话");
}
@Override
public void onError(SpeechError err) {
showTip(err.getPlainDescription(true));
}
@Override
public void onEndOfSpeech() {
showTip("结束说话");
}
//扩展
@Override
public void onEvent(int eventType, int arg1, int arg2, String msg) {
}
@Override
public void onResult(RecognizerResult results, boolean isLast) {
String text = JsonParser.parseIatResult(results.getResultString());
mResultText.append(text);
mResultText.setSelection(mResultText.length());
}
@Override
public void onVolumeChanged(int volume) {
showTip("当前正在说话,音量大小:" + volume);
}
};
/**
* 用户登录回调监听器.
*/
private SpeechListener listener = new SpeechListener(){
@Override
public void onData(byte[] arg0) {
}
@Override
public void onCompleted(SpeechError error) {
if(error != null) {
Toast.makeText(MainActivity.this, getString(R.string.text_login_fail)
, Toast.LENGTH_SHORT).show();
}
}
@Override
public void onEvent(int arg0, Bundle arg1) {
}
};
private void showTip(String str)
{
if(!TextUtils.isEmpty(str))
{
mToast.setText(str);
mToast.show();
}
}
}
10.效果图。识别效果不算好是程序太简陋的问题,相信完善后会不错的!
后续会贴出改进版,敬请关注。转载请注明出处:http://blog.csdn.net/monkeyduck 谢谢!