在Android上发言到文本

我正在寻找创build一个语音文本的应用程序。

我知道这种使用RecognizerIntent的能力: http : //android-developers.blogspot.com/search/label/Speech%20Input

然而 – 我不想要一个新的Intent被popup来,我想在我目前的应用程序中做一些分析,我不想让它popup一些说明它正在尝试录制你的声音的东西。

有没有人有关于如何最好地做到这一点的任何想法。 我可能正在考虑尝试狮身人面像4 – 但我不知道这是否能够在Android上运行 – 有没有人有任何build议或经验?

我想知道如果我可以改变这里的代码,也许不打扰显示UI或button,只是做处理: http : //developer.android.com/resources/samples/ApiDemos/src/com/example/android/的API /应用程序/ VoiceRecognition.html

干杯,

Solutions Collecting From Web of "在Android上发言到文本"

如果您不想使用RecognizerIntent进行语音识别,则仍然可以使用SpeechRecognizer类来完成。 但是,使用这个类比使用这个intent要复杂一点。 作为最后一个提示,我强烈build议让用户知道他录制的时间,否则当他最终发现时,他可能会很设置。

编辑:从这个堆栈溢出条目启发(但改变)一个小例子

  Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "com.domain.app"); SpeechRecognizer recognizer = SpeechRecognizer .createSpeechRecognizer(this.getApplicationContext()); RecognitionListener listener = new RecognitionListener() { @Override public void onResults(Bundle results) { ArrayList<String> voiceResults = results .getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); if (voiceResults == null) { Log.e(TAG, "No voice results"); } else { Log.d(TAG, "Printing matches: "); for (String match : voiceResults) { Log.d(TAG, match); } } } @Override public void onReadyForSpeech(Bundle params) { Log.d(TAG, "Ready for speech"); } @Override public void onError(int error) { Log.d(TAG, "Error listening for speech: " + error); } @Override public void onBeginningOfSpeech() { Log.d(TAG, "Speech starting"); } @Override public void onBufferReceived(byte[] buffer) { // TODO Auto-generated method stub } @Override public void onEndOfSpeech() { // TODO Auto-generated method stub } @Override public void onEvent(int eventType, Bundle params) { // TODO Auto-generated method stub } @Override public void onPartialResults(Bundle partialResults) { // TODO Auto-generated method stub } @Override public void onRmsChanged(float rmsdB) { // TODO Auto-generated method stub } }; recognizer.setRecognitionListener(listener); recognizer.startListening(intent); 

重要提示:从UI线程运行此代码。

Android内置的内容(通过意图启动)是一种客户端活动,可捕获您的声音并将audio发送到Google服务器以供识别。 你可以build立类似的东西。 您可以自己托pipe狮身人面像(或使用Yapme.com等云识别服务),自己捕捉声音,将audio发送给识别器,并将文本结果返回给您的应用程序。 我不知道如何在没有Android(或通过Chrome)使用Intent的情况下利用Google识别服务。

到目前为止,我所看到的普遍共识是,今天的智能手机并没有像狮身人面像般的语音识别能力。 您可能希望探索为自己运行客户端识别器,但Google使用服务器识别。

有关相关信息,请参阅:

  • Google的语音search语音识别服务
  • Android项目之外可以使用Android API吗?
  • 语音识别API

在您的活动中请执行以下操作:

 Image button buttonSpeak = findView....;// initialize it. buttonSpeak.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { promptSpeechInput(); } }); private void promptSpeechInput() { Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault()); intent.putExtra(RecognizerIntent.EXTRA_PROMPT, getString(R.string.speech_prompt)); try { startActivityForResult(intent, REQ_CODE_SPEECH_INPUT); } catch (ActivityNotFoundException a) { Toast.makeText(getApplicationContext(), getString(R.string.speech_not_supported), Toast.LENGTH_SHORT).show(); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case REQ_CODE_SPEECH_INPUT: { if (resultCode == RESULT_OK && null != data) { result = data .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); EditText input ((EditText)findViewById(R.id.editTextTaskDescription)); input.setText(result.get(0)); // set the input data to the editText alongside if want to. } break; } } }