我正在製作一個應用程序,它可以從用戶處獲取命令並實時寫入。什麼是我最好的選擇?第三方軟件如獅身人面像還是應該使用內置的(android語音識別)?語音識別Android應用程序
其次,我希望它能夠實時寫入,就像我說它開始寫入時一樣?
我正在製作一個應用程序,它可以從用戶處獲取命令並實時寫入。什麼是我最好的選擇?第三方軟件如獅身人面像還是應該使用內置的(android語音識別)?語音識別Android應用程序
其次,我希望它能夠實時寫入,就像我說它開始寫入時一樣?
您應該使用內置的Android語音識別功能。具體來說,您將需要操作SpeechRecognier API,以便沒有彈出對話框。
此外,不要期望SpeechRecognizer在onPartialResults()內返回任何內容。它很少。
你可以嘗試使用獅身人面像,但似乎其他開發者很難讓它在Android上運行。也就是說,如果您希望您的應用在沒有互聯網連接的情況下運行,獅身人面像將成爲您唯一的選擇。
這裏是一個代碼文檔片斷,您將需要使用SpeechRecognizer:
public void recognizeDirectly(Intent recognizerIntent)
{
// SpeechRecognizer requires EXTRA_CALLING_PACKAGE, so add if it's not
// here
if (!recognizerIntent.hasExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE))
{
recognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,
"com.dummy");
}
SpeechRecognizer recognizer = getSpeechRecognizer();
recognizer.startListening(recognizerIntent);
}
@Override
public void onResults(Bundle results)
{
Log.d(TAG, "full results");
receiveResults(results);
}
@Override
public void onPartialResults(Bundle partialResults)
{
Log.d(TAG, "partial results");
receiveResults(partialResults);
}
/**
* common method to process any results bundle from {@link SpeechRecognizer}
*/
private void receiveResults(Bundle results)
{
if ((results != null)
&& results.containsKey(SpeechRecognizer.RESULTS_RECOGNITION))
{
List<String> heard =
results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
float[] scores =
results.getFloatArray(SpeechRecognizer.CONFIDENCE_SCORES);
receiveWhatWasHeard(heard, scores);
}
}
@Override
public void onError(int errorCode)
{
recognitionFailure(errorCode);
}
/**
* stop the speech recognizer
*/
@Override
protected void onPause()
{
if (getSpeechRecognizer() != null)
{
getSpeechRecognizer().stopListening();
getSpeechRecognizer().cancel();
getSpeechRecognizer().destroy();
}
super.onPause();
}
/**
* lazy initialize the speech recognizer
*/
private SpeechRecognizer getSpeechRecognizer()
{
if (recognizer == null)
{
recognizer = SpeechRecognizer.createSpeechRecognizer(this);
recognizer.setRecognitionListener(this);
}
return recognizer;
}
// other unused methods from RecognitionListener...
@Override
public void onReadyForSpeech(Bundle params)
{
Log.d(TAG, "ready for speech " + params);
}
@Override
public void onEndOfSpeech()
{
}
gregm是正確的,但問題的主要「實時寫」的部分沒有得到回答。您需要添加一個額外的,表明你有興趣在結果後面的越來越部分:
添加額外的意圖對我的作品
intent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true);
警告:部分不返回唯一的新東西,但也是前一個。所以你需要自己執行差異檢查...
謝謝先生..但我不是很好的android編程..你能解釋一下如何實現這個代碼?我已經實現了對話出現的語音識別的正常代碼。如何用此代碼替換它? 在此先感謝:) – Shah 2012-03-10 07:15:29
使用您爲對話框版本所做的相同意圖,而是調用我的recognitionDirectly方法。您還需要實現receiveWhatWasHeard()和recognitionFailure()以處理語音識別的結果。 – gregm 2012-03-10 16:01:54
謝謝先生..我很高興聽到..我正在寫作方向..我的應用程序的第一個任務是現在完成..感謝你:) – Shah 2012-03-10 19:08:48