Ist dies möglich, ohne die Android-APIs zu ändern? Ich habe einen Artikel darüber gefunden. Es gibt einen Kommentar, den ich an den Android-APIs ändern sollte. Es wurde jedoch nicht angegeben, wie die Änderung vorgenommen werden soll. Kann mir jemand einige Vorschläge dazu geben? Vielen Dank!
Ich habe diesen Artikel gefunden. SpeechRecognizer Seine Bedürfnisse sind fast die gleichen wie meine. Es ist eine gute Referenz für mich!
Ich habe dieses Problem total gelöst.
Ich habe einen verwendbaren Beispielcode von dieser China-Website gegoogelt.
Hier ist mein Quellcode
package voice.recognition.test;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.speech.RecognitionListener;
import android.speech.RecognizerIntent;
import android.speech.SpeechRecognizer;
import android.widget.Button;
import android.widget.TextView;
import java.util.ArrayList;
import android.util.Log;
public class voiceRecognitionTest extends Activity implements OnClickListener
{
private TextView mText;
private SpeechRecognizer sr;
private static final String TAG = "MyStt3Activity";
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button speakButton = (Button) findViewById(R.id.btn_speak);
mText = (TextView) findViewById(R.id.textView1);
speakButton.setOnClickListener(this);
sr = SpeechRecognizer.createSpeechRecognizer(this);
sr.setRecognitionListener(new listener());
}
class listener implements RecognitionListener
{
public void onReadyForSpeech(Bundle params)
{
Log.d(TAG, "onReadyForSpeech");
}
public void onBeginningOfSpeech()
{
Log.d(TAG, "onBeginningOfSpeech");
}
public void onRmsChanged(float rmsdB)
{
Log.d(TAG, "onRmsChanged");
}
public void onBufferReceived(byte[] buffer)
{
Log.d(TAG, "onBufferReceived");
}
public void onEndOfSpeech()
{
Log.d(TAG, "onEndofSpeech");
}
public void onError(int error)
{
Log.d(TAG, "error " + error);
mText.setText("error " + error);
}
public void onResults(Bundle results)
{
String str = new String();
Log.d(TAG, "onResults " + results);
ArrayList data = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
for (int i = 0; i < data.size(); i++)
{
Log.d(TAG, "result " + data.get(i));
str += data.get(i);
}
mText.setText("results: "+String.valueOf(data.size()));
}
public void onPartialResults(Bundle partialResults)
{
Log.d(TAG, "onPartialResults");
}
public void onEvent(int eventType, Bundle params)
{
Log.d(TAG, "onEvent " + eventType);
}
}
public void onClick(View v) {
if (v.getId() == R.id.btn_speak)
{
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,"voice.recognition.test");
intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS,5);
sr.startListening(intent);
Log.i("111111","11111111");
}
}
}
Stellen Sie sicher, dass Sie die lästigen Protokolle nach dem Debuggen löschen!
android
speech-recognition
speech
Jim31837
quelle
quelle
<uses-permission android:name="android.permission.RECORD_AUDIO" />
in Ihrem AndroidManifest.xml Datei sonst SpeechRecognizer keine Audio abholenAntworten:
Verwenden Sie die SpeechRecognizer- Oberfläche. Ihre App muss über die Berechtigung RECORD_AUDIO verfügen. Anschließend können Sie einen SpeechRecognizer erstellen, ihm einen RecognitionListener geben und seine
startListening
Methode aufrufen . Sie erhalten Rückrufe an den Hörer, wenn der Spracherkenner bereit ist, auf Sprache zu hören, und wenn er Sprache empfängt und in Text konvertiert.quelle
has leaked ServiceConnection android.speech.SpeechRecognizer$Connection@414f0e40 that was originally bound here
Fehler zu erhaltenGAST verfügt über eine praktische abstrakte Klasse, mit der Sie die
SpeechRecognizer
Klasse mit sehr wenig neuem Code verwenden können. Es gibt auch ein Beispiel für die Ausführung desSpeechRecognizer
Hintergrunddienstes mit diesem und jenemquelle
Danke, dass du das gepostet hast! Ich fand es hilfreich, den onclick-Listener in oncreate zu definieren:
quelle
Am Ende mache ich ein Github-Projekt, um Text in Sprache und Sprache in Text ohne störenden Dialog umzuwandeln.
https://github.com/hiteshsahu/Android-TTS-STT/tree/master/app/src/main/java/com/hiteshsahu/stt_tts/translation_engine
quelle