目前,越來越多的app已經使用到了語音技術,無論是語音合成,語音識别,還是語義等,有時,為app增加語音技術,就可能為自己多增加一份市場使用者,這裡就科大訊飛的語音識别的代碼調用做個介紹。
科大訊飛的語音服務是以SDK的形式提供的,就android平台來說,有三個SDK,現在以其中的彈出dialog的SDK為例。SDK在官網( http://open.voicecloud.cn/ )下載下傳,解壓之後有幾個檔案夾,分别如下:
使用科大訊飛的語音技術實作語音識别 1 bin檔案夾下面的是SpeechDemo.apk,可以直接安裝到手機上體驗
2 doc檔案夾下面是開發文檔,有主要的接口描述和參數介紹
3 自己開發的話,需要引入一個jar包和一個so庫,lib檔案夾下面就是你的appid對應的so庫和jar包
4 sample裡面是一個工程,可以直接導入到eclipse裡面,裡面是主要接口的使用示例,run之後,也就是bin下面的SpeechDemo了
好了,廢話不多說,直接建一個自己的工程,開始試一下使用這個服務吧!
建立一個工程,裡面本身就有一個MainActivity和activity_main.xml,修改一下布局檔案,添加一個按鈕:
<Button
android:id="@+id/startRecognizer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="startRecognizer"/>
<TextView
android:id="@+id/result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="result:"
android:layout_below="@id/startRecognizer" /> |
android上有三個sdk,分别有三個功能,三個sdk的差別參見 http://club.voicecloud.cn/forum.php?mod=viewthread&tid=6843
現在就以有界面的SDk為例,使用時,需要用到的是開發包中的msc.jar和libmsc.so,将libms.so放到工程中的libsarmeabi檔案夾下(根據cpu型号選擇放哪個庫),将msc.jar放到工程中的libs檔案夾下。
在MainActivity中添加按鈕的點選事件,具體代碼如下:
package com.personal.iflytekdemo;
import com.iflytek.cloud.speech.RecognizerResult;
import com.iflytek.cloud.speech.SpeechConstant;
import com.iflytek.cloud.speech.SpeechError;
import com.iflytek.cloud.speech.SpeechListener;
import com.iflytek.cloud.speech.SpeechUser;
import com.iflytek.cloud.ui.RecognizerDialog;
import com.iflytek.cloud.ui.RecognizerDialogListener;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener{
private RecognizerDialog myDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.startRecognizer).setOnClickListener(this);
SpeechUser.getUser().login(MainActivity.this, null, null, "appid=xxxxxxxx", loginListener);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId())
{
case R.id.startRecognizer:
myRecognize();
break;
default :
break;
}
}
private SpeechListener loginListener = new SpeechListener(){
@Override
public void onCompleted(SpeechError error) {
// TODO Auto-generated method stub
if(error!=null)
Toast.makeText(MainActivity.this,"login failed", Toast.LENGTH_SHORT).show();
else
Toast.makeText(MainActivity.this,"login success", Toast.LENGTH_SHORT).show();
}
@Override
public void onData(byte[] arg0) {
// TODO Auto-generated method stub
}
@Override
public void onEvent(int arg0, Bundle arg1) {
// TODO Auto-generated method stub
}
};
private void myRecognize()
{
myDialog =new RecognizerDialog(this);
//設定引擎為轉寫
myDialog.setParameter(SpeechConstant.DOMAIN, "iat");
//設定識别語言為中文
myDialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
//設定方言為國語
myDialog.setParameter(SpeechConstant.ACCENT, "mandarin");
//設定錄音采樣率為
myDialog.setParameter(SpeechConstant.SAMPLE_RATE, "16000");
//設定監聽對象
myDialog.setListener(recognizerDialogListener);
//開始識别
myDialog.show();
}
private RecognizerDialogListener recognizerDialogListener = new RecognizerDialogListener(){
@Override
public void onError(SpeechError error) {
// TODO Auto-generated method stub
}
@Override
public void onResult(RecognizerResult result, boolean isLast) {
// TODO Auto-generated method stub
((TextView)findViewById(R.id.result)).append(result.getResultString());
}
};
|
}
然後,在AndroidManifest.xml中添加以下權限:
使用科大訊飛的語音技術實作語音識别 好了,最後就開始運作吧,一下是筆者運作結果截圖:
使用科大訊飛的語音技術實作語音識别
使用科大訊飛的語音技術實作語音識别 傳回的結果是json格式的,接下來就是需要你來解析傳回的json結果了,具體的解析方法,在sample裡面的demo工程中也有,可以參見官網上下載下傳的開發包中demo工程中的com.iflytek.mscdemo.util.JsonParser.java
到此為止,就哦了,開始體驗你的語音之旅吧!