Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android語音識別實現訊飛語音移植

Android語音識別實現訊飛語音移植

編輯:Android開發實例

 一、簡介

    語音識別現在應用越來越廣泛了 比如語音寫短信、語音搜索商品、語音搜索關鍵字等等,這遍我們就簡單的談談國內比較流行的訊飛語音在android平台上的實現。

   筆者認為:

           google語音識別並不是十分符合中國人的習慣,且google語音識別一個重要弊端的是,需要用戶手機上必須有google語音應用。

    一般的國行android手機並沒有,比如筆記手機小米就沒有。需要下載單獨google語音apk。所以用戶體現自然不如訊飛。

          但訊飛筆者認為,也有一定風險。訊飛應用協議中,他們是具有任何時候,停掉你語音識別服務的權限的,而且還不用和你商量。

      一旦你的應用達到了百萬級了,那麼訊飛是要收取你一定的服務費的,所以一般大公司的項目基本上不會用訊飛語音或與訊飛語音合作比如小米,

      Android4.0以上版本語音小助手就有小米與訊飛語音合作開發出來的。

二、訊飛Android小示例

     先看看效果圖:

 

  嗯,看到效果圖後下面就談談如何去實現效果:

   2.1 到訊飛官網開發者專區中注冊用戶並獲取appid  地址:http://open.voicecloud.cn/developer.php

   2.2 新建android工程,並在清單文件中聲明好相應的權限

  1. <uses-permission android:name="android.permission.RECORD_AUDIO" /> 
  2. <uses-permission android:name="android.permission.INTERNET" /> 
  3. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
  4. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
  5. <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> 
  6. <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
  7. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

2.3 下載libmsc.so與Msc.jar,並分別放在android工程的libs/armeabi與libs文件夾中,如圖
   

 

  3.4 使用示例如下,代碼中都帶有相應的注釋了:

  1. import java.util.ArrayList; 
  2.  
  3. import android.app.Activity; 
  4. import android.os.Bundle; 
  5. import android.util.Log; 
  6. import android.view.View; 
  7. import android.view.View.OnClickListener; 
  8. import android.widget.EditText; 
  9.  
  10. import com.iflytek.speech.RecognizerResult; 
  11. import com.iflytek.speech.SpeechConfig.RATE; 
  12. import com.iflytek.speech.SpeechError; 
  13. import com.iflytek.ui.RecognizerDialog; 
  14. import com.iflytek.ui.RecognizerDialogListener; 
  15.  
  16. /** 
  17.  * @author 陳淑飛 
  18.  * 2013-1-8 上午1:10:24 
  19.  */ 
  20. public class HelloDemoActivity extends Activity implements OnClickListener { 
  21.     protected static final String TAG = "ThirdActivity"; 
  22.     private EditText txt_result; 
  23.     private RecognizerDialog rd; 
  24.  
  25.     @Override 
  26.     protected void onCreate(Bundle savedInstanceState) { 
  27.         super.onCreate(savedInstanceState); 
  28.         setContentView(R.layout.demo); 
  29.          
  30.         findView(); 
  31.         //RecognizerDialog(Context context, String params); "appid=1234567,usr=test,pwd=12345"  usr、pwd不是必選的 
  32.         //創建語音識別dailog對象,appid到訊飛就注冊獲取 
  33.         rd = new RecognizerDialog(this ,"appid=50e1b967"); 
  34.     } 
  35.  
  36.     private void findView() { 
  37.         txt_result = (EditText) findViewById(R.id.txt_result); 
  38.         findViewById(R.id.bt_search).setOnClickListener(this); 
  39.     } 
  40.  
  41.     @Override 
  42.     public void onClick(View v) { 
  43.         switch (v.getId()) { 
  44.         case R.id.bt_search: 
  45.             showReconigizerDialog(); 
  46.             break; 
  47.  
  48.         default: 
  49.             break; 
  50.         } 
  51.     } 
  52.  
  53.     private void showReconigizerDialog() { 
  54.         //setEngine(String engine,String params,String grammar); 
  55.         /** 
  56.          * 識別引擎選擇,目前支持以下五種 
  57.             “sms”:普通文本轉寫 
  58.             “poi”:地名搜索 
  59.             “vsearch”:熱詞搜索 
  60.             “vsearch”:熱詞搜索 
  61.             “video”:視頻音樂搜索 
  62.             “asr”:命令詞識別 
  63.              
  64.             params  引擎參數配置列表 
  65.             附加參數列表,每項中間以逗號分隔,如在地圖搜索時可指定搜索區域:“area=安徽省合肥市”,無附加參數傳null 
  66.          */ 
  67.         rd.setEngine("sms", null, null); 
  68.          
  69.         //設置采樣頻率,默認是16k,android手機一般只支持8k、16k.為了更好的識別,直接弄成16k即可。 
  70.         rd.setSampleRate(RATE.rate16k); 
  71.          
  72.         final StringBuilder sb = new StringBuilder(); 
  73.         Log.i(TAG, "識別准備開始............."); 
  74.          
  75.         //設置識別後的回調結果 
  76.         rd.setListener(new RecognizerDialogListener() { 
  77.             @Override 
  78.             public void onResults(ArrayList<RecognizerResult> result, boolean isLast) { 
  79.                 for (RecognizerResult recognizerResult : result) { 
  80.                     sb.append(recognizerResult.text); 
  81.                     Log.i(TAG, "識別一條結果為::"+recognizerResult.text); 
  82.                 } 
  83.             } 
  84.             @Override 
  85.             public void onEnd(SpeechError error) { 
  86.                 Log.i(TAG, "識別完成............."); 
  87.                 txt_result.setText(sb.toString()); 
  88.             } 
  89.         }); 
  90.          
  91.         txt_result.setText(""); //先設置為空,等識別完成後設置內容 
  92.         rd.show(); 
  93.     } 
  94.  

另:工程示例domo,已上傳到csdn中(免積分哦),地址:http://download.csdn.net/detail/chenshufei2/4989030

轉自:http://blog.csdn.net/chenshufei2/article/details/8496905

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved