SpeechToText 기능
기록에 남기고자 작성한다. 다음에 또 필요할지 모르니깐...
private SpeechRecognizer mRecognizer; |
private void startListening() { Intent i = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); //음성인식 intent생성 i.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getPackageName()); //데이터 설정 i.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en_US"); // "ko-KR"); mRecognizer = SpeechRecognizer.createSpeechRecognizer(MainActivity.this); //음성인식 객체 mRecognizer.setRecognitionListener(mSTTListener); //음성인식 리스너 등록 mRecognizer.startListening(i); } private void stopListening() { if(mRecognizer != null) { mRecognizer.stopListening(); } } |
//음성인식 리스너 public RecognitionListener mSTTListener = new RecognitionListener() { //입력 소리 변경 시 @Override public void onRmsChanged(float rmsdB) { int step = (int)(rmsdB/7); //소리 크기에 따라 step을 구함. // setVolumeImg(step); //총 4단계 이미지 설정. 없음. 1단계, 2단계, 3단계 } //음성 인식 결과 받음 @Override public void onResults(Bundle results) { // mHandler.removeMessages(END); //핸들러에 종료 메시지 삭제
Log.e(TAG, "onResults : "+ results); mSTTData = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); for(int i = 0; i < mSTTData.size() ; i++) { Log.e(TAG, "mSTTData : " + mSTTData.get(i)); } View view = views.get(nCurrentPosition); TextView mResult = (TextView)view.findViewById(R.id.playing_text); mResult.setText(mSTTData.get(0)); //text로 인식된 data중 젤 처음 data를 textview에 set해줌. mResult.setVisibility(View.VISIBLE); } //음성 인식 준비가 되었으면 startplay 실행 @Override public void onReadyForSpeech(Bundle params) { // mHandler.sendEmptyMessage(READY); //핸들러에 메시지 보냄 Log.e(TAG, "onReadyForSpeech : "); startPlay(); //이 부분은 녹음된 파일을 play하면서 그 소리를 인식하기 위해... } //음성 입력이 끝났으면 oncompletion 실행 @Override public void onEndOfSpeech() { onCompletion(mPlayer); Log.e(TAG, "onEndOfSpeech : "); // mHandler.sendEmptyMessage(END); //핸들러에 메시지 보냄 } //에러가 발생하면 @Override public void onError(int error) { String msg = ""; Log.e(TAG, "onError : " +error); switch(error){ case SpeechRecognizer.ERROR_AUDIO: msg = "오디오 입력 중 오류가 발생했습니다."; break; case SpeechRecognizer.ERROR_CLIENT: msg = "단말에서 오류가 발생했습니다."; break; case SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS: msg = "권한이 없습니다."; break; case SpeechRecognizer.ERROR_NETWORK: case SpeechRecognizer.ERROR_NETWORK_TIMEOUT: msg = "네트워크 오류가 발생했습니다."; break; case SpeechRecognizer.ERROR_NO_MATCH: msg = "일치하는 항목이 없습니다."; break; case SpeechRecognizer.ERROR_RECOGNIZER_BUSY: msg = "음성인식 서비스가 과부하 되었습니다."; break; case SpeechRecognizer.ERROR_SERVER: msg = "서버에서 오류가 발생했습니다."; break; case SpeechRecognizer.ERROR_SPEECH_TIMEOUT: msg = "입력이 없습니다."; break; } if(msg.isEmpty() != true) { Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show(); } }
@Override public void onBeginningOfSpeech() //입력이 시작되면 { Log.e(TAG, "onBeginningOfSpeech : "); } @Override public void onPartialResults(Bundle partialResults) {} //인식 결과의 일부가 유효할 때 @Override public void onEvent(int eventType, Bundle params) {} //미래의 이벤트를 추가하기 위해 미리 예약되어진 함수 @Override public void onBufferReceived(byte[] buffer) {} //더 많은 소리를 받을 때 };
|
그리고 구글링해서 관련 소스를 얻었다.
출처가 어디였는지 기억이 안나서... 아무튼 너무나 큰 도움이었다.