Android編程之語音識(shí)別實(shí)現(xiàn)方法
本文實(shí)例講述了Android編程之語音識(shí)別實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:
語音識(shí)別技術(shù)在手機(jī)上應(yīng)用得相當(dāng)廣泛,人類日常最頻繁的溝通方式是語音,而在手機(jī)應(yīng)用中,大部分是通過硬件手動(dòng)輸入,目前這依然是主要與手機(jī)互動(dòng)的方式。但是隨著手機(jī)軟硬件功能的不斷提升,可以預(yù)見在不久的將來,語音交流將是人機(jī)交互的主要方式。IPhone手機(jī)內(nèi)置的Siri語音助手就是一個(gè)很好的例子。而鮮為人知的是其使用的語音識(shí)別技術(shù)來自于Google。而想而知,作為Google力推的Android自然被植入了最核心的語音識(shí)別技術(shù),其還整合了Google的云端技術(shù)以更好的實(shí)現(xiàn)人機(jī)語音互動(dòng)。
Android中主要通過RecognizerIntent來實(shí)現(xiàn)語音識(shí)別,它主要包括一些常量來表示語音的模式等,如下表所示:
|
常量 |
描述 |
|
ACTION_RECOGNIZE_SPEECH |
開啟語音活動(dòng) |
|
ACTION_WEB_SEARCH |
開啟網(wǎng)絡(luò)語音模式,結(jié)果將以網(wǎng)頁搜索顯示 |
|
EXTRA_LANGUAGE |
設(shè)置語言庫 |
|
EXTRA_LANGUAGE_MODEL |
語音識(shí)別模式 |
|
EXTRA_MAX_RESULTS |
返回的最大結(jié)果 |
|
EXTRA_PROMPT |
提示用戶可以開始語音 |
|
EXTRA _RESULTS |
將字符串返回到一個(gè)ArrayList中 |
|
LANGUAGE_MODEL-FREE_FORM |
在一種語言模式上自由語言 |
|
LANGUAGE_MODEL-WEB_SEARCH |
使用語言模型在Web上搜索 |
|
RESULT_AUDIO_ERROR |
返回結(jié)果時(shí),音頻遇到錯(cuò)誤 |
|
RESULT_CLIENT_ERROR |
返回結(jié)果時(shí),客戶端遇到錯(cuò)誤 |
|
RESULT_NETWORK_ERROR |
返回結(jié)果時(shí),網(wǎng)絡(luò)遇到錯(cuò)誤 |
|
RESULT_NO_MATCH |
沒有檢測(cè)到語音的錯(cuò)誤 |
|
RESULT_SERVER_ERROR |
返回結(jié)果時(shí),服務(wù)器遇到錯(cuò)誤 |
這里我們只需要通過Intent來傳遞一個(gè)動(dòng)作以及一些屬性,然后通過startActivityForResult來開始語音,代碼如下:
Intent intent= new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "開始語音");
當(dāng)然,如果找不到設(shè)置,就會(huì)拋出ActivityNotFoundException,所以我們需要捕捉這個(gè)異常。在以下的例子中,我們實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的語音識(shí)別程序,當(dāng)我們點(diǎn)擊“點(diǎn)擊使用語音識(shí)別”按鈕之后,開始語音,然后在onActivityResult方法中取得結(jié)果并顯示出來,其中如果當(dāng)前手機(jī)沒有連接到互聯(lián)網(wǎng)則會(huì)顯示連接問題,運(yùn)行效果如以下所示:
點(diǎn)擊按鈕后:
如果沒聯(lián)網(wǎng)會(huì)出現(xiàn)連接錯(cuò)誤:

向話筒說完“電腦”一詞后:

具體實(shí)現(xiàn)的代碼如下:
public class RecognizerIntent_TestActivity extends Activity {
private static final int VOICE_RECOGNITION_REQUEST_CODE = 1;
private ListView mList;
Button mButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mButton = (Button) findViewById(R.id.button1);
mButton.setOnClickListener(new myRecognizerIntentListener());
mList = (ListView) findViewById(R.id.listView1);
}
public class myRecognizerIntentListener implements OnClickListener {
public void onClick(View v) {
try {
// 用Intent來傳遞語音識(shí)別的模式,并且開啟語音模式
Intent intent = new Intent(
RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
// 語言模式和自由形式的語音識(shí)別
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
// 提示語言開始
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "請(qǐng)開始語音");
// 開始語音識(shí)別
startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
} catch (ActivityNotFoundException e) {
Toast.makeText(RecognizerIntent_TestActivity.this, "找不到語音設(shè)備",
Toast.LENGTH_LONG).show();
}
}
}
// 語音結(jié)束時(shí)的回調(diào)函數(shù)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == VOICE_RECOGNITION_REQUEST_CODE
&& resultCode == RESULT_OK) {
// 取得語音的字符
ArrayList<String> results = data
.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
// 設(shè)置視圖的更新
mList.setAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, results));
String resultsString = "";
for (int i = 0; i < results.size(); i++) {
resultsString += results.get(i);
}
Toast.makeText(this, resultsString, Toast.LENGTH_LONG).show();
}
super.onActivityResult(requestCode, resultCode, data);
}
}
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android多媒體操作技巧匯總(音頻,視頻,錄音等)》、《Android開發(fā)入門與進(jìn)階教程》、《Android視圖View技巧總結(jié)》、《Android編程之a(chǎn)ctivity操作技巧總結(jié)》、《Android操作SQLite數(shù)據(jù)庫技巧總結(jié)》、《Android操作json格式數(shù)據(jù)技巧總結(jié)》、《Android數(shù)據(jù)庫操作技巧總結(jié)》、《Android文件操作技巧匯總》、《Android編程開發(fā)之SD卡操作方法匯總》、《Android資源操作技巧匯總》及《Android控件用法總結(jié)》
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
- Android自定義UI實(shí)現(xiàn)微信語音
- Android語音識(shí)別技術(shù)詳解及實(shí)例代碼
- 百度語音識(shí)別(Baidu Voice) Android studio版本詳解
- Android 輕松實(shí)現(xiàn)語音識(shí)別詳解及實(shí)例代碼
- Android 高仿微信語音聊天頁面高斯模糊(毛玻璃效果)
- 輕松實(shí)現(xiàn)Android語音識(shí)別功能
- Android 開發(fā)系統(tǒng)自帶語音模塊應(yīng)用
- Android基于訊飛語音SDK實(shí)現(xiàn)語音識(shí)別
- Android仿微信語音聊天功能
- android仿微信聊天界面 語音錄制功能
相關(guān)文章
Android自定義動(dòng)態(tài)壁紙開發(fā)(時(shí)鐘)
今天小編就為大家分享一篇關(guān)于Android自定義動(dòng)態(tài)壁紙開發(fā)(時(shí)鐘),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-01-01
Android自定義View實(shí)現(xiàn)LayoutParams的方法詳解
這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)LayoutParams,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-02-02
Android ListView列表實(shí)現(xiàn)倒計(jì)時(shí)
這篇文章主要為大家詳細(xì)介紹了Android ListView列表實(shí)現(xiàn)倒計(jì)時(shí),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09
基于Android實(shí)現(xiàn)點(diǎn)擊某個(gè)按鈕讓菜單選項(xiàng)從按鈕周圍指定位置彈出
這篇文章主要介紹了基于Android實(shí)現(xiàn)點(diǎn)擊某個(gè)按鈕讓菜單選項(xiàng)從按鈕周圍指定位置彈出的相關(guān)資料,需要的朋友可以參考下2015-12-12
Kotlin協(xié)程低級(jí)api startCoroutine與ContinuationInterceptor
這篇文章主要為大家介紹了Kotlin協(xié)程低級(jí)api startCoroutine與ContinuationInterceptor示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
Android實(shí)現(xiàn)ViewPager無限循環(huán)效果(一)
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)ViewPager無限循環(huán)效果的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
21天學(xué)習(xí)android開發(fā)教程之SurfaceView
21天學(xué)習(xí)android開發(fā)教程之SurfaceView,SurfaceView由于可以直接從內(nèi)存或者DMA等硬件接口取得圖像數(shù)據(jù),因此是個(gè)非常重要的繪圖容器,操作相對(duì)簡(jiǎn)單,感興趣的小伙伴們可以參考一下2016-02-02
Android通過訪問網(wǎng)頁查看網(wǎng)頁源碼實(shí)例詳解
這篇文章主要介紹了Android通過訪問網(wǎng)頁查看網(wǎng)頁源碼的相關(guān)資料,需要的朋友可以參考下2017-06-06
android播放視頻時(shí)在立體聲與單聲道之間切換無變化原因分析及解決
使用第三方視頻播放器,有立體聲與單聲道之間切換,發(fā)現(xiàn)切換后無作用,原因是由于在HAL層默認(rèn)沒有處理上層發(fā)的stereo 轉(zhuǎn)mono的命令,具體的解決方法如下2013-06-06
flutter InkWell實(shí)現(xiàn)水波紋點(diǎn)擊效果
這篇文章主要為大家詳細(xì)介紹了flutter InkWell實(shí)現(xiàn)水波紋點(diǎn)擊效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07

