android之語音輸入
來源:程序員人生 發布時間:2015-04-03 08:25:56 閱讀次數:2759次
這里是使用訊飛語言輸入,具體步驟以下:
1、獲得APPID
首先先到訊飛語音云官網注冊1個賬號http://www.voicecloud.cn/
2、然后在我的語音云中創建1個新利用,選擇語音基礎能力,就能夠看到Appid:××××××××
(注意:每一個appid都是會有相對應的sdk包,不然無效)
3、創建1個新工程VoiceTest,并將下載的SDK包中的libs目錄下的庫導入到工程VoiceTest中的libs里面(直接復制過去便可)
4、打開sdk包中的doc目錄下的msc文件,里面會有以上的幾步步驟;
權限:
<!--連接網絡權限,用于履行云端語音能力 -->
<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"/>
5、把sdk包中的sample(demo代碼)導入Eclipse中,以便參考,其實就是要用到demo中的json解包方法
6、程序若在此過不去,也就是你的appid與相對應的sdk包有問題
//5、顯示聽寫對話框 isrDialog.show();
7、簡單語音測試代碼
<span style="font-size:14px;"><strong> <span style="color:#FF0000;"> <MainAcctivity.java></span>
package com.example.voicetest;
import com.iflytek.cloud.InitListener;
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 com.iflytek.cloud.ui.RecognizerDialog;
import com.iflytek.cloud.ui.RecognizerDialogListener;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity {
private EditText editText;
private Button speak;
private SpeechRecognizer miat;
private static final String APPID = "appid=5450a81b";
private RecognizerDialogListener recognizeListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText)findViewById(R.id.textview);
speak = (Button)findViewById(R.id.button1);
//設置按鍵監聽
speak.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
InitListener InitListener = null;
//1、創建用戶語音對象
SpeechUtility.createUtility(getBaseContext(), SpeechConstant.APPID +"=5450a81b");
RecognizerDialog isrDialog = new RecognizerDialog(MainActivity.this, InitListener);
//2、創建辨認對話框
isrDialog.setParameter(SpeechConstant.CLOUD_GRAMMAR, null);
//3、定義聽寫ui對話框,設置聽寫參數
isrDialog.setParameter(SpeechConstant.DOMAIN, "iat");
isrDialog.setParameter(SpeechConstant.SAMPLE_RATE, "8000");
//4、設置回調接口
isrDialog.setListener(recognizeListener);
//5、顯示聽寫對話框
isrDialog.show();
//6、辨認成功時回調此方法
recognizeListener =new RecognizerDialogListener() {
@Override
public void onResult(RecognizerResult arg0, boolean arg1) {
// TODO Auto-generated method stub
//7、返回數據用json解包,并顯示在控件上
String text = JsonParser.parseIatResult(arg0.getResultString());
editText.append(text);
editText.setSelection(editText.length());
}
@Override
public void onError(SpeechError arg0) {
// TODO Auto-generated method stub
}
};
}
});
}
@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;
}
}
<span style="color:#FF0000;"> <JsonParser.java></span>
package com.example.voicetest;
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener;
/**
* Json結果解析類
*/
public class JsonParser {
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 < words.length(); i++) {
// 轉寫結果詞,默許使用第1個結果
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();
}
public static String parseGrammarResult(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 < words.length(); i++) {
JSONArray items = words.getJSONObject(i).getJSONArray("cw");
for(int j = 0; j < items.length(); j++)
{
JSONObject obj = items.getJSONObject(j);
if(obj.getString("w").contains("nomatch"))
{
ret.append("沒有匹配結果");
return ret.toString();
}
ret.append("【結果】" + obj.getString("w"));
ret.append("【置信度】" + obj.getInt("sc"));
ret.append("
");
}
}
} catch (Exception e) {
e.printStackTrace();
ret.append("沒有匹配結果.");
}
return ret.toString();
}
}
(activity_main.xml)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<AutoCompleteTextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/button1"
android:layout_centerHorizontal="true"
android:layout_marginBottom="30dp"
android:text="AutoCompleteTextView" >
<requestFocus />
</AutoCompleteTextView>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textview"
android:layout_alignParentBottom="true"
android:layout_marginBottom="164dp"
android:layout_marginLeft="22dp"
android:text="Button" />
</RelativeLayout></strong></span>
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈