장고에서 간단한 TTS 구현

gTTS

gTTS(Google Text-To-Speech)는 구글에서 서비스하는 텍스트를 음성으로 변환해주는 서비스이다.

설치

$ pip install gTTS

기본 사용법

from gtts import gTTS
text ="Hi, everybody. Playing with Python is fun!!!"

tts = gTTS(text=text, lang='en')
tts.save("helloEN.mp3")
  • lang 속성으로 언어를 지정한다. 'en' 은 영어, 'ko' 은 한국어 등으로 설정할 수 있다. 영어는 여자 성우, 한글은 남자 성우이다.(변경 불가)
  • text 속성에 변환하고자하는 텍스트를 넣는다.
  • save 메소드를 통해 변환된 내용을 저장할 수 있다.
  • “모노, 24000 Hz”로 생성된다.

시나리오

장고로 입력 페이지를 만들고 입력을 하면 mp3 변환과 함께 mp3 오디오가 나타나도록 한다.

urls.py

from django.urls import path

from testTTS.views import TTSView, SuccessView

urlpatterns = [
    path('create/', TTSView.as_view()),
    path('success/', SuccessView.as_view())
]

views.py

import os

from gtts import gTTS

# Create your views here.
from django.views.generic import TemplateView, FormView

from testTTS.forms import TTSForm


class TTSView(FormView):
    template_name = 'testTTS/testTTS.html'
    form_class = TTSForm
    success_url = '/tts/success'

    def form_valid(self, form):
        text = self.request.POST['message']
        tts = gTTS(text=text, lang='ko')
        tts.save("%s.mp3" % os.path.join('./TTS/', "tts"))
        print("%s.mp3" % os.path.join('./TTS/', "tts"))
        return super().form_valid(form)


class SuccessView(TemplateView):
    template_name = 'testTTS/successTTS.html'

templates

testTTS.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>TTS</title>
</head>
<body>
<form action="" method="post">
    <h1>변환할 텍스트 입력</h1>
    
    {% csrf_token %}
    {{ form.as_p }}
    
    <input type="submit" value="Send message">
</form>
</body>
</html>
  • 텍스트 입력 페이지

successTTS.html


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
    <title>Title</title>
    {% load static %}
</head>
<body>
 <audio controls>
    <source src="{% static 'tts.mp3' %}" type="audio/mp3">
 </audio>
<p>사연 음성 변환 완료.</p>
</body>
</html>

  • 텍스트를 제출했을 때 성공시 redirect되는 페이지

settings.py

mp3가 저장되는 위치를 static으로 불러오기 위해 settings.py에 추가한다.

STATICFILES_DIRS = ( os.path.join('TTS'), )
김땡땡's blog

김땡땡's blog

김땡땡