[안드로이드 음성인식] TextView 에 내 목소리를 담는 예제

Posted on Updated on

최신 예제 :  http://happythingsmaker.com/?p=2211

 

 

시나리오 : 버튼을 클릭하면 내 목소리를 듣기 시작한다. 그리고 TextView 에 들은 단어들을 표시한다

1. 초기 설정:

안드로이드 스튜디오 실행
새 프로젝트  생성
API 10
Black Activity
다른 모든 것은 그냥 기본 설정대로 하고 finish 버튼 클릭

2. AndroidManifest.xml 파일 수정

<menifest > 태그와 <application> 태그 사이에 공간을 놓고 삽입

 
<manifest (이하생략)
    <uses-permission android:name="android.permission.INTERNET"/>;
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>;
    <application  (이하생략) ......

3. activity_main.xml 파일 수정

why? : 텍스트뷰를 만들고, id 를 부여하기 위함. 자바 소스에서 이 텍스트 뷰를 참조하기 위함

<TextView
    android:id="@+id/textView" //id 추가했습니다.
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

4. MainActivity.java 파일 수정

전역변수 선언

public class MainActivity extends ActionBarActivity {
    /// 인텐트, SpeechRecognizer, 텍스트뷰 삽입
    Intent i;
    SpeechRecognizer mRecognizer;
    TextView textView;
    ///

onCreate()

 @Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
     //이하 추가 코드
     i = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
     i.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getPackageName());
     i.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "ko-KR");

     mRecognizer = SpeechRecognizer.createSpeechRecognizer(this);
     mRecognizer.setRecognitionListener(listener);
     mRecognizer.startListening(i);

     textView = (TextView) findViewById(R.id.textView);
 }

5. 리스너 작성 (onResult 수정)

 private RecognitionListener listener = new RecognitionListener() {

        @Override
        public void onReadyForSpeech(Bundle params) {
        }
        @Override
        public void onBeginningOfSpeech() {
        }

        @Override
        public void onRmsChanged(float rmsdB) {
        }

        @Override
        public void onBufferReceived(byte[] buffer) {
        }

        @Override
        public void onEndOfSpeech() {
        }

        @Override
        public void onError(int error) {
        }

        @Override
        public void onResults(Bundle results) {
            ///
            String key= "";
            key = SpeechRecognizer.RESULTS_RECOGNITION;
            ArrayList<String> mResult = results.getStringArrayList(key);
            String[] rs = new String[mResult.size()];
            mResult.toArray(rs);
            textView.setText("" + rs[0]);
            mRecognizer.startListening(i);
            ///
        }

        @Override
        public void onPartialResults(Bundle partialResults) {
        }

        @Override
        public void onEvent(int eventType, Bundle params) {
        }
    };

 6. 결과 확인

음성인식

6. 회고

일단 잘 되긴 하지만 세부적으로 어떤 값을 가지고 놀아야 하는지를 아직 정확하게 확인하지 않았다.

세부적인 내용을 확인하고 의도대로 할 수 있도록 확인이 필요하다

7. etc : 내가 원하는 기능에 대한 답변

http://stackoverflow.com/questions/22400462/development-of-application-similar-to-google-now-is-it-possible-to-use-voice

Advertisements

14 thoughts on “[안드로이드 음성인식] TextView 에 내 목소리를 담는 예제

    최원기 said:
    2016년 4월 23일 12:28 오전

    안녕하세요. 감사합니다. 글을 읽고 아주 큰 도움을 받았습니다.
    7.etc.에서 “항상 실행이 되어있고, ‘ok google.’ 이란 단어를 들었을 때 반응하는 앱’을 만들고자 질문하신것으로 보이는데 저것을 읽어봐도 잘 모르겠습니다… 혹시 기존에 포스팅한 코드에서 추가로 어떻게 하셨는지 알려주실수 있을까요?

    좋아요

      feedbackee responded:
      2017년 2월 14일 10:05 오후

      음.. 추가적으로 무언가를 하지는 않았습니다. 본업이 바빠서 블로깅과 안드로이드 배우기를 잠깐 멈췄었습니다. 도움 드리지 못해서 죄송합니다.

      좋아요

    gmjack said:
    2016년 7월 26일 11:30 오전

    잘보고가여

    좋아요

    산잉 said:
    2017년 2월 13일 11:47 오후

    안녕하세요 졸작을하던도중 음성을 텍스트로 변환하는 어플을 만들어보려고 찾는도중 찾게되었습니다!!
    질문 하나만 부탁 드려도 될까요?!
    안드로이드 스튜디오가 처음이라서 많이 모르는것 투성이지만 코드를 전부 잘찾아서 넣던도중 … 리스너에서 막혀서 댓글로 문의드려요!
    5번 리스너onresult 라고 적으셧는데 대체 어디다가 삽입하는건지 알려주실수있나요 ㅜㅜ?

    좋아요

      feedbackee responded:
      2017년 2월 14일 10:02 오후

      안녕하세요, 저도 초보자라서 번역 해가면서 해본거라서요.. 아.. 가물가물하네요 ^^;;
      제가 당장 답변을 드릴 수 없어서 죄송해요
      혹시라도 나중에 알게 되면 알려드릴게요
      감사합니다

      좋아요

        feedbackee responded:
        2017년 6월 4일 5:25 오후

        MainActivity 내에서 onCreate 안에 말고 그 아래에 리스너 작성해 보세요.

        좋아요

        신기현 said:
        2017년 6월 4일 10:05 오후

        혹시지금 만들어진파일있으시면 소스전체좀보내주실수있나요?
        복사해서요
        메모장에
        예를들어
        MAINactivity.xml
        @override
        등등
        이런식으루요 제발부탁드려요ㅠㅠ
        꼭필요해서요 ㅠ

        좋아요

        feedbackee responded:
        2017년 6월 4일 11:38 오후

        죄송하지만 제가 지금은 갖고 있지 않습니다 ㅠ

        좋아요

    신기현 said:
    2017년 6월 3일 4:24 오후

    윗분처럼5번어디다작성해야하나요?

    좋아요

    김하은 said:
    2017년 10월 4일 1:58 오전

    좋은 정보 감사합니다. 실전에 옮기니 오류가 나서 글자 세팅이 안됩니다. 로그 넣어서 잡아보니까 27번째 줄 textView.setText(“” + rs[0]); 이 부분이 작동을 안하는데 다른 방법으로 setText를 할 수는 없을까요?

    좋아요

      HappyThingsMaker responded:
      2017년 10월 4일 2:36 오전

      String key= “”;
      key = SpeechRecognizer.RESULTS_RECOGNITION;
      ArrayList mResult = results.getStringArrayList(key);
      if(mResult.size() > 0){
      String[] rs = new String[mResult.size()];
      mResult.toArray(rs);
      textView.setText(“” + rs[0]);
      }
      mRecognizer.startListening(i);

      이렇게 한 번 소스 수정 해 보시겠어요?

      로그는 어떻게 찍혔는지 혹시 볼 수 있을까요?

      좋아요

        김하은 said:
        2017년 10월 9일 1:30 오후

        추석을 잘보내서 답이 늦었습니다 ㅠㅠ. 음 로그는 그냥 “로그”, “1” 이런식으로 메소드마다 넣어서 안찍히는 로그 있는 쪽이 문제가 있다고 잡아내는 노가다식이라서 딱히 보여드릴 정도가 안됩니다. 여전히 setText가 문제가 되네요. 흠 뭐가 잘못된건지 잡아내고있습니다 ㅠㅠ 답변 감사해요.

        좋아요

    hong said:
    2017년 10월 22일 8:37 오후

    정보 너무너무 감사합니다! 혹시 리스너를 실행시키기 위한 버튼은 따로 만들어서 연결해야하는건가요?

    좋아요

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중