728x90
반응형
간단하게 안드로이드 스튜디오에서 구글 tts를 사용하여
원하는 글을 소리로 변환하는 방법에 대해 알아보겠습니다
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".MainActivity">
<TextView
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TTS로 변환할 Text를 입력하세요"
android:layout_marginTop="200dp"
app:layout_constraintBottom_toTopOf="@id/etTTS"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/etTTS"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:minWidth="300dp"
app:layout_constraintTop_toBottomOf="@id/tvTitle"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
<Button
android:id="@+id/btnExecute"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="변환"
app:layout_constraintTop_toBottomOf="@id/etTTS"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginTop="50dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>
정말 간단하게 내가 원하는 글을 변환하기 위해 입력폼을 만들어줍니다
package com.zynar.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
private EditText etTTS;
private Button btnExecute;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etTTS = findViewById(R.id.etTTS);
btnExecute = findViewById(R.id.btnExecute); // binding을 사용해도 되고 지금은 아주 간단하게 설명만 할거라서 pass
}
}
메인 액티비티에 대한 기본 화면 틀은 이렇게 만들었습니다
https://developer.android.com/reference/android/speech/tts/TextToSpeech
먼저 메니페스트에 해당 코드를 적어줍니다
<action android:name="android.intent.action.TTS_SERVICE" />
그리고 tts 클래스를 만들어 봅시다
그냥 코드 치는 곳에 TextTo 만 쳐도 저렇게 사용할 수 있는 클래스가 보일겁니다
저는 저걸 상속받아서 중복되는 코드를 최소화 해보려고 합니다
package com.zynar.myapplication;
import android.content.Context;
import android.speech.tts.TextToSpeech;
import java.util.Locale;
public class MyTTS extends TextToSpeech {
public MyTTS(Context context, OnInitListener listener) {
super(context, listener);
this.setPitch(1.0f); // 음성의 높낮이 설정
this.setSpeechRate(1.0f); // 음성의 속도 설정
this.setLanguage(Locale.KOREA);
}
public void speak(CharSequence text) {
this.speak(text, TextToSpeech.QUEUE_FLUSH, null, "id1");
}
public void destroy() {
this.stop();
this.shutdown();
}
}
TextToSpeech 클래스를 상속 받아서 MyTTS 클래스를 만들어봤습니다
리스너는 사실 필요하지는 않지만 상속받은경우 꼭 써야한다고 해서 일단 넣어놨습니다
package com.zynar.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.widget.Button;
import android.widget.EditText;
import java.util.Locale;
public class MainActivity extends AppCompatActivity {
private EditText etTTS;
private Button btnExecute;
private MyTTS tts;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etTTS = findViewById(R.id.etTTS);
btnExecute = findViewById(R.id.btnExecute); // binding을 사용해도 되고 지금은 아주 간단하게 설명만 할거라서 pass
tts = new MyTTS(this, null); // tts 클래스 생성
btnExecute.setOnClickListener(v -> tts.speak(etTTS.getText().toString())); // tts 실행 버튼 리스너
}
@Override
protected void onDestroy() {
super.onDestroy();
tts.destroy();
}
}
메인 액티비티 코드에 제가 만든 MyTTS 클래스를 선언해주고
버튼 클릭 리스너에 EditText 에서 글을 불러온 다음 새로 만든 speak 메서드에 넣어주면 소리로 변환됩니다
종료될경우 tts도 같이 종료시켜줍니다
728x90
반응형
'프로그래밍 > 안드로이드' 카테고리의 다른 글
[Java] 안드로이드 채팅 화면을 리사이클러뷰와 뷰바인딩을 이용해서 만들어보자 (1) | 2023.02.06 |
---|---|
안드로이드 스튜디오 리사이클러뷰 체크박스 리스너 만들기 (0) | 2022.10.10 |
안드로이드 open failed: EACCES (Permission denied) 권한 다 했는데 진짜 해결 방법, 안드로이드 10 이상 (2) | 2022.10.03 |
안드로이드 csv 파일 선택해서 불러오기 (0) | 2022.09.26 |
파이어베이스 안드로이드 사진 다운받기 getFile, FileOutputStream, BitmapFactory (0) | 2022.09.25 |