-
[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 기능을 이용하시면 번잡하게 파일도 필요 없이 바로바로 음성으로 출력이 가능해서 편한 것 같습니다.
그럼, 이번 포스팅은 여기서 마치겠습니다.
'프로그래밍 > Android' 카테고리의 다른 글
[Android] HashKey 구하기 (3) 2018.01.16 [Android] 카카오 계정으로 로그인하기 (69) 2017.12.27 [Android] 안드로이드 스튜디오에서 JNI 사용하기 (12) 2017.12.15 [Android] ListView 이해하기 (0) 2017.10.23 [Android] 무선으로 ADB 사용하기 (0) 2017.10.23