Sto tentando di personalizzare la "finestra di dialogo" durante il riconoscimento vocale. Finestra di dialogo GUI di riconoscimento vocale personalizzata per Android
Se ho capito correttamente ho bisogno di usare SpeechRecognizer
per personalizzare la GUI di riconoscimento vocale nell'immagine sopra.
Questo How to get audio amplitude with speech recognizer?, è simile alla mia domanda, ma sta chiedendo di aggiungere l'indicatore di ampiezza usando onRmsChanged
, poiché ha già capito come implementare una nuova GUI mentre il riconoscimento sta accadendo, quindi la sua domanda anche se utile, è un po ' più avanti di dove sono a.
Esistono progetti di esempio esistenti, tuts che spiegano come questo tipo di interfaccia utente personalizzata è implementata. Ho esaminato l'esempio di VoiceRecognition ApiDemo, ma non riesco ancora a vedere dove impostare/modificare l'interfaccia ..
Dai documenti di sviluppo, ho capito che questo deve essere sul thread dell'interfaccia utente principale. Quindi il mio approccio pseudo sarebbe creare un SpeechDialogClass, una classe di dialogo che estende Dialog e implementa RecognitionListener. Qualcosa come questo. Immagino che da qualche parte nei metodi vorrei impostare il contesto, la consegna onRmsChanged ecc .. ma da lì sono praticamente perso.
public class SpeechDialogClass extends Dialog implements RecognitionListener {
public Activity c;
public Dialog d;
public ImageView mic, mic_amp;
public SpeechDialogClass(Activity a) {
super(a);
// TODO Auto-generated constructor stub
this.c = a;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.speech_dialog_kids);
mic = (ImageView) findViewById(R.id.mic_icon);
mic_amp = (ImageView) findViewById(R.id.speech_amplitude);
// //So I would set some sort of listener to change the selector state
// of mic_icon and the
// /somewhere I would set the mic_amp to listen/ract to on onRmsChanged
// public void onRmsChanged(float arg0)///
// // and this is where Im lost///
}
public void onBeginningOfSpeech() {
// TODO Auto-generated method stub
setContentView(R.layout.speech_dialog_kids);
}
public void onBufferReceived(byte[] arg0) {
// TODO Auto-generated method stub
}
public void onEndOfSpeech() {
// TODO Auto-generated method stub
}
public void onError(int arg0) {
// TODO Auto-generated method stub
}
public void onEvent(int arg0, Bundle arg1) {
// TODO Auto-generated method stub
}
public void onPartialResults(Bundle arg0) {
// TODO Auto-generated method stub
}
public void onReadyForSpeech(Bundle arg0) {
// TODO Auto-generated method stub
}
public void onResults(Bundle arg0) {
// TODO Auto-generated method stub
}
public void onRmsChanged(float arg0) {
// TODO Auto-generated method stub
// pseudo code//
// mic_amp.doSomething(and a float);
}
}
mio speech_dialiog_kids.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="150dp"
android:background="#3E80B4"
android:orientation="vertical" >
<TextView
android:id="@+id/txt_dia"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="10dp"
android:text="Speak Text"
android:textColor="@android:color/white"
android:textSize="15dp"
android:textStyle="bold" >
</TextView>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="#3E80B4"
android:orientation="horizontal" >
<ImageView
android:id="@+id/speech_amplitude"
android:layout_width="78dp"
android:layout_height="78dp"
android:layout_marginTop="10dp"
android:src="@drawable/amplitude_icon"
android:visibility="visible" />
<ImageView
android:id="@+id/mic_icon"
android:layout_width="68dp"
android:layout_height="68dp"
android:layout_marginLeft="-73dp"
android:layout_marginTop="16dp"
android:src="@drawable/small_right_grey_white"
android:visibility="visible" />
</LinearLayout>
</LinearLayout>
Grazie mille per l'aiuto. Darò una prova. "Un altro problema è che onRmsChanged non è sempre invocato a seconda della versione di Android" Sì, ho letto anche su questo, mi chiedo perché questo sarebbe. Grazie ancora – Mcorv
Perché Google non vuole consentire di rebrandare il proprio motore. –