안녕하세요. 완전 안드로이드 초보 입니다..
지금 현재 실시간 STT 기능을 구현하고 있습니다.
Activity 이동 없이 버튼 누르면 음성인식 되고, 실시간으로 EditText에 입력이 되도록 하는게 게 목표입니다.
현재 Activity 이동없이, RecognitionListener의 onPartialResults 를 이용하여 실시간으로 EditText에 입력이 되는것 까지는 구현했습니다만.
onPartialResults이 계속 불리는지, 텍스트에 자꾸 내용이 중첩되서 나옵니다.
예를들어 "안녕하세요 가나다라마바사입니다 반가워요" 라고 한다면 "안녕하세요 안녕하세요 가나다라마바사입니다 반가워요 안녕하세요 가나다라마바사입니다 가나다라마바사입니다 가나다라마바사입니다 반가워요 반가워요 " 뭐 이런식으로 비슷하게 나옵니다.
하루종일 찾아봐도 잘 모르겠네요.. onBufferRecieved를 건드려야하는지, 고수님들의 도움 부탁드립니다!.
리스너 코드는 아래있습니다.
private RecognitionListener listener = new RecognitionListener() {
@Override
public void onReadyForSpeech(Bundle params) {
Log.d(TAG, "Ready for speech " + params);
}
@Override
public void onBeginningOfSpeech() {
progressBar1.setMax(10);
}
@Override
public void onRmsChanged(float rmsdB) {
progressBar1.setProgress((int) rmsdB);
}
@Override
public void onBufferReceived(byte[] buffer) {
}
@Override
public void onEndOfSpeech() {
}
@Override
public void onError(int error) {
Log.d(TAG, getErrorText(error));
}
@Override
public void onResults(Bundle results) {
Log.d(TAG, "full results");
}
@Override
public void onPartialResults(Bundle partialResults) {
receiveResults(partialResults);
}
@Override
public void onEvent(int eventType, Bundle params) {
}
};
private void receiveResults(Bundle results) {
if ((results != null) && results.containsKey(SpeechRecognizer.RESULTS_RECOGNITION)) {
List<String> heard = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
resultText = heard.get(0);
txtText.append(resultText);
}
}