我有一个有用的应用程序,我想添加语音命令。当前应用程序在周期性(定时器)的基础上通过蓝牙来回传输数据。用户可以按Buttons和NumberPickers来修改通过蓝牙发送的数据。还有从蓝牙链接接收的数据,并显示在textViews中。此应用程序目前正常运行。
我想要做的是添加语音命令功能,以便用户可以选择按下Buttons / NumberPickers,或者只使用语音命令更改值。
我测试了一些可以在各种网站上找到的语音到文本示例。我已经成功测试了一个使用RecognizerIntent的应用程序。按下按钮后,会弹出一个对话框,您可以说出单词或短语,并在屏幕上正确显示结果。
所以,我认为我很接近,但我不确定如何将Speech-to-Text与我当前的蓝牙应用程序结合起来。我不希望用户必须按下按钮,我只是希望应用程序不断收听。另外,我不想在屏幕上弹出语音对话框。
我的硬件是运行Android 4.1的三星平板电脑。
我对Android编程比较陌生,所以任何建议(无论多么基本)都表示赞赏。感谢。
答案 0 :(得分:1)
要阻止屏幕上弹出语音对话框,您可以使用ACTION_RECOGNIZE_SPEECH意图:
private static int SR_CODE = 123;
/**
* Initializes the speech recognizer and starts listening to the user input
*/
private void listen() {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
//Specify language
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.ENGLISH)
// Specify language model
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
// Specify how many results to receive
intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 5);
// Start listening
startActivityForResult(intent, SR_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == SR_CODE && resultCode == RESULT_OK) {
if(data!=null) {
//Retrieves the best list SR result
ArrayList<String> nBestList = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
String bestResult = nBestList.get(0);
Toast.makeText(getApplicationContext(), bestResult, Toast.LENGTH_LONG).show;
}else {
//Reports error in recognition error in log
Log.e(LOGTAG, "Recognition was not successful");
}
}
关于另一个问题,&#34;我不希望用户必须按下按钮,我只是希望应用程序能够不断收听&#34;:
我建议使用CMUSphinx来持续识别语音。要使用谷歌语音识别API实现连续语音识别,您可能不得不求助于后台服务中的循环,这将占用太多资源并耗尽设备电池。
另一方面,Pocketsphinx的效果非常好。它足够快,可以发现关键短语并识别锁定屏幕后面的语音命令,而无需用户触摸他们的设备。它完成所有这些离线操作。 您可以尝试demo。
如果你真的想使用google的API,我已经在上面演示了see this