Tôi đang làm việc trên một ứng dụng Android sử dụng RecognizerIntent.ACTION_RECOGNIZE_SPEECH ,,, vấn đề của tôi là tôi không biết cách để tạo bộ đệm sẽ ghi lại giọng nói mà người dùng nhập. i đọc rất nhiều trên ngăn xếp tràn, nhưng tôi chỉ không hiểu làm thế nào tôi sẽ bao gồm bộ đệm và dịch vụ nhận dạng cuộc gọi trở lại vào mã của tôi. VÀ LÀM THẾ NÀO S W TÔI CHƠI TRỞ LẠI CHO NỘI DUNG ĐÃ ĐƯỢC TIẾT KIỆM TRONG BUFFER.làm thế nào để xây dựng BufferReceived() để nắm bắt giọng nói bằng cách sử dụng RecognizerIntent?
đây là mã của tôi:
public class Voice extends Activity implements OnClickListener {
byte[] sig = new byte[500000] ;
int sigPos = 0 ;
ListView lv;
static final int check =0;
protected static final String TAG = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.voice);
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
TextView display=(TextView)findViewById (R.id.Text1);
display.setText("True");
System.arraycopy(buffer, 0, sig, sigPos, buffer.length) ;
sigPos += buffer.length ;
}
@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);
startActivityForResult(intent,check);
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
}
}
Bạn không cần 'startActivityForResult' +' onActivityResult' khi bạn đang sử dụng 'SpeechRecognizer' ... – Kaarel
Vì ICS, onBufferReceived không được gọi nữa.Bạn không thể sử dụng trình nhận dạng giọng nói và nhận âm thanh cùng một lúc. –