안드로이드 스튜디오 자바 구글 tts 사용하기

2023. 3. 17. 11:22·정리 전 게시글/공부 관련

간단하게 안드로이드 스튜디오에서 구글 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

 

TextToSpeech  |  Android Developers

 

developer.android.com

 

먼저 메니페스트에 해당 코드를 적어줍니다

 

<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도 같이 종료시켜줍니다

 

 

저작자표시 (새창열림)

'정리 전 게시글 > 공부 관련' 카테고리의 다른 글

[프로그래머스 1Level, Java] 신고 결과 받기  (0) 2023.03.17
[프로그래머스 1Level, Python3] 신고 결과 받기  (0) 2023.03.17
[백준 1051번 문제, JAVA] 숫자 정사각형  (0) 2023.03.14
프로그래밍 입문 학습 노트 (1)  (0) 2023.03.12
자료구조와 알고리즘 학습 노트 기초 (2) 재귀와 귀납적 사고  (0) 2023.03.12
'정리 전 게시글/공부 관련' 카테고리의 다른 글
  • [프로그래머스 1Level, Java] 신고 결과 받기
  • [프로그래머스 1Level, Python3] 신고 결과 받기
  • [백준 1051번 문제, JAVA] 숫자 정사각형
  • 프로그래밍 입문 학습 노트 (1)
aptenia
aptenia
공부하면서 배운 것들
  • aptenia
    새벽의 아이디어
    aptenia
  • 전체
    오늘
    어제
    • 분류 전체보기 (277)
      • f1tenth (2)
      • 개발 관련 아무거나 (1)
      • 정리 전 게시글 (268)
        • 개발 관련 (25)
        • 정보 관련 (19)
        • 공부 관련 (224)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 네이버 블로그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    이것이자바다
    c언어초보
    백준
    C언어
    자바
    티스토리HTML
    파이썬
    안드로이드
    티스토리스킨편집
    C언어강좌
    일본규슈공업대학교
    이것이자바다확인문제
    공개SW개발자대회
    컨텍스트스위칭
    프로그래머스
    파이어베이스
    마인크래프트
    반복하지않는수
    콜라츠추측
    C++강좌
    마인크래프트강화스크립트
    빅데이터공모전
    마인크래프트스크립트
    프로그래머스PCCE
    마크
    마크스크립트
    이것이자바다연습문제
    티스토리반응형2스킨편집
    스크롤바CSS
    캡스톤디자인
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
aptenia
안드로이드 스튜디오 자바 구글 tts 사용하기
상단으로

티스토리툴바