ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Android] TTS 기능 사용하기
    프로그래밍/Android 2017. 12. 27. 15:09

    이번 포스팅은 안드로이드의 TTS 기능에 대해 살펴보려 합니다.

    TTS가 무엇인지, 어떻게 사용하는 것인지 한번 보도록 하겠습니다.




    TTS란?

    TTS(Text To Speech)란 텍스트로 된 문자를 자동으로 읽어주는 기능을 말합니다.

    기기의 설정에 보시면 접근성 메뉴의 글자 읽어주기 또는 TTS 기능 등으로 설정화면을 확인하실 수 있습니다.


    TTS 기능 설정화면



    기기에 따라 지원이 되는 것도 있고 안되는 것도 있지만 요즘 나오는 최신 기종들을 보면 대부분 지원하고 있습니다.

    그렇다면 내 프로젝트에 어떻게 적용해야 하는지 알아보도록 하겠습니다.



    TTS 사용하기

    TTS를 사용하기에 앞서 우선 프로젝트를 생성하여 레이아웃을 먼저 구성하겠습니다.


    activity_main.xml



    <?xml version="1.0" encoding="utf-8"?>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

        xmlns:app="http://schemas.android.com/apk/res-auto"

        xmlns:tools="http://schemas.android.com/tools"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:gravity="center"

        android:orientation="vertical"

        tools:context="rebuild.com.texttospeech.MainActivity">


        <EditText

            android:id="@+id/edit_readText"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:hint="읽을 문장을 입력해주세요."

            android:textSize="20dp" />


        <Button

            android:id="@+id/btn_speech"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_marginTop="30dp"

            android:text="말하기"

            android:textSize="20dp" />


    </LinearLayout>



    간단하게 읽을 텍스트를 입력할 EditText 하나와 버튼 하나를 배치하였습니다.


    다음은 MainActivity 입니다.


    MainActivity.java



    package rebuild.com.texttospeech;


    import android.speech.tts.TextToSpeech;

    import android.speech.tts.Voice;

    import android.support.v7.app.AppCompatActivity;

    import android.os.Bundle;

    import android.view.View;

    import android.widget.Button;

    import android.widget.EditText;

    import android.widget.Toast;


    import java.util.Locale;


    public class MainActivity extends AppCompatActivity implements View.OnClickListener, TextToSpeech.OnInitListener {

        private EditText edit_readText;

        private Button btn_speech;


        private TextToSpeech tts;


        @Override

        protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            setContentView(R.layout.activity_main);


            edit_readText = (EditText) findViewById(R.id.edit_readText);

            btn_speech = (Button) findViewById(R.id.btn_speech);

            btn_speech.setEnabled(false);

            btn_speech.setOnClickListener(this);


            tts = new TextToSpeech(this, this);

        }


        // 글자 읽어주기

        private void Speech() {

            String text = edit_readText.getText().toString().trim();

            tts.setPitch((float) 0.1);      // 음량

            tts.setSpeechRate((float) 1.0); // 재생속도

            tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);

        }


        @Override

        public void onInit(int status) {

            if (status == TextToSpeech.SUCCESS) {

                // 작업 성공


                int language = tts.setLanguage(Locale.KOREAN);  // 언어 설정

                if (language == TextToSpeech.LANG_MISSING_DATA

    || language == TextToSpeech.LANG_NOT_SUPPORTED) {

                    // 언어 데이터가 없거나, 지원하지 않는경우

                    btn_speech.setEnabled(false);

                    Toast.makeText(this, "지원하지 않는 언어입니다.", Toast.LENGTH_SHORT).show();

                } else {

                    // 준비 완료

                    btn_speech.setEnabled(true);

                }


            } else {

                // 작업 실패

                Toast.makeText(this, "TTS 작업에 실패하였습니다.", Toast.LENGTH_SHORT).show();

            }

        }


        @Override

        public void onClick(View view) {

            switch (view.getId()) {

                case R.id.btn_speech:

                    Speech();

                    break;


                default:

                    break;

            }

        }


        @Override

        protected void onDestroy() {

            if (tts != null) {

                tts.stop();

                tts.shutdown();

            }

            super.onDestroy();

        }

    }



    버튼을 누를 경우, Speech() 메서드를 실행하여, EditText에 입력하신 문장을 읽어주는 구조입니다.

    TTS 객체를 통해 음량, 재생속도, 보이스, 언어 등등 다양한 설정도 가능합니다. 이 부분은 Developer Guide 문서를 참고하시면 좋겠습니다.

    TTS에서는 OninitListener 인터페이스를 제공하고 있는데요, status 변수를 통해 준비 완료 상태를 판별할 수 있습니다.

    예제 사용한 상태 이외에도 각종 Error에 대한 정의도 지원하고 있으니, 필요에 따라 추가적으로 구성하시면 될 듯 합니다.


    Developer Guide 문서

    https://developer.android.com/reference/android/speech/tts/TextToSpeech.html


    추가적으로 Activity가 종료 될 때에 반드시! TTS 객체를 해제해주셔야 합니다.

    옵션들이나 상태 값들은 몇 번 프로그램을 돌려보시면 쉽게 이해가 되실 거라고 생각됩니다.




    간단하게 예제를 통해 사용법을 알아보았는데요, 저도 이 기능을 몰랐을 때는 간단한 음성도 .mp3 파일과 같은 형태로 만들어 사용하였었는데 TTS 기능을 이용하시면 번잡하게 파일도 필요 없이 바로바로 음성으로 출력이 가능해서 편한 것 같습니다.


    그럼, 이번 포스팅은 여기서 마치겠습니다.





Designed by Tistory.